自動要約アルゴリズムLexRankをPython, Rubyで実装したのですが、速度に不満があり、Go言語で実装したら爆速だったという話です。
LexRankとは
自動要約について興味があり、調べていたところ以下が参考になりました。
実装プラン
一から実装しなくても、形態素解析には kagome、LexRank自体のアルゴリズムは tldr を活用できそうでした。
kagome は辞書が同梱らしいので、使用環境で MeCab を別途インストールする必要がなく、配布の際に非常に便利だと感じました。
tldr は英語のみ対応なのですが、日本語も以下のことをしておけば使用できそうでした。
- 分かち書きしてスペースで区切る
- 文末の "。", "!", ”?” を ".", "!", ”?” に置換
いざ実装!
こんな感じになりました。
思っていたより遥かに簡単でした。ほとんどコード書いてない(笑)。Go言語のエコシステム恐るべし。
名前は brief (要約する)からつけました。
なんとなくムズムズしてgopherくんにブリーフを履かせちゃいました。
いざ実行!
Python, Ruby実装で試した際「風の又三郎」を要約しようとしたのですが、総当たりでランクを算出する処理で時間がかかりすぎ、一時間経っても結果が帰ってきませんでした。
Go言語の方は・・・12秒!
すばらしい!!!!
肝心の要約文なのですが、小説では利用しても効果がよくわかりませんでした。
ニュース等で試すと、要約文である程度内容が把握できたので利用価値があるかと。
お試しあれ!
参考書籍
Go言語を使うにあたってこちらの本を読みました。ツールの使い方やハマりどころが網羅されており、これからGo言語を使う方は手元においておいて損はないと思います。
みんなのGo言語 現場で使える実践テクニック [ 松木雅幸 ] |
ブリーフを履いたgopherくんを書くにあたって、ドット絵に挑戦してみました。こちらの本を片手に初めて書いてみたのですが、知識ゼロの私でもなんとか描くことができました。もっと練習せねば。