ページのイメージ
採用WEB開発 2018/04/09

MeCabとnattoで形態素解析に挑戦

  •  
  • このエントリーをはてなブックマークに追加

先月、3月30日(金)に、第2回、SOL-Techが開催されました。SOL-Techとは、今年からしずおかオンラインで毎月、行われるWEBの勉強会になります。第2回のテーマは、Ruby on Railsということで、しずおかオンラインのテクニカルスペシャリストである松永さんが講師として、めかぶと納豆について話をしてくれました。

とても面白い技術だったので、今回はこのめかぶと納豆を自分で実際に動かしながら、紹介したいと思います。
(※正しくは、MeCabとnattoです。)

 MeCabとは

MeCabは、オープンソースの形態素解析エンジン。形態素とは意味を持つ表現要素の最小単位のことです。形態素解析は簡単に言うと、①言葉を単語よりも小さな単位に分解し、②それぞれに品詞の種類などの情報付与を行います。例えば、小学生の国語の授業でやったであろう「すもももももももものうち」。これを、形態素解析すると、以下のように分割することができます。

文字列読み品詞の種類
すもも スモモ 名詞、一般
助詞、係助詞
もも モモ 名詞、一般
助詞、係助詞
もも モモ 名詞、一般
助詞、連体化
うち ウチ 名詞、非自立、副詞可能

 nattoとは

Ruby on Rails ではgemというRuby用のライブラリを管理するツールがあり、このgemを使うことによって難しい処理をより簡単に実装することができます。Railsによる開発の強みは、このgemと呼ばれるライブラリが豊富に提供されていることも大きな要因となっています。nattoは、先ほど説明したMeCabをRubyで使えるようにしたライブラリのことです。

MeCabとnattoをインストールする

今回は以下の環境で動かしてみました。

・macOS High Sierra
・Ruby 2.4.0
・Ruby on Rails 5.1.4
・MeCab 0.996
・natto 1.1.1

 ①MeCabをインストールする

今回はパッケージ管理マネージャーのHomebrewを使ってMeCabと、MeCabの辞書を一緒に、ローカル上にインストールします。

brew install mecab mecab-ipadic

②nattoをインストールする

次に、先ほどインストールしたMeCabをRailsで動かすためにnattoをインストールします。
RailsのGemfileにgem nattoを追記して、インストール。

bundle install

また、先ほどMeCabと一緒にインストールしたmecab-ipadicという辞書を使用するためにパスを通します。

export MECAB_PATH=/usr/local/Cellar/mecab/0.996/lib/libmecab.dylib

これで、MeCabとnattoの準備は完了です。 

実際に動かしてみる 

では、実際にMeCabを使ってみます。テキストで入力した文字を形態素解析するという処理を作成してみました。

このMeCabを使った処理は、このような感じになります。

 

nattoを読み込んであげて、parseメソッドの引数に文字を入れてあげるだけでできます。

surfaceに文字列、featureに品詞などの情報が格納されています。

実際に動いたのですが、現在使用している辞書では新語や固有表現には対応できません。

例えば、「カーリング女子 そだねージャパン」と入力すると、

 

「そ」と「だ」と「ね」が分割されてしまいます。これは使用している辞書が新語や固有表現に対応できていないため、こちらの意図したように単語を上手く判別することが出来ていないのです。

そこで出てくるのが、勉強会で紹介されたNEologdという辞書。
この辞書は、固有名詞に強く、週2回以上のペースで新しい言葉などが更新されていくので、固有表現だけなく、流行の言葉にも対応することができます。

NEologdを導入する

では、実際にNEologdという辞書をインストールしてみます。

git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

クローンしたneologdのディレクトリに移動します。
cd mecab-ipadic-neologd

以下のコマンドを使って辞書の最新版をインストールします。
./bin/install-mecab-ipadic-neologd -n

これで準備完了!

あとは、プログラムの中でMeCab.new(-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd)と使用する辞書を変えて動かしてみます。

ちゃんと「そだねージャパン」で識別してくれるようになりました。

終わりに

先月のSOL-Techでは、これらの技術を活用し、キーワード検索機能を、よりスピーディーに実装するというところまで見せていただきました。本当は、キーワード検索まで実装したかったのですが、ここまででだいぶ長文になってしまったため、以上とさせていただきます。
しずおかオンラインのメディアである、まちぽスタンプや、イエタテでは、こうした技術を活用してユーザーの方が使いやすい検索機能を実装していますので、ぜひ使ってみてください。

次のSOL-Techは4月27日(金) 18:30 ~ になります。次回も面白くなりそうなので、興味がある方はぜひご参加ください。

 

 

参考ページ
新語・固有表現に強い「mecab-ipadic-NEologd」の効果を調べてみた : LINE EngineeringBlog
mecab-ipadic-neologd/README.ja.md at master · neologd/mecab-ipadic-neologd · GitHub
MeCab: Yet Another Part-of-Speech and Morphological Analyzer

 


しずおかオンライン中途採用社員も、積極募集中!
「womo」「イエタテ」のスタッフとして、地域の魅力を伝える仕事です。
くわしくはこちら!

Category

Ranking