忙しい人のための自然言語処理


忙しい人のための概要

オレ プログラム ウゴカス オマエ ゲンシジン ナルの記事に触発されて、言語処理を試してみました。
いにしえのネタである「忙しい人向けシリーズ」1が好きなので、COTOHA APIの要約APIを使って、有名どころの歌を忙しい人向けにしてみました。

※注意書き
以下コードの出力結果(黒背景部分)に要約された歌詞が出てきますが、著作権法第32条に従い言語処理の研究目的で使用しています。(要約APIの仕様上、適宜「。」で区切っています(後述))
また、著作権法48条に従って、曲のタイトルと作詞者名を記事下部に明記しています。

例: 忙しい人のための『粉雪』2

$ python3 youyaku.py < konayuki.txt
ララライ。粉雪。心まで白く染められたなら。

さすがに「来ねぇ」とかになったりはしないようですが、出現回数が多そうなところが出てて納得感(?)ありますね!

環境

Python 3.6.9

実装

COTOHA APIの要約APIを利用して3行に要約します。
コードはほとんどゲンシジンの記事を参考に書いていますが、BASE_URL書き換えたり、要約用にパラメータ変えたりしています。また、歌詞をそのまま与えると全然要約してくれなかったので、改行など歌詞の所々で適宜「。」を入れています。

コード

ここをクリックすると展開します。
youyaku.py

import requests
import json
import sys

BASE_URL = "https://api.ce-cotoha.com/api/dev/"
CLIENT_ID = "COTOHA APIで取得したIDを入力"
CLIENT_SECRET = "COTOHA APIで取得したパスワードを入力"


def auth(client_id, client_secret):
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }

    data = {
        "grantType": "client_credentials",
        "clientId": client_id,
        "clientSecret": client_secret
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))
    return r.json()["access_token"]


def summary(document, access_token, sent_len):
    base_url = BASE_URL
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    data = {
        "document": document,
        "sent_len": sent_len
    }
    r = requests.post(base_url + "nlp/beta/summary",
                      headers=headers,
                      data=json.dumps(data))
    return r.json()


if __name__ == "__main__":
    document = "歌詞をここに記載"
    args = sys.argv
    if len(args) >= 2:
        document = str(args[1])

    access_token = auth(CLIENT_ID, CLIENT_SECRET)
    summary_document = summary(document, access_token, 3)
    result_list = list()
    for chunks in summary_document['result']:
      result_list.append(chunks)

    print(''.join(result_list))

結果

『音頭「水戸黄門」あゝ人生に涙あり』3

$ python3 youyaku.py < mitokomon.txt
泣くのがいやならさあ歩け。人生涙と笑顔あり。何かを求めて生きようよ。

『ドラえもんのうた』4

$ python3 youyaku.py < doraemon.txt
みんなみんなみんな かなえてくれる。アンアンアン。とってもだいすきドラえもん。

『それが大事』5

$ python3 youyaku.py < soregadaiji.txt
負けない事・投げ出さない事・逃げ出さない事・信じ抜く事。駄目になりそうな時。それが一番大事。

『ガッチャマンの歌』6

$ python3 youyaku.py < gachaman.txt
ガッチャマン。飛べ。行け。

『摩訶不思議アドベンチャー』7

$ python3 youyaku.py < makafushigi.txt
DRAGONBALL。try。fly。

『勇者王誕生!』8

$ python3 youyaku.py < yushaou.txt
ガガガッ。ガオガイガー!。ガガガガッ。

まとめ

様々な名曲を要約してみました。
良い歌は短くしても深い


  1. ニコニコ大百科:忙しい人向けシリーズ 

  2. 『粉雪』作詞:藤巻亮太 

  3. 『音頭「水戸黄門」あゝ人生に涙あり』作詞:山上路夫 

  4. 『ドラえもんのうた』作詞:楠部工 

  5. 『それが大事』作詞:立川俊之 

  6. 『ガッチャマンの歌』作詞:竜の子プロダクション文芸部 

  7. 『摩訶不思議アドベンチャー』作詞:森由里子 

  8. 『勇者王誕生!』作詞:米たにヨシトモ