月別アーカイブ: 2012年11月

日本語の形態素解析にlucene-gosenを使ってみる

 TweeToyamaを全面的に改修(というか作り直し)することにしました。
 来年の春頃には今のBOTと入れ替えできるといいなー、くらいのペースだけど…

 さて、今まで@TweeToyamaで必要な形態素解析にはsen-1.2.2.1を利用していたのですが、新規に環境を構築するあたって導入の際に下記のトラブルに遭遇しました。

  ・Sen自体の配布が公式にされていない(再配布などを探すしかない)
  ・antで辞書をビルドする必要があるのだが、ipadicのリンクが切れている
  ・他から探してきたipadicを使うもエラーがでる

 だいたいのトラブルはSenの開発が疾うの昔に止まっていることに原因があり、そのため多くの導入解説サイトも内容が現状に適合していません。

 そもそもSenは導入に手間がかかりすぎる。そこでlucene-gosenを使ってみることにしました。これは辞書が別途必要なSenと異なり辞書が同梱されているため、Jarをビルドパスに設定するだけでお手軽に使うことができる。実際に利用する際の手順はSenとほぼ同じです。というか中身はSenそのものっぽい。

 トラブルで無駄に費やした俺の数時間は何だったのだろうか?
 道具の扱いに困ったときはあっさり乗り換えたほうが良い。道具が無料なときは

・簡単なサンプルコード

import java.io.IOException;
import java.util.LinkedList;

import net.java.sen.SenFactory;
import net.java.sen.StringTagger;
import net.java.sen.dictionary.Token;

public class TestMorph {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {

		String text = "ニワトリはいつもハダシ";

		StringTagger tagger = SenFactory.getStringTagger(null);
		LinkedList<Token> tokens = new LinkedList<Token>();
		tagger.analyze(text, tokens);

		for (Token token : tokens)
			System.out.println(token.getSurface()+" ("+token.getMorpheme().getPartOfSpeech()+")");
	}
}

・実行結果
ニワトリ (名詞-一般)
は (助詞-係助詞)
いつも (副詞-一般)
ハダシ (名詞-一般)

 つぎはこれを使って、TF-IDFやマルコフ連鎖を使った人工無脳を作る予定です。