形態素解析してみる

Luceneのライブラリを使って形態素解析してみる。

まずは、Senとかダウンロード。

http://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/Sen.html
lucene-ja-~と、sen-~をダウンロードする。

Senのdicをビルドする

sen-~/dic 配下に移動してantする。
build が成功すれば、token.senとかmatrix.senとかって数種類ファイルが追加されてるはずです。

※ビルド中にファイルダウンロードが実行されます。
Proxyを使ったネットワーク環境の場合、以下のようにantの引数にproxyのホストとポートを指定して実行して下さい。
ant -Dproxy.host=proxy.hoehoe.jp -Dproxy.port=8080

※windowsでbuildする場合、cygwinをインストールして下さい。
でもって、build.xmlのperl.binを以下のように修正する必要があります。
<property name="perl.bin" value="c:/cygwin/bin/perl.exe"/>
<!--<property name="perl.bin" value="/usr/bin/perl"/>-->

クラスパスに必要なjarを配置
  • commons-logging.jar
  • lucene-1.4.3.jar
  • lucene-ja.jar
  • sen.jar

JapaneseAnalyzerを使ってみる


import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.ja.JapaneseAnalyzer;

public class SenSample {

static {

// Senのホームディレクトリをシステムプロパティに設定
// ディレクトリパスにスペース、日本語は使用できません!
System.setProperty("sen.home", "C:/hogehoge/sen-1.2.2.1");
}

public void JapaneseAnalyzerTest(String s) {

StringReader reader = null;
try {

JapaneseAnalyzer analyzer = new JapaneseAnalyzer();
reader = new StringReader(s);
TokenStream tokenStream = analyzer.tokenStream("", reader);
Token token = null;
while ((token = tokenStream.next()) != null) {

System.out.println(token.termText() + ":" + token.type());
}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (reader != null) {

reader.close();
}
}
}
}

public class Sample {

public static void main(String[] args) {

SenSample senSample = new SenSample();

senSample.JapaneseAnalyzerTest("形態素解析できるのかテスト中です!");
}
}



Sampleクラスのmainを実行すると…

形態素:名詞-一般
解析:名詞-サ変接続
の:名詞-非自立-一般
か:助詞-副助詞/並立助詞/終助詞
テスト:名詞-サ変接続
中:名詞-接尾-副詞可能
です:助動詞

0 コメント: