Hatena::ブログ(Diary)

Solr, Python, MacBook Air in Shinagawa Seaside RSSフィード

2009-09-30

[] CJKTokenizerFactory と NGramTokenizerFactory の動作の違い


祝 Lucene2.9.0 リリース!!

2009/9/25 に Lucene2.9 がようやく正式リリースされました。

便乗して久しぶりの Solr ネタです。


この記事は Lucene2.9.0 がバンドルされている 2009/09/28版の Solr をもとに書いています。

http://people.apache.org/builds/lucene/solr/nightly/solr-2009-09-28.tgz


日本語の文章をインデキシングするときによく使われるトークナイザとして CJKTokenizerFactory があります。

CJKTokenizerFactory は 基本的には 2-gram (別名 bi-gram, bigram ) なので

NGramTokenizerFactory で maxGramSize="2"としたときと

基本的には同じように動作するのですが、いくつか違うところがあります。



以下の例文をトークナイズして見た例です。

僕はBMW318tiが好きだ

BMWは半角大文字、318は半角数字、tiは全角小文字です。


  • CJKTokenizerFactory の場合

f:id:knaka20blue:20090930153408j:image


  • 2-gram の場合 ( NGramTokenizerFactory で maxGramSize="2" minGramSize="2" にした場合 )

f:id:knaka20blue:20090930153409j:image


このテストに使ったフィールドタイプの定義例です。

<fieldtype name="cjk" class="solr.TextField" omitNorms="false">
 <analyzer>
  <tokenizer class="solr.CJKTokenizerFactory"/>
 </analyzer>
</fieldtype>

<fieldtype name="2-gram" class="solr.TextField" omitNorms="false">
 <analyzer>
  <tokenizer class="solr.NGramTokenizerFactory" maxGramSize="2" minGramSize="2" />
 </analyzer>
</fieldtype>

1-gram ( 別名 uni-gram, unigram ) 代わりによく使われる StandardTokenizerFactory も CJKTokenizerFactory と同じようにに連続する英数文字は1語としてトークナイズします。


状況に応じて使い分けると便利ですね。


ではでは

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/knaka20blue/20090930/1254289965
リンク元