前置き
前回の記事の続きです。
間に記事を挟んだことから類推可能な通り、今回はPythonを採用して検索しております。
動作させるための利用環境は該当記事を参考にしてください。
なお、Elasticsearchについては、これまでの記事(1、2、3)の手順に沿ってWikipediaのデータを投入した環境という前提となります。
取得コード
今回は環境構築の記事だけでお腹いっぱいになったので、内容は余り触れずコードと結果をみてみたいと思います。余り大したことしてないですし。
120行ちょっとのコードなので適当にデバッグコードを挟みながら動作を確認いただけるといいかなと思います。
頻度表の作成についてはまだ方式を決めかねたため、2パターンのコードが併存しているいけてないコードです。
※公式によるとMeCabは未知の品詞を自動判定させるようなので。
最終的にはきれいにしたものを正式公開したいですね。
その際、ライセンスについてはこのブログについてに書いてある通りですが、Apache2.0でgithub公開にしてもいいかもですね。夢が広がります。
結果
先のコードは指定したキーワード「ブルータス」で検索を掛けて、形態素解析にて単語に分解し、Mecabで品詞を特定した上で、ブルータスに関連しそうな名詞を拾い上げるという処理です。
保存されるファイルの内容は以下の通りです。
- doclist.json:Elasticsearchから取得した200件の記事内容
- termlist.json:MeCabで形態素解析を行った結果(頻度表)
- filtertermlist.json:頻度表から不要と思われる情報を除外した結果
それぞれの情報は各々で実行してご確認ください。以下は結果の一部抜粋です。
キーワード「ブルータス」を基準に確認をしていきましょう。
ローマの人なのでローマのカウント率が高いですね。
英語読みのブルータスから、ラテン語のブルトゥスを拾うことができています。
シェイクスピアの戯曲で有名なので、シェイクスピアが上位に来ていますね。
戯曲名はジュリアス・シーザーでこれも上位に来ています。
というか、カエサルの英語読みなので、上位に来て当然ですが。
ブルータスはカエサルの暗殺に関わり、カエサルから「ブルータスよ、お前もか」と言われた人物として有名なので、カエサルは上位にランクインします。
実際にWikipediaの本人のページを検索するとカエサルが46件ヒットします。
どうやら、それなりに関連性の高い単語を拾えていそうです。
なお、77行目で指定しているキーワードを「カエサル」に変えて同じことをしてみましたが、ブルータス、ブルトゥスともに比率は低めでした。クレオパトラのほうがまだ高かったですね。
あとは戦争、戦記、内戦など、戦いに明け暮れた人なのかと思わせるキーワードが上位でした。
エンジニア的にはシーザー暗号から「暗号」というキーワードに期待したのですが、2件でした。先頭から200件の記事しか参照していないので仕方がないかも知れませんが。
この関わりの深い単語を拾う行為を共起というそうです。せっかくなので次回はこの記事にある他の方式を試したい。 https://qiita.com/nishina555/items/c650dd06b283996210ac
0 件のコメント:
コメントを投稿