#TL;DR
COTOHA APIを利用して、百人一首の中から伝えたいことに近い和歌をサジェストしてくれるようにしました。
より"雅"なコミュニケーションの入り口として、エンジニアと非エンジニアの橋渡しができる。(かもしれない)
伝えたいこと | 提案された和歌 | 意味 |
---|---|---|
転勤されるということをお聞きしてとても寂しい気持ちです。 | 逢ひ見ての 後の心に くらぶれば 昔は物を 思はざりけり | このようにあなたに逢ってからの今の苦しい恋心にくらべると、会いたいと思っていた昔の恋心の苦しみなどは、何も物思いなどしなかったも同じようなものです. |
山里は 冬ぞさびしさ まさりける 人目も草も かれぬと思へば | 山里はいつの季節でも寂しいが、冬はとりわけ寂しく感じられる。尋ねてくれる人も途絶え、慰めの草も枯れてしまうのだと思うと。 | |
君がため 惜しからざりし 命さへ 長くもがなと 思ひけるかな | あなたに会うためなら惜しいとは思わなかった私の命ですが、こうしてあなたと会うことができた今は、いつまでも生きていたいと思っています. |
このように3つほど和歌を提案してみます。(太字は主観で最後に選んだ最も良さそうな和歌です)
はじめに
##皆さん"雅"、足りてますか?
自然言語処理、自然言語処理と皆さん言いますが、そもそも自然言語とは何のためにあるのでしょう。
私はコミュニケーションのためだと思います。そしてコミュニケーションを考えたとき、現代の日本人は大事なことを忘れていると思います。
そう、
雅(みやび)
です。古くは和歌等を通した雅なコミュニケーションが行われていたのに、これは失われつつあります。嘆かわしい。
しかし、現代人にいきなり雅の心を取り戻せと言っても無理があります。そこで、今回は文の最後に引用する和歌を提案することで、現代人にも雅の心を取り戻していこうという試みです。
COTOHA API
COTOHA APIとはNTTさんによる自然言語処理APIでかなり高度、準備等の面倒な機能を簡単に使えるというものです。
無料アカウントでも日に1000件も叩けるという素晴らしさ。
登録は↓より
COTOHA登録ページ COTOHA API PORTAL
今回はこちらのCOTOHA APIの意味同値性判定を利用して最も合う和歌をサジェストします。
#データ
今回はこちらのサイトより百人一首の意味データをお借りしてきました。
本当は自分で訳つけてデータ配布できたら良かったんですけど、時間がたりず…
COTOHA APIを使う。
登録は済ませた上で登録後からの流れを説明いたします。
まぁ、公式のGetting started見ればわかるんですが、念の為。
私はPythonでやったのでrequestsライブラリを使用します。
アクセストークンの取得
登録したら、もらえるトークン取得用id,client id,client secretを元にpostを叩きます。
url = [api発行用URL]
head = {"Content-Type":"application/json"}
params = {"grantType": "client_credentials",
"clientId": [clientid],
"clientSecret": [clientSecret]}
r = requests.post(url,headers=head,data=json.dumps(params))
これをするとアクセストークンがもらえます。24時間に一回?更新する必要があるので繋がんなくなったらこれを叩きましょう。
##apiを叩く
header = {
"Content-Type":"application/json",
"Authorization":"Bearer "+[トークン]
}
datas = {
"sentence":"犬は歩く。"
}
r = requests.post(api_base+"nlp/v1/parse",headers=header,data=json.dumps(datas))
ここのapi_baseは登録するともらえるapiを叩くためのベースurlです。
"nlp/v1/parse"部分が使用したいapi種類で、こちらのリファレンスより確認することができます。一部(3つ)のAPIは有料アカウント限定ですが、大部分が使えます。返り値をjsonにparseしてあとはよしなにします。
最も意味の近い和歌の取得
単純に百人一首の和歌のそれぞれの意味文と、対象にしたい文の類似度を叩いて、類似度の高い順に3つほど和歌を提案するようにします。実装はこちら
def suggest_waka(txt,issyu):
buf = []
for i in range(100):
waka = issyu[i][1]
header = {
"Content-Type":"application/json;charset=UTF-8",
"Authorization":"Bearer "+[トークン]
}
datas = {
"s1":txt,
"s2":waka,
}
r = requests.post(api_base+"nlp/v1/similarity",headers=header,data=json.dumps(datas))
parsed = json.loads(r.text)
buf.append([i,parsed["result"]["score"]])
time.sleep(0.3)
return buf
txtは対象にしたい文、issyuは百人一首配列で、[和歌,解釈]の配列になっています。
これで各和歌に対して類似度が返ってくるので、それを類似度順にソートして高い方から3つほど持ってくれば完成です。
#結果
伝えたいこと | 提案された和歌 | 意味 |
---|---|---|
転勤されるということをお聞きしてとても寂しい気持ちです。 | 逢ひ見ての 後の心に くらぶれば 昔は物を 思はざりけり | このようにあなたに逢ってからの今の苦しい恋心にくらべると、会いたいと思っていた昔の恋心の苦しみなどは、何も物思いなどしなかったも同じようなものです. |
山里は 冬ぞさびしさ まさりける 人目も草も かれぬと思へば | 山里はいつの季節でも寂しいが、冬はとりわけ寂しく感じられる。尋ねてくれる人も途絶え、慰めの草も枯れてしまうのだと思うと。 | |
君がため 惜しからざりし 命さへ 長くもがなと 思ひけるかな | あなたに会うためなら惜しいとは思わなかった私の命ですが、こうしてあなたと会うことができた今は、いつまでも生きていたいと思っています. |
伝えたいこと | 提案された和歌 | 意味 |
---|---|---|
あなたにお会いできる日を心より楽しみにしています。 | 哀れとも いふべき人は 思ほえで 身のいたづらに なりぬべきかな | (あなたに見捨てられた) わたしを哀れだと同情を向けてくれそうな人も、今はいように思えません。(このままあなたを恋しながら) 自分の身がむなしく消えていく日を、どうすることもできず、ただ待っているわたしなのです. |
わびぬれば 今はた同じ 難波なる 身をつくしても 逢はむとぞ思ふ | (あなたにお逢いできなくて)このように思いわびて暮らしていると、今はもう身を捨てたのと同じことです。いっそのこと、あの難波のみおつくしのように、この身を捨ててもお会いしたいと思っています。 | |
陸奥の しのぶもぢずり 誰ゆゑに 乱れそめにし 我ならなくに | 奥州のしのぶもじずりの乱れ模様のように、私の心も(恋のために)乱れていますが、いったい誰のためにこのように思い乱れているのでしょう。 (きっとあなたの所為に違いありません) |
どうでしょうか。多少ドラマチックすぎる嫌いはなくもないですが、"雅"の心を取り戻せてる気がしませんか?
#朝から、完全にぽんぽんぺいんで、つらみが深いので、1日おふとんでスヤァしておきます。明日は行けたら行くマンです!(ネタ)
こんな文章も、和歌を添えればこの通り。
朝から、完全にぽんぽんぺいんで、つらみが深いので、1日おふとんでスヤァしておきます。明日は行けたら行くマンです!
忘れじの 行末までは かたければ 今日を限りの 命ともがな
いつまでも忘れまいとすることは、遠い将来まではとても難しいものですから、(あなたの心変わりを見るよりも早く) いっそのこと、今日を最後に私の命が終わって欲しいものです.
どうでしょうか、急に殊勝な態度に見えませんか?(無理)
#おわりに
想定より思った通りの結果にならなくて少し悲しいです。
人もをし 人もうらめし あぢきなく 世を思ふゆゑに 物思ふ身は
人が愛しくも思われ、また恨めしく思われたりするのは、(歎かわしいことではあるが) この世をつまらなく思う、もの思いをする自分にあるのだなぁ.