2016年10月20日木曜日

Java で形態素解析 kuromoji を使ってみた

概要

Java で形態素解析を使いたいと思っていて探していたら kuromoji という jar だけで動作する形態素解析ライブラリを発見したので使ってみました

環境

  • Mac OS X 10.11.6
  • Eclipse Mars 4.5
  • Java SDK 1.8.0_25
  • Maven 3.3.3
  • kuromoji 0.7.7

ライブラリインストール

今回は Maven を使っているので以下を pom.xml に追加すれば OK です

  • pom.xml
<repositories>
  <repository>
    <id>ATILIKA dependencies</id>
    <url>http://www.atilika.org/nexus/content/repositories/atilika</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>org.atilika.kuromoji</groupId>
    <artifactId>kuromoji</artifactId>
    <version>0.7.7</version>
    <type>jar</type>
    <scope>compile</scope>
  </dependency>
</dependencies>

既に repositories と dependencies タグがある場合はそこに追加してください
記載したら mvn install を実行してライブラリをインストールしてください
Eclipse の場合は追記したら自動的にダウンロードが始まるかもしれません

トラブルシューティング

自分の場合以下のエラーがずっと消えず困りました

[ERROR] Failed to execute goal on project sample: 
Could not resolve dependencies for project test-mvn:sample:jar:0.0.1-SNAPSHOT: 
Failure to find org.atilika.kuromoji:kuromoji:jar:0.7.7 in http://www.atilika.org/nexus/content/repositories/atilika was cached in the local repository, 
resolution will not be reattempted until the update interval of ATILIKA dependencies has elapsed or updates are forced -> [Help 1]

調べてみると .m2 配下にディレクトリはあるのですが、肝心の jar がなくエラーになっていました
仕方ないので本末転倒ですが、jar だけダウンロードして .m2 リポジトリの該当するディレクトリに手動でコピーしました

これでプロジェクトをクリーンすれば mvn install が通るようになりました

サンプルコード

与えられた文章を解析します
名詞だけを取り出して最終的にスペースで区切った文字列を生成します

  • src/main/java/test_mvn/sample/App.java
package test_mvn.sample;

import java.util.ArrayList;

import org.atilika.kuromoji.Token;
import org.atilika.kuromoji.Tokenizer;

public class App {
    public static void main(String[] args) {
        String word = "ご予約受付中!threezeroさんアイテム「Skull Knight (髑髏の騎士)」☆";
        Tokenizer tokenizer = Tokenizer.builder().build();
        ArrayList<String> surfaceForms = new ArrayList<String>();
        for (Token token : tokenizer.tokenize(word)) {
            if (token.getAllFeaturesArray()[0].equals("名詞")) {
                surfaceForms.add(token.getSurfaceForm());
            }
        }
        String ret = String.join(" ", surfaceForms.toArray(new String[0]));
        System.out.println(ret);
    }
}

あとは App.java を直接「Java Application」として実行すれば OK です
Maven 経由で実行したい場合は mvn exec:java が実行できるようにプラグインをインストールすれば OK です

最後に

kuromoji という Java の形態素解析ライブラリを使って見ました
有名な Java の形態素解析に Sen というものがありますが、これは辞書のインストールや sen という本体プログラムのインストールするなど他の準備を行う必要がありました

kuromoji はその辺の作業が不要で jar だけインストールすれば良いのでかなり簡単に使えました
辞書も ipa や juman の辞書をカスタムで使えるようにできるので、すでに辞書がある場合も使いまわすことができます

参考サイト

0 件のコメント:

コメントを投稿