2
1

More than 1 year has passed since last update.

Lucene の Tokenizer で 「数字%」や「文字列&文字列」を許容する

Posted at

備忘録

を参考にしました。

コードは、

にあります。

StandardTokenizer

Lucene の StandartAnalyzer では、StandardTokenizer という 絵文字など1文字なのに3バイト以上で認識されてしまうものを修正するなどの機能があります。つまり、Lucene で全文検索をする際の最初の前処理をしているところと言ってもいいでしょう。

この StandardTokeniser の初期の設定で、Lucene で 「20%」など「数字%」や「A&E」など「文字列&文字列」が弾かれてしまう仕様になっています。ここでは、これらの「%」や「&」に対する、ミニパッチを紹介します。

ミニパッチを適用するには、Lucene の StandardTokenizerがある場所 から StandardTokenizerImpl.jflex を探します。この JFlex ファイルで、トークナイズのルールが書いてあります。

今回ミニパッチを当てるのは、数字と文字列の部分になるので、その該当箇所は、数字の方は 216行目 の部分で、 文字列の方は 238行目から244行目からの文字列 になります。

結果だけ載せます。

数字の方は、後ろに \%* を加えているだけです。

StandardTokenizerImpl.jflex 216, 217行目
{ExtendNumLetEx}* {NumericEx} ( ( {ExtendNumLetEx}* | {MidNumericEx} ) {NumericEx} )* {ExtendNumLetEx}* \%*
  { return NUMERIC_TYPE; }

文字列の方は、途中に \&* を加えています。

StandardTokenizerImpl.jflex 238 〜 252行目
{ExtendNumLetEx}*  ( {KatakanaEx}          ( {ExtendNumLetEx}*   {KatakanaEx}                        )*
                   | ( {HebrewLetterEx}    ( {SingleQuoteEx}     | {DoubleQuoteEx}  {HebrewLetterEx} )
                     | {NumericEx}         ( ( {ExtendNumLetEx}* | {MidNumericEx} ) {NumericEx}      )*
                     | {AHLetterEx}        ( ( {ExtendNumLetEx}* | {MidLetterEx} | \&* ) {AHLetterEx}     )*
                     )+
                   )
({ExtendNumLetEx}+ ( {KatakanaEx}          ( {ExtendNumLetEx}*   {KatakanaEx}                        )*
                   | ( {HebrewLetterEx}    ( {SingleQuoteEx}     | {DoubleQuoteEx}  {HebrewLetterEx} )
                     | {NumericEx}         ( ( {ExtendNumLetEx}* | {MidNumericEx} ) {NumericEx}      )*
                     | {AHLetterEx}        ( ( {ExtendNumLetEx}* | {MidLetterEx} | \&* ) {AHLetterEx}     )*
                     )+
                   )
)*
{ExtendNumLetEx}* 
  { return WORD_TYPE; }

StandardTokenizer で直っただけのですが、その後の前処理は試していないので、動かなかったらすみません。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1