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;
}
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;
}
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()+")");
}
}
}
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
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]
すもも(名詞,一般,*,*,*,*,すもも,スモモ,スモモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
の(助詞,連体化,*,*,*,*,の,ノ,ノ)
うち(名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ)
----------------------
すもも(名詞,一般,*,*,*,*,すもも,スモモ,スモモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
の(助詞,連体化,*,*,*,*,の,ノ,ノ)
うち(名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ)
情報: 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]
すもも(名詞,一般,*,*,*,*,すもも,スモモ,スモモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
の(助詞,連体化,*,*,*,*,の,ノ,ノ)
うち(名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ)
----------------------
すもも(名詞,一般,*,*,*,*,すもも,スモモ,スモモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
も(助詞,係助詞,*,*,*,*,も,モ,モ)
もも(名詞,一般,*,*,*,*,もも,モモ,モモ)
の(助詞,連体化,*,*,*,*,の,ノ,ノ)
うち(名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ)
関連リンク
- CentOS Sen – hiro345
- 日本語形態素解析器Senを導入する その1 Senのインストール – Solr, Python, MacBook Air in Ginza
- Java製形態素解析エンジン「Igo」を試してみる
- CentOS ChaSen Ruby – hiro345
- ChaSenとRubyをMac OS へインストール – hiro345
関連書籍