構築する辞書の文字コードを、サーバの文字コードと同じUTF-8に変更します。
また、ipadic の後継版である、NAIST Japanese Dictional を使うように修正します。
download from https://sen.dev.java.net/servlets/ProjectDocumentList?folderID=755&expandFolder=755&folderID=755
環境:
CentOS 5.5 i386 on VMware Fusion3
Apache Ant
sen 1.2.2.1 インストール
# unzip sen-1.2.2.1.zip -d $INSTALL_DIR
# export SEN_HOME=$INSTALL_DIR/sen-1.2.2.1
# export SEN_HOME=$INSTALL_DIR/sen-1.2.2.1
バグFIX
http://d.hatena.ne.jp/gnarl/20080912/1221189985
※ sen のコンパイルには、gcc-c++ などが必要です。
sen の辞書作成
a. 構築する辞書の文字コードを、utf-8 に変更する。(デフォルトは euc-jp)
b. NAIST-jdic の辞書を利用するように変更する。
文字コードの編集対象ファイルは、sen.xml, sen-processor.xml, dictionary.properties の3つです。
元々の辞書ファイルは、euc-jp で記述されており、その設定は変更しません。
# cd $SEN_HOME
# vi conf/sen.xml
<charset>utf-8</charset>
# vi conf/sen-processor.xml
<charset>utf-8</charset>
# vi dic/dictionary.properties
sen.charset=utf-8
# vi conf/sen.xml
<charset>utf-8</charset>
# vi conf/sen-processor.xml
<charset>utf-8</charset>
# vi dic/dictionary.properties
sen.charset=utf-8
ChaSen 用の NAIST辞書ファイル(NAIST-jdic)をダウンロード。
http://sourceforge.jp/projects/naist-jdic/
# cp naist-jdic-0.4.3.tar.gz $SEN_HOME/dic/
build.xml の編集
ipadic の設定を、naist-jdic に変更します。
また同時に、OutOfMemoryError を回避するために、maxmemory を増やしておきます。
# cd $SEN_HOME/dic
# vi build.xml
<target name="create" depends="dics0" unless="dics.present">
<java classname="net.java.sen.tools.MkSenDic"
fork="true"
maxmemory="512m">
ipadic のファイル名を、naist-jdic に変更。
# diff build.xml build_naist-jdic.xml
17,19c17,19
< <property name="ipadic.version" value="2.6.0"/>
< <property name="ipadic.archive" value="ipadic-${ipadic.version}.tar.gz"/>
< <property name="ipadic.dir" value="ipadic-${ipadic.version}"/>
---
> <property name="ipadic.version" value="0.4.3"/>
> <property name="ipadic.archive" value="naist-jdic-${ipadic.version}.tar.gz"/>
> <property name="ipadic.dir" value="naist-jdic-${ipadic.version}"/>
56c56
< <available file="ipadic-${ipadic.version}/Noun.dic"/>
---
> <available file="naist-jdic-${ipadic.version}/Noun.dic"/>
89c89
< <arg line="${ipa2mecab} ipadic-${ipadic.version}"/>
---
> <arg line="${ipa2mecab} naist-jdic-${ipadic.version}"/>
# vi build.xml
<target name="create" depends="dics0" unless="dics.present">
<java classname="net.java.sen.tools.MkSenDic"
fork="true"
maxmemory="512m">
ipadic のファイル名を、naist-jdic に変更。
# diff build.xml build_naist-jdic.xml
17,19c17,19
< <property name="ipadic.version" value="2.6.0"/>
< <property name="ipadic.archive" value="ipadic-${ipadic.version}.tar.gz"/>
< <property name="ipadic.dir" value="ipadic-${ipadic.version}"/>
---
> <property name="ipadic.version" value="0.4.3"/>
> <property name="ipadic.archive" value="naist-jdic-${ipadic.version}.tar.gz"/>
> <property name="ipadic.dir" value="naist-jdic-${ipadic.version}"/>
56c56
< <available file="ipadic-${ipadic.version}/Noun.dic"/>
---
> <available file="naist-jdic-${ipadic.version}/Noun.dic"/>
89c89
< <arg line="${ipa2mecab} ipadic-${ipadic.version}"/>
---
> <arg line="${ipa2mecab} naist-jdic-${ipadic.version}"/>
辞書ファイルの生成
# ant
確認
# sh $SEN_HOME/bin/sen.sh
done.
Please input Japanese sentence:
[INFO] Dictionary - token file = /usr/local/sen-1.2.2.1/dic/token.sen
[INFO] Dictionary - time to load posInfo file = 22[ms]
[INFO] Dictionary - double array trie dictionary = /usr/local/sen-1.2.2.1/dic/da.sen
[INFO] DoubleArrayTrie - loading double array trie dict = /usr/local/sen-1.2.2.1/dic/da.sen
[INFO] DoubleArrayTrie - loaded time = 0.631[ms]
[INFO] Dictionary - pos info file = /usr/local/sen-1.2.2.1/dic/posInfo.sen
[INFO] Dictionary - time to load pos info file = 0[ms]
[INFO] Tokenizer - connection file = /usr/local/sen-1.2.2.1/dic/matrix.sen
[INFO] Tokenizer - time to load connect cost file = 91[ms]
無事に形態素解析されますか?
無事 (無事) 名詞-形容動詞語幹(0,2,2) ブジ ブジ
に (に) 助詞-副詞化(2,3,1) ニ ニ
形態素 (形態素) 名詞-一般(3,6,3) ケイタイソ ケイタイソ
解析 (解析) 名詞-サ変接続(6,8,2) カイセキ カイセキ
さ (する) 動詞-自立(8,9,1) サ サ
れ (れる) 動詞-接尾(9,10,1) レ レ
ます (ます) 助動詞(10,12,2) マス マス
か (か) 助詞-副助詞/並立助詞/終助詞(12,13,1) カ カ
? (?) 記号-一般(13,14,1) ? ?
すもももももももものうち
すもも (すもも) 名詞-一般(0,3,3) スモモ スモモ
も (も) 助詞-係助詞(3,4,1) モ モ
もも (もも) 名詞-一般(4,6,2) モモ モモ
も (も) 助詞-係助詞(6,7,1) モ モ
もも (もも) 名詞-一般(7,9,2) モモ モモ
の (の) 助詞-連体化(9,10,1) ノ ノ
うち (うち) 名詞-非自立-副詞可能(10,12,2) ウチ ウチ
在庫品SALE
在庫 (在庫) 名詞-サ変接続(0,2,2) ザイコ ザイコ
品 (品) 名詞-接尾-一般(2,3,1) ヒン ヒン
S (S) 記号-アルファベット(3,4,1) エス エス
A (A) 記号-アルファベット(4,5,1) エイ エイ
L (L) 記号-アルファベット(5,6,1) エル エル
E (E) 記号-アルファベット(6,7,1) イー イー
done.
Please input Japanese sentence:
[INFO] Dictionary - token file = /usr/local/sen-1.2.2.1/dic/token.sen
[INFO] Dictionary - time to load posInfo file = 22[ms]
[INFO] Dictionary - double array trie dictionary = /usr/local/sen-1.2.2.1/dic/da.sen
[INFO] DoubleArrayTrie - loading double array trie dict = /usr/local/sen-1.2.2.1/dic/da.sen
[INFO] DoubleArrayTrie - loaded time = 0.631[ms]
[INFO] Dictionary - pos info file = /usr/local/sen-1.2.2.1/dic/posInfo.sen
[INFO] Dictionary - time to load pos info file = 0[ms]
[INFO] Tokenizer - connection file = /usr/local/sen-1.2.2.1/dic/matrix.sen
[INFO] Tokenizer - time to load connect cost file = 91[ms]
無事に形態素解析されますか?
無事 (無事) 名詞-形容動詞語幹(0,2,2) ブジ ブジ
に (に) 助詞-副詞化(2,3,1) ニ ニ
形態素 (形態素) 名詞-一般(3,6,3) ケイタイソ ケイタイソ
解析 (解析) 名詞-サ変接続(6,8,2) カイセキ カイセキ
さ (する) 動詞-自立(8,9,1) サ サ
れ (れる) 動詞-接尾(9,10,1) レ レ
ます (ます) 助動詞(10,12,2) マス マス
か (か) 助詞-副助詞/並立助詞/終助詞(12,13,1) カ カ
? (?) 記号-一般(13,14,1) ? ?
すもももももももものうち
すもも (すもも) 名詞-一般(0,3,3) スモモ スモモ
も (も) 助詞-係助詞(3,4,1) モ モ
もも (もも) 名詞-一般(4,6,2) モモ モモ
も (も) 助詞-係助詞(6,7,1) モ モ
もも (もも) 名詞-一般(7,9,2) モモ モモ
の (の) 助詞-連体化(9,10,1) ノ ノ
うち (うち) 名詞-非自立-副詞可能(10,12,2) ウチ ウチ
在庫品SALE
在庫 (在庫) 名詞-サ変接続(0,2,2) ザイコ ザイコ
品 (品) 名詞-接尾-一般(2,3,1) ヒン ヒン
S (S) 記号-アルファベット(3,4,1) エス エス
A (A) 記号-アルファベット(4,5,1) エイ エイ
L (L) 記号-アルファベット(5,6,1) エル エル
E (E) 記号-アルファベット(6,7,1) イー イー
NAIST-jdic への移行は無事できましたが、ただ、英単語を分つことができない。。
原因はアルファベットが辞書に登録してあるためでした。
そこで、アルファベットを取り除いてみると。
# diff ipa2mecab_org.pl ipa2mecab.pl
188,189d187
< next if ($pos2 eq 'アルファベット');
<
# ant
# sh $SEN_HOME/bin/sen.sh
在庫品SALE
在庫 (在庫) 名詞-サ変接続(0,2,2) ザイコ ザイコ
品 (品) 名詞-接尾-一般(2,3,1) ヒン ヒン
SALE (SALE) 未知語(3,7,4) null null
188,189d187
< next if ($pos2 eq 'アルファベット');
<
# ant
# sh $SEN_HOME/bin/sen.sh
在庫品SALE
在庫 (在庫) 名詞-サ変接続(0,2,2) ザイコ ザイコ
品 (品) 名詞-接尾-一般(2,3,1) ヒン ヒン
SALE (SALE) 未知語(3,7,4) null null
未知語でも良いので、連結してくれる方がいいよね。
さて、あとは、mecab用の最新の辞書を取込んでみたいところ。
mecab-naist-jdic-0.6.3-20100801/naist-jdic.csv
の方が約30,000語も多いし。。
どなたか NAIST-jdic for mecab の辞書を sen に取込む方法をご存知の方がいれば、
ご連絡くださいますと幸いです。
追記:
2/18
その後、sen.xml に、composit の設定を追加することによって、アルファベットや数字を結合できることが
分かりました。
そのため、辞書からアルファベットを取り除くよりも、composit を設定して結合する方がいいかと思い、
再度アルファベットを辞書に登録しました。
また、「-」をアルファベットとすると、wi-fi のような単語を作ることができるので、
- を記号、アルファベットとして、カスタム辞書に登録しました。
Sen は奥深いですね。関係者の方々に心から感謝です。
参考サイト
http://ultimania.org/sen/
http://kazuakey.blogspot.com/2010/12/solr-14-sen.html
http://d.hatena.ne.jp/gnarl/20080912/1221189985
http://d.hatena.ne.jp/code46/comment?date=20090531
No comments:
Post a Comment