Java製形態素解析器「Kuromoji」を試してみる概要Javaの比較的新しい形態素解析器、Kuromoji。lucene-gosenやGomokuのように辞書内包で、jarを落とせばその場で利用でき、Unidicに対応していて、ソースがLuceneのtrunkにコミットされているという、何かと気になる特徴の持ち主。新聞」のように検索で利用しやすい形にばらして解析してくれたり、Extendedモードを使うと未知語をuni-gramにしてくれたりもするらしい。今日はそんなKuromojiさんの導入から簡易な使い方までをさらっと追いかけてみた。Java1.6導入まずは下記ページからダウンロード。今回はkuromoji-0.7.5.tar.gzを利用。atilika/kuromojihttps://github.com/atilika/kuromoji/downloads落としたファイルを解凍して中のjarをクラスパスに入れれば導入完了。Mavenも利用できる。</dependency>Luceneと同じくApacheライセンス。ソースはgithubから落とせる。https://github.com/atilika/kuromoji.git形態素解析してみる以下のようなコードで形態素解析できる。token.isUser());}上記のコードは「もう眠い」という言葉を解析しています。falseサンプルコード全文モードを使い分けてみるBuilderにmodeを設定することで、解析結果が変化する。新聞」のように分けて解析してくれる。全文検索エンジンと組み合わせて利用する場合に、日本経済新聞が「経済」や「新聞」でも検索可能になるので便利。Extendedモードはそれに加えて、未知語をuni-gramとして扱う。ー」と1文字ごとに分割される。未知語を検索し損ねることを減らしてくれそうな機能。サンプルコード全文ソースを見る限りSearchモードは、漢字のみで構成される4文字以上の単語、もしくは7文字以上の単語に対してコストを重くすることで、分割を促しているようだ。テスト」に分割される。ユーザ辞書の利用Builderにユーザ辞書を渡して、その場で辞書をカスタマイズすることもできるらしい。ユーザ辞書の書き方は、githubからソースを落としてくると「src/example/resources/userdict.txt」にサンプルが置いてある。寛」に分割したい場合は、以下のように書くらしい。ユタカ,カスタム人名ユーザ辞書は以下のようにBuilderのuserDictionaryで指定する。寛ユーザ辞書はコストは設定しないらしい。ソースのUserDictionary.javaを見たら-100000と書いてあったので、ユーザ辞書に入れた単語は高確率で優先されることになりそう。本」にばらされたりした。UniDicを利用してみるKuromojiはUniDicにも対応しているらしい。下記サイトから個別ファイルの方のunidic-mecabのsrcをダウンロード(要登録)して解凍する。UniDichttp://www.tokuteicorpus.jp/dist/次にKuromojiのソースをチェックアウト。https://github.com/atilika/kuromoji.gitチェックアウトしたソースのpom.xmlのpropertiesを以下のように変更する。</properties>Mavenが必要なので入ってない場合はインストールして、以下のコマンドを実行する。jar:jarこれでtargetディレクトリ配下にjarが生成される。出来上がったjarにはUniDicが適用されている。Luceneで利用してみる下記URLからkuromoji-solrのjarを落としてくる。http://atilika.org/confluence/pages/viewpage.action?pageId=131141Mavenの場合は以下のような感じ。</dependency>下記サイトからlucene-coreのjarも落としてくる。あと、CommonsIOも必要らしい。http://lucene.apache.org/java/docs/Kuromojiでは以下のようにTokenizerを引数で渡すことで初期化する。KuromojiAnalyzer(tokenizer);サンプルコード全文lucene-gosenでやっているような、動詞の揺れを吸収する(「思った」を「思う」で検索してもヒットする)ような処理は見た限りではやってないっぽかった。luceneのtrunkの中にはKuromojiBaseFormFilterというそれらしきクラスがいたりした。Searchモードはインデックスのサイズもそれほど肥大化せず、そこそこに救える文字列が増えるので良いと思った。Solrで利用してみるSolr用のTokenizerもちゃんと用意されている。Solrを落としてきて解凍する。apache-solr-3.5.0.tgz解凍したフォルダのexample/solrディレクトリに、kuromoji-x.x.x.jarと、kuromoji-solr-x.x.x.jarを入れる。schema.xmlには以下のように記述する。</fieldType>modeのところはnormalやextendedが選べるっぽい。user-dictionaryにユーザ辞書のパスを指定することもできるようだ。lucene-gosenも一緒に入れて、JapaneseWidthFilterFactoryとかJapaneseKatakanaStemFilterFactoryとかを併用してみたところ、軽く動かした感じでは想定通りの動きをしてくれていた。johtaniの日記http://johtani.jugem.jp/?eid=15。