英字を小文字で揃えるLowerCaseFilter、カタカナの長音の有無を揃えるJapaneseKatakanaStemFilter等、LuceneのTokenFilterやCharFilter系のクラスの中で、使いそうなものを一覧にしてみた。
Lucene3.6を利用。
英字の大文字を小文字に変換する。内部的にはCharacter.toLowerCaseを使用。下記例はStandardTokenizerの結果に対し、LowerCaseFilterをかけた場合。
対象文字列 | My father's name was John Kinsella. It's an Irish name. | |||||||||
StandardTokenizer | My | father's | name | was | John | Kinsella | It's | an | Irish | name |
LowerCaseFilter | my | father's | name | was | john | kinsella | it's | an | irish | name |
文字列の長さでフィルタをかける。例えば「2文字以上、10文字以下の文字列だけインデックスに入れる」といった指定が可能。
下記例ではnew LengthFilter(false, result, 3, 5)で指定し、3〜5文字以外の文字列を除外している。
対象文字列 | It was a bright cold day in April. | |||||||
StandardTokenizer | It | was | a | bright | cold | day | in | April |
LengthFilter | was | cold | day | April |
指定した数以上のトークンがあった場合は、指定数以降を無視する。下記はMAXに5を指定した場合。
対象文字列 | Abraham begat Isaac; and Isaac begat Jacob; | |||||||||
StandardTokenizer | Abraham | begat | Isaac | and | Isaac | begat | Jacob | |||
LimitTokenCountFilter | Abraham | begat | Isaac | and | Isaac |
指定した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. | |||||||||
StandardTokenizer | Big | brother | is | watching | you | the | caption | beneath | it | ran |
StopFilter | Big | brother | watching | you | caption | beneath | ran |
文字列を反転させる。後方一致で検索するような要件で使うらしい。
対象文字列 | Long, long ago, when people spoke languages... | ||||||
StandardTokenizer | Long | long | ago | when | people | spoke | languages |
ReverseStringFilter | gnoL | gnol | oga | nehw | elpoep | ekops | segaugnal |
英語用のstemmer。「elephants -> elephant」、「amplification -> amplify」、「european -> europe」のように英語の複数形等の揺れを揃えてくれる。
対象文字列 | logs balls boxes children men feet as was going japanese | |||||||||
StandardTokenizer | logs | balls | boxes | children | men | feet | as | was | going | japanese |
KStemFilter | log | balls | box | children | men | feet | as | was | go | japan |
Snowballなるstemmerを使ったフィルタ。KStemFilterと同じように揺れを解決する。英語だけでなく、フランス語、ドイツ語、ロシア語等様々な言語に対応。日本語はもちろんない。
対象文字列 | logs balls boxes children men feet as was going japanese | |||||||||
StandardTokenizer | logs | balls | boxes | children | men | feet | as | was | going | japanese |
SnowballFilter | log | ball | box | children | men | feet | as | was | go | japanes |
KStemFilter、SnowballFilterと同じく揺れを解決する。どのstemmerがベストなのかは未調査。
対象文字列 | logs balls boxes children men feet as was going japanese | |||||||||
StandardTokenizer | logs | balls | boxes | children | men | feet | as | was | going | japanese |
PorterStemFilter | log | ball | box | children | men | feet | as | wa | go | japanes |
he's のような文字列の「's」の部分を削除する。S以外、例えばI'mの「'm」とかは削除してくれない。
対象文字列 | My father's name was John Kinsella. I'm Rey Kinsella. | ||||||||
StandardTokenizer | My | father's | name | was | John | Kinsella | I'm | Rey | Kinsella |
EnglishPossessiveFilter | My | father | name | was | John | Kinsella | I'm | Rey | Kinsella |
指定した文字列を指定した文字列に置換する。solrのexample/solr/confにいる「mapping-FoldToASCII.txt」や「mapping-ISOLatin1Accent.txt」などの変換用ファイルを使うと便利。
下記は「a → x」に変換するように設定した場合。CharFilterはTokenizerの前にReaderに対して実行する。
対象文字列 | I am happy to join with you today | |||||||
MappingCharFilter | I xm hxppy to join with you todxy | |||||||
StandardTokenizer | I | xm | hxppy | to | join | with | you | todxy |
ùとかᴁのようなLatin Extendedに配置されてそうな文字とかをBasic Latinに変換する。
MappingCharFilterとは違いTokenFilterなので、Tokenizerの結果に対して変換を実行する。
対象文字列 | où zennkaku1 ᴁ \ ① | |||||
WhitespaceTokenizer | où | zennkaku1 | ᴁ | \ | ① | |
ASCIIFoldingFilter | ou | zennkaku1 | AE | \ | 1 |
ASCIIFoldingFilterよりも広い対象に対してFoldingするらしい。日本語の濁点が消されてしまうくらい幅広く。
対象文字列 | où ④番 ≠ Ⅲ世 Σ ダクテン だくてん | ||||||
StandardTokenizer | où | ④番 | ≠ | Ⅲ世 | Σ | ダクテン | だくてん |
ICUFoldingFilter | ou | 4番 | = | iii世 | σ | タクテン | たくてん |
カタカナを平仮名に(Katakana-Hiragana)とか、全角を半角に(Fullwidth-Halfwidth)とか、いろいろな指定で文字を変換できる。
下記は「Hiragana-Katakana」を指定して平仮名をカタカナに変換した例。
対象文字列 | 控えろ。お前たちが簡単にお会いできる人ではない。 | ||||||||||||
JapaneseTokenizer | 控えろ | お前 | たち | が | 簡単 | に | お | 会い | できる | 人 | で | は | ない |
ICUTransformFilter | 控エロ | オ前 | タチ | ガ | 簡単 | ニ | オ | 会イ | デキル | 人 | デ | ハ | ナイ |
com.ibm.icu.text.Normalizer2を利用してNormalizeする。
対象文字列 | où ④番 ≠ Ⅲ世 Σ ダクテン だくてん | ||||||
StandardTokenizer | où | ④番 | ≠ | Ⅲ世 | Σ | ダクテン | だくてん |
LowerCaseFilter | où | 4番 | ≠ | iii世 | σ | ダクテン | だくてん |
HTMLのタグやscript要素、style要素などの除去を行う。
対象文字列 | <html><head><title>title element</title><script>script element</script></head><body>body element</body></html> | |||
HTMLStripCharFilter | title element body element | |||
StandardTokenizer | title | element | body | element |
日本語の動詞とかを基本形にする。JapaneseTokenizerを利用した際に実行可。
対象文字列 | 控えろ。お前たちが簡単にお会いできる人ではない。 | ||||||||||||
JapaneseTokenizer | 控えろ | お前 | たち | が | 簡単 | に | お | 会い | できる | 人 | で | は | ない |
JapaneseBaseFormFilter | 控える | お前 | たち | が | 簡単 | に | お | 会う | できる | 人 | で | は | ない |
指定したPartOfSpeech(品詞)を除去できる。
下記は助詞と助動詞を除去対象に入れた例。助詞は「助詞-格助詞」、「助詞-接続助詞」、「助詞-係助詞」等様々な種類があるので指定がけっこう面倒。指定する値はSolrの「example/solr/conf/lang/stoptags_ja.txt」を参照
対象文字列 | 控えろ。お前たちが簡単にお会いできる人ではない。 | ||||||||||||
JapaneseTokenizer | 控えろ | お前 | たち | が | 簡単 | に | お | 会い | できる | 人 | で | は | ない |
JapanesePartOfSpeechStopFilter | 控えろ | お前 | たち | 簡単 | お | 会い | できる | 人 |
4文字以上のカタカナの長音を除去する。
対象文字列 | カー ヤフー コーナー ウェンブリー コンピューター | ||||
JapaneseTokenizer | カー | ヤフー | コーナー | ウェンブリー | コンピューター |
JapaneseKatakanaStemFilter | カー | ヤフー | コーナ | ウェンブリ | コンピュータ |
読みに変換する。デフォルトはカタカナ。2つ目の引数にtrueを指定するとローマ字で出力される。
対象文字列 | 疲れたろう。僕も疲れたんだ。 | |||||||||
JapaneseTokenizer | 疲れ | たろ | う | 僕 | も | 疲れ | た | ん | だ | |
JapaneseReadingFormFilter | ツカレ | タロ | ウ | ボク | モ | ツカレ | タ | ン | ダ |
漢字、ひらがな、カタカナ、ハングルをbi-gramに変換する。どの文字をbi-gramにするかは指定可能。
下記は漢字とひらがなのみbi-gram指定した例。
対象文字列 | ひらがなカタカナ漢字文字列 | |||||||||
StandardTokenizer | ひ | ら | が | な | カタカナ | 漢 | 字 | 文 | 字 | 列 |
CJKBigramFilter | ひら | らが | がな | カタカナ | 漢字 | 字文 | 文字 | 字列 |
指定した数でNGramな結果にする。StandardTokenizerを使うと事前に日本語はuni-gramにされてしまうので、下記ではWhitespaceTokenizerを利用。
対象文字列 | とりあえず3区切りで。 | ||||||||
WhitespaceTokenizer | とりあえず3区切りで。 | ||||||||
NGramTokenFilter | とりあ | りあえ | あえず | えず3 | ず3区 | 3区切 | 区切り | 切りで | りで。 |