I love programming and football and family

プログラミング好き、サッカー・フットサル・フットバッグ好き、家族大好きプログラマ

自動要約アルゴリズムLexRankをGo言語で実装してみたら爆速だった

自動要約アルゴリズムLexRankをPython, Rubyで実装したのですが、速度に不満があり、Go言語で実装したら爆速だったという話です。

LexRankとは

自動要約について興味があり、調べていたところ以下が参考になりました。

qiita.com

実装プラン

一から実装しなくても、形態素解析には kagome、LexRank自体のアルゴリズムtldr を活用できそうでした。

kagome は辞書が同梱らしいので、使用環境で MeCab を別途インストールする必要がなく、配布の際に非常に便利だと感じました。

tldr は英語のみ対応なのですが、日本語も以下のことをしておけば使用できそうでした。

  • 分かち書きしてスペースで区切る
  • 文末の "。", "!", ”?” を ".", "!", ”?” に置換

いざ実装!

こんな感じになりました。

github.com

思っていたより遥かに簡単でした。ほとんどコード書いてない(笑)。Go言語のエコシステム恐るべし。

名前は brief (要約する)からつけました。

なんとなくムズムズしてgopherくんにブリーフを履かせちゃいました。

f:id:motok5:20180818082900g:plain

いざ実行!

Python, Ruby実装で試した際「風の又三郎」を要約しようとしたのですが、総当たりでランクを算出する処理で時間がかかりすぎ、一時間経っても結果が帰ってきませんでした。

Go言語の方は・・・12秒!

すばらしい!!!!

肝心の要約文なのですが、小説では利用しても効果がよくわかりませんでした。

ニュース等で試すと、要約文である程度内容が把握できたので利用価値があるかと。

お試しあれ!

参考書籍

Go言語を使うにあたってこちらの本を読みました。ツールの使い方やハマりどころが網羅されており、これからGo言語を使う方は手元においておいて損はないと思います。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

みんなのGo言語 現場で使える実践テクニック [ 松木雅幸 ]
価格:2138円(税込、送料無料) (2018/8/18時点)


ブリーフを履いたgopherくんを書くにあたって、ドット絵に挑戦してみました。こちらの本を片手に初めて書いてみたのですが、知識ゼロの私でもなんとか描くことができました。もっと練習せねば。