LoginSignup
214
146

More than 3 years have passed since last update.

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

Posted at

忙しい人のための概要

オレ プログラム ウゴカス オマエ ゲンシジン ナルの記事に触発されて、言語処理を試してみました。
いにしえのネタである「忙しい人向けシリーズ」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. 『勇者王誕生!』作詞:米たにヨシトモ 

214
146
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
214
146