Jan 31, 2011

sen 1.2.2.1 インストール 辞書をnaist-jdic にする

Mecab の Java移植版。
構築する辞書の文字コードを、サーバの文字コードと同じ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


バグ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


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}"/>


辞書ファイルの生成

# 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) イー イー

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

未知語でも良いので、連結してくれる方がいいよね。


さて、あとは、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