概要

英字を小文字で揃えるLowerCaseFilter、カタカナの長音の有無を揃えるJapaneseKatakanaStemFilter等、LuceneのTokenFilterやCharFilter系のクラスの中で、使いそうなものを一覧にしてみた。

Lucene3.6を利用。

@CretedDate 2012/04/22
@Env Lucene3.6

LowerCaseFilter

英字の大文字を小文字に変換する。内部的にはCharacter.toLowerCaseを使用。下記例はStandardTokenizerの結果に対し、LowerCaseFilterをかけた場合。

対象文字列My father's name was John Kinsella. It's an Irish name.
StandardTokenizerMyfather'snamewasJohnKinsellaIt'sanIrishname
LowerCaseFiltermyfather'snamewasjohnkinsellait'sanirishname

JavaDoc    サンプルコード

LengthFilter

文字列の長さでフィルタをかける。例えば「2文字以上、10文字以下の文字列だけインデックスに入れる」といった指定が可能。

下記例ではnew LengthFilter(false, result, 3, 5)で指定し、3〜5文字以外の文字列を除外している。

対象文字列It was a bright cold day in April.
StandardTokenizerItwasabrightcolddayinApril
LengthFilterwascolddayApril

JavaDoc    サンプルコード

LimitTokenCountFilter

指定した数以上のトークンがあった場合は、指定数以降を無視する。下記はMAXに5を指定した場合。

対象文字列Abraham begat Isaac; and Isaac begat Jacob;
StandardTokenizerAbrahambegatIsaacandIsaacbegatJacob
LimitTokenCountFilterAbrahambegatIsaacandIsaac

JavaDoc    サンプルコード

StopFilter

指定したstop wordsを除外する。英語の場合は以下の文字などがstop wordsに指定されることが多い。

a, and, are, as, at, be, but, by, for, if, in, into, is, it, no, not, of, on, or, s, such, t, that, the, their, then, there, these, they, this, to, was, will, with

各言語のstop wordsのサンプルはSolrの「example/solr/conf/lang」配下のstopwords_[xx].txtを参照。

対象文字列Big brother is watching you, the caption beneath it ran.
StandardTokenizerBigbrotheriswatchingyouthecaptionbeneathitran
StopFilterBigbrotherwatchingyoucaptionbeneathran

JavaDoc    サンプルコード

ReverseStringFilter

文字列を反転させる。後方一致で検索するような要件で使うらしい。

対象文字列Long, long ago, when people spoke languages...
StandardTokenizerLonglongagowhenpeoplespokelanguages
ReverseStringFiltergnoLgnologanehwelpoepekopssegaugnal

JavaDoc    サンプルコード    参考サイト

KStemFilter

英語用のstemmer。「elephants -> elephant」、「amplification -> amplify」、「european -> europe」のように英語の複数形等の揺れを揃えてくれる。

対象文字列logs balls boxes children men feet as was going japanese
StandardTokenizerlogsballsboxeschildrenmenfeetaswasgoingjapanese
KStemFilterlogballsboxchildrenmenfeetaswasgojapan

JavaDoc    サンプルコード    参考サイト

SnowballFilter

Snowballなるstemmerを使ったフィルタ。KStemFilterと同じように揺れを解決する。英語だけでなく、フランス語、ドイツ語、ロシア語等様々な言語に対応。日本語はもちろんない。

対象文字列logs balls boxes children men feet as was going japanese
StandardTokenizerlogsballsboxeschildrenmenfeetaswasgoingjapanese
SnowballFilterlogballboxchildrenmenfeetaswasgojapanes

JavaDoc    サンプルコード    参考サイト

PorterStemFilter

KStemFilter、SnowballFilterと同じく揺れを解決する。どのstemmerがベストなのかは未調査。

対象文字列logs balls boxes children men feet as was going japanese
StandardTokenizerlogsballsboxeschildrenmenfeetaswasgoingjapanese
PorterStemFilterlogballboxchildrenmenfeetaswagojapanes

JavaDoc    サンプルコード

EnglishPossessiveFilter

he's のような文字列の「's」の部分を削除する。S以外、例えばI'mの「'm」とかは削除してくれない。

対象文字列My father's name was John Kinsella. I'm Rey Kinsella.
StandardTokenizerMyfather'snamewasJohnKinsellaI'mReyKinsella
EnglishPossessiveFilterMyfathernamewasJohnKinsellaI'mReyKinsella

JavaDoc    サンプルコード

MappingCharFilter

指定した文字列を指定した文字列に置換する。solrのexample/solr/confにいる「mapping-FoldToASCII.txt」や「mapping-ISOLatin1Accent.txt」などの変換用ファイルを使うと便利。

下記は「a → x」に変換するように設定した場合。CharFilterはTokenizerの前にReaderに対して実行する。

対象文字列I am happy to join with you today
MappingCharFilterI xm hxppy to join with you todxy
StandardTokenizerIxmhxppytojoinwithyoutodxy

JavaDoc    サンプルコード

ASCIIFoldingFilter

ùとかᴁのようなLatin Extendedに配置されてそうな文字とかをBasic Latinに変換する。

MappingCharFilterとは違いTokenFilterなので、Tokenizerの結果に対して変換を実行する。

対象文字列où zennkaku1 ᴁ \ ①
WhitespaceTokenizerzennkaku1
ASCIIFoldingFilterouzennkaku1AE\1

JavaDoc    サンプルコード

ICUFoldingFilter

ASCIIFoldingFilterよりも広い対象に対してFoldingするらしい。日本語の濁点が消されてしまうくらい幅広く。

対象文字列où ④番 ≠ Ⅲ世 Σ ダクテン だくてん
StandardTokenizer④番Ⅲ世Σダクテンだくてん
ICUFoldingFilterou4番=iii世σタクテンたくてん

JavaDoc    サンプルコード

ICUTransformFilter

カタカナを平仮名に(Katakana-Hiragana)とか、全角を半角に(Fullwidth-Halfwidth)とか、いろいろな指定で文字を変換できる。

下記は「Hiragana-Katakana」を指定して平仮名をカタカナに変換した例。

対象文字列控えろ。お前たちが簡単にお会いできる人ではない。
JapaneseTokenizer控えろお前たち簡単会いできるない
ICUTransformFilter控エロオ前タチ簡単会イデキルナイ

JavaDoc    サンプルコード    参考サイト

ICUNormalizer2Filter

com.ibm.icu.text.Normalizer2を利用してNormalizeする。

対象文字列où ④番 ≠ Ⅲ世 Σ ダクテン だくてん
StandardTokenizer④番Ⅲ世Σダクテンだくてん
LowerCaseFilter4番iii世σダクテンだくてん

JavaDoc    サンプルコード

HTMLStripCharFilter

HTMLのタグやscript要素、style要素などの除去を行う。

対象文字列<html><head><title>title element</title><script>script element</script></head><body>body element</body></html>
HTMLStripCharFiltertitle element

body element
StandardTokenizertitleelementbodyelement

JavaDoc    サンプルコード

JapaneseBaseFormFilterSample

日本語の動詞とかを基本形にする。JapaneseTokenizerを利用した際に実行可。

対象文字列控えろ。お前たちが簡単にお会いできる人ではない。
JapaneseTokenizer控えろお前たち簡単会いできるない
JapaneseBaseFormFilter控えるお前たち簡単会うできるない

JavaDoc    サンプルコード

JapanesePartOfSpeechStopFilter

指定したPartOfSpeech(品詞)を除去できる。

下記は助詞と助動詞を除去対象に入れた例。助詞は「助詞-格助詞」、「助詞-接続助詞」、「助詞-係助詞」等様々な種類があるので指定がけっこう面倒。指定する値はSolrの「example/solr/conf/lang/stoptags_ja.txt」を参照

対象文字列控えろ。お前たちが簡単にお会いできる人ではない。
JapaneseTokenizer控えろお前たち簡単会いできるない
JapanesePartOfSpeechStopFilter控えろお前たち簡単会いできる

JavaDoc    サンプルコード

JapaneseKatakanaStemFilter

4文字以上のカタカナの長音を除去する。

対象文字列カー ヤフー コーナー ウェンブリー コンピューター
JapaneseTokenizerカーヤフーコーナーウェンブリーコンピューター
JapaneseKatakanaStemFilterカーヤフーコーナウェンブリコンピュータ

JavaDoc    サンプルコード

JapaneseReadingFormFilter

読みに変換する。デフォルトはカタカナ。2つ目の引数にtrueを指定するとローマ字で出力される。

対象文字列疲れたろう。僕も疲れたんだ。
JapaneseTokenizer疲れたろ疲れ
JapaneseReadingFormFilterツカレタロボクツカレ

JavaDoc    サンプルコード

CJKBigramFilter

漢字、ひらがな、カタカナ、ハングルをbi-gramに変換する。どの文字をbi-gramにするかは指定可能。

下記は漢字とひらがなのみbi-gram指定した例。

対象文字列ひらがなカタカナ漢字文字列
StandardTokenizerカタカナ
CJKBigramFilterひららががなカタカナ漢字字文文字字列

JavaDoc    サンプルコード

NGramTokenFilter

指定した数でNGramな結果にする。StandardTokenizerを使うと事前に日本語はuni-gramにされてしまうので、下記ではWhitespaceTokenizerを利用。

対象文字列とりあえず3区切りで。
WhitespaceTokenizerとりあえず3区切りで。
NGramTokenFilterとりありあえあえずえず3ず3区3区切区切り切りでりで。

JavaDoc    サンプルコード

CJKWidthFilter

半角カナを全角カナに直したり、全角英数を半角英数に直したり。

対象文字列123 ABC ハンカクカナ
StandardTokenizer123ABCハンカクカナ
CJKWidthFilter123ABCハンカクカナ

JavaDoc    サンプルコード