Sen を Java で使う

Sen を Java で使うプログラムを動作させてみました。

ところで、気になったのですが、StringTaggerクラスの hasNextメソッドとnextメソッドを使うとエラーになるので、修正したものを使うことにしました。

src/java/net/java/sen/StringTagger.java

    public boolean hasNext() {
        if (token == null && cnt == token.length)
            return false;
        return true;
    }

これは下記のように修正しました。java.net へ接続できないのでフィードバックしていないのですが…

    public boolean hasNext() {
        if (token == null || cnt == token.length)
            return false;
        return true;
    }

作成したサンプルプログラムは次の通り。

SenStringTaggerSample.java

import java.io.IOException;
import net.java.sen.StringTagger;
import net.java.sen.Token;
public class SenStringTaggerSample {
  public static void main(String[] args)
  throws IllegalArgumentException, IOException {
    StringTagger st = StringTagger.getInstance();
    String s = "すもももももももものうち";
    Token[] ts = st.analyze(s);
    for(int i=0; i<ts.length; i++){
      System.out.println(ts[i].getBasicString()+"("+ts[i].getTermInfo()+")");
    }
    System.out.println("----------------------");
    String userHome=System.getProperty("user.home");
    String conf=userHome+"/applications/sen-1.2.2.1_ipadic-2.6.0/conf/sen.xml";
    StringTagger st2 = StringTagger.getInstance(conf);
    st2.analyze(s);
    while(st2.hasNext()){
      Token t = st2.next();
      System.out.println(t.getBasicString()+"("+t.getTermInfo()+")");
    }
  }
}

コンパイルと実行するには、次のようにします。SEN_HOMEについては、プログラム中で指定することも可能で、その場合は「System.setProperty("sen.home","/usr/local/sen");」のように指定することになります。実際のアプリケーションでは、プロパティファイルなどで指定可能にしておくのがいいのかもしれません。

SEN_HOME=${HOME}/applications/sen-1.2.2.1_ipadic-2.6.0
CLASSPATH=${SEN_HOME}/lib/sen.jar
CLASSPATH=${CLASSPATH}:${SEN_HOME}/lib/commons-logging.jar
javac -cp ${CLASSPATH} SenStringTaggerSample.java
java -Dsen.home=${SEN_HOME} -cp .:${CLASSPATH} SenStringTaggerSample

実行結果は次のような感じになります。

2011/03/19 13:28:15 net.java.sen.Dictionary <init>
情報: token file = /home/wvwr/applications/sen-1.2.2.1_ipadic-2.6.0/dic/token.sen
2011/03/19 13:28:16 net.java.sen.Dictionary <init>
情報: time to load posInfo file = 164[ms]
2011/03/19 13:28:16 net.java.sen.Dictionary <init>
情報: double array trie dictionary = /home/wvwr/applications/sen-1.2.2.1_ipadic-2.6.0/dic/da.sen
2011/03/19 13:28:16 net.java.sen.util.DoubleArrayTrie load
情報: loading double array trie dict = /home/wvwr/applications/sen-1.2.2.1_ipadic-2.6.0/dic/da.sen
2011/03/19 13:28:16 net.java.sen.util.DoubleArrayTrie load
情報: loaded time = 0.503[ms]
2011/03/19 13:28:16 net.java.sen.Dictionary <init>
情報: pos info file = /home/wvwr/applications/sen-1.2.2.1_ipadic-2.6.0/dic/posInfo.sen
2011/03/19 13:28:16 net.java.sen.Dictionary <init>
情報: time to load pos info file = 0[ms]
2011/03/19 13:28:16 net.java.sen.Tokenizer loadConnectCost
情報: connection file = /home/wvwr/applications/sen-1.2.2.1_ipadic-2.6.0/dic/matrix.sen
2011/03/19 13:28:17 net.java.sen.Tokenizer loadConnectCost
情報: time to load connect cost file = 466[ms]
すもも(名詞,一般,*,*,*,*,すもも,スモモ,スモモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
の(助詞,連体化,*,*,*,*,の,ノ,ノ)
うち(名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ)
----------------------
すもも(名詞,一般,*,*,*,*,すもも,スモモ,スモモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
の(助詞,連体化,*,*,*,*,の,ノ,ノ)
うち(名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ)

関連リンク

関連書籍


同じタグの記事: Sen
同じカテゴリの記事: Java