連続した数字を1つのトークンにする

Mecab で連続した数字をトークナイズするとだいたい1文字ずつトークナイズされます。連接コストの計算結果で決まるので100%の確率ではありませんが。

$ mecab
bmw318
bmw     名詞,固有名詞,組織,*,*,*,*
3       名詞,数,*,*,*,*,3,サン,サン,,
1       名詞,数,*,*,*,*,1,イチ,イチ,,
8       名詞,数,*,*,*,*,8,ハチ,ハチ,,
EOS


連続した数字を1トークンとする場合には、数字間の連接コストを小さくします。

$ su
$ cd /usr/local/lib/mecab/dic/naist-jdic
$ vi unk.def
NUMERIC,1367,1367,0,名詞,数,*,*,*,*,*  <- 4カラム目の値を 0 にする
$ /usr/local/libexec/mecab/mecab-dict-index  -c=utf-8 <- 辞書をUTF-8で作る場合のオプション デフォルトは EUC-JP
reading ./unk.def ... 40
emitting double-array: 100% |###########################################|
reading ./naist-jdic.csv ... 485893
emitting double-array: 100% |###########################################|
reading ./matrix.def ... 1396x1396
emitting matrix      : 100% |###########################################|


こうなる

$ mecab
bmw318
bmw     名詞,固有名詞,組織,*,*,*,*
318     名詞,数,*,*,*,*,*
EOS


参考ページ
http://mecab.sourceforge.net/unk.html