# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English

# 7.9.2. `TokenFilterNFKC100`

## 7.9.2.1. 概要

バージョン 8.0.9 で追加.

このトークンフィルターは、 NormalizerNFKC100 と同じオプションを使えます。`TokenMecab` を使ってトークナイズする前にノーマライズをすると、トークンの意味が失われることがあるため、このトークンフィルターは、トークナイズ後にノーマライズするために使用します。

## 7.9.2.2. 構文

`TokenFilterNFKC100` は省略可能な引数があります。

オプションなし:

    TokenFilterNFKC100

`TokenFilterNFKC100` はUnicode 10.0用のUnicode NFKC（Normalization Form Compatibility Composition）を使ってテキストを正規化します。

オプション指定:

    TokenFilterNFKC100("unify_kana", true)

    TokenFilterNFKC100("unify_kana_case", true)

    TokenFilterNFKC100("unify_kana_voiced_sound_mark", true)

    TokenFilterNFKC100("unify_hyphen", true)

    TokenFilterNFKC100("unify_prolonged_sound_mark", true)

    TokenFilterNFKC100("unify_hyphen_and_prolonged_sound_mark", true)

    TokenFilterNFKC100("unify_middle_dot", true)

    TokenFilterNFKC100("unify_katakana_v_sounds", true)

    TokenFilterNFKC100("unify_katakana_bu_sound", true)

    TokenFilterNFKC100("unify_to_romaji", true)

## 7.9.2.3. 使い方

## 7.9.2.4. 簡単な使い方

以下は、`TokenFilterNFKC100` の使用例です。 `TokenFilterNFKC100` はUnicode 10.0用のUnicode NFKC（Normalization Form Compatibility Composition）を使ってテキストを正規化します。

実行例:

    tokenize TokenDelimit "㎡" --token_filters 'TokenFilterNFKC100'
    # [
    #   [
    #     0,
    #     1546906509.304568,
    #     0.0002825260162353516
    #   ],
    #   [
    #     {
    #       "value": "m2",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は unify_kana オプションの使用例です。

このオプションは、以下のように同じ音となる全角ひらがな、全角カタカナ、半角カタカナの文字を同一視します。

実行例:

    tokenize TokenDelimit "あイｳｪおヽヾ" --token_filters 'TokenFilterNFKC100("unify_kana", true)'
    # [
    #   [
    #     0,
    #     1546906576.590515,
    #     0.0003581047058105469
    #   ],
    #   [
    #     {
    #       "value": "あいうぇおゝゞ",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は unify_kana_case オプションの使用例です。

このオプションは、以下のように、全角ひらがな、全角カタカナ、半角カタカナの小さな文字を大きな文字と同一視します。

実行例:

    tokenize TokenDelimit "ぁあぃいぅうぇえぉおゃやゅゆょよゎわゕかゖけ" --token_filters 'TokenFilterNFKC100("unify_kana_case", true)'
    # [
    #   [
    #     0,
    #     1546906658.116119,
    #     0.0003299713134765625
    #   ],
    #   [
    #     {
    #       "value": "ああいいううええおおややゆゆよよわわかかけけ",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

実行例:

    tokenize TokenDelimit "ァアィイゥウェエォオャヤュユョヨヮワヵカヶケ" --token_filters 'TokenFilterNFKC100("unify_kana_case", true)'
    # [
    #   [
    #     0,
    #     1546906730.305962,
    #     0.0003023147583007812
    #   ],
    #   [
    #     {
    #       "value": "アアイイウウエエオオヤヤユユヨヨワワカカケケ",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、 unify_kana_voiced_sound_mark オプションの使用例です。

このオプションは、以下のように、全角ひらがな、全角カタカナ、半角カタカナで濁点や半濁点の有無を同一視します。

実行例:

    tokenize TokenDelimit "かがきぎくぐけげこごさざしじすずせぜそぞただちぢつづてでとどはばぱひびぴふぶぷへべぺほぼぽ" --token_filters 'TokenFilterNFKC100("unify_kana_voiced_sound_mark", true)'
    # [
    #   [
    #     0,
    #     1546906812.423493,
    #     0.0003724098205566406
    #   ],
    #   [
    #     {
    #       "value": "かかききくくけけここささししすすせせそそたたちちつつててととはははひひひふふふへへへほほほ",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

実行例:

    tokenize TokenDelimit "カガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドハバパヒビピフブプヘベペホボポ" --token_filters 'TokenFilterNFKC100("unify_kana_voiced_sound_mark", true)'
    # [
    #   [
    #     0,
    #     1546906950.51529,
    #     0.0003533363342285156
    #   ],
    #   [
    #     {
    #       "value": "カカキキククケケココササシシススセセソソタタチチツツテテトトハハハヒヒヒフフフヘヘヘホホホ",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、 unify_hyphen オプションの使用例です。このオプションは、以下のように、ハイフンを"-" (U+002D HYPHEN-MINUS)に正規化します。

実行例:

    tokenize TokenDelimit "-˗֊‐‑‒–⁃⁻₋−" --token_filters 'TokenFilterNFKC100("unify_hyphen", true)'
    # [
    #   [
    #     0,
    #     1546907023.849045,
    #     0.0003139972686767578
    #   ],
    #   [
    #     {
    #       "value": "-----------",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、 unify_prolonged_sound_mark オプションの使用例です。このオプションは、以下のように長音記号を"-" (U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK)に正規化します。

実行例:

    tokenize TokenDelimit "ー—―─━ｰ" --token_filters 'TokenFilterNFKC100("unify_prolonged_sound_mark", true)'
    # [
    #   [
    #     0,
    #     1546907076.575454,
    #     0.0003325939178466797
    #   ],
    #   [
    #     {
    #       "value": "ーーーーーー",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、unify_hyphen_and_prolonged_sound_mark オプションの使用例です。このオプションは、以下のように、ハイフンと長音記号を"-" (U+002D HYPHEN-MINUS)に正規化します。

実行例:

    tokenize TokenDelimit "-˗֊‐‑‒–⁃⁻₋− ﹣－ ー—―─━ｰ" --token_filters 'TokenFilterNFKC100("unify_hyphen_and_prolonged_sound_mark", true)'
    # [
    #   [
    #     0,
    #     1546907138.989727,
    #     0.0003240108489990234
    #   ],
    #   [
    #     {
    #       "value": "-----------",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "--",
    #       "position": 1,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "------",
    #       "position": 2,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、unify_middle_dot オプションの使用例です。このオプションは、中点を"·" (U+00B7 MIDDLE DOT)に正規化します。

実行例:

    tokenize TokenDelimit "·ᐧ•∙⋅⸱・･" --token_filters 'TokenFilterNFKC100("unify_middle_dot", true)'
    # [
    #   [
    #     0,
    #     1546907221.227195,
    #     0.0003573894500732422
    #   ],
    #   [
    #     {
    #       "value": "········",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、unify_katakana_v_sounds オプションの使用例です。このオプションは、以下のように、"ヴァヴィヴヴェヴォ"を"バビブベボ"に正規化します。

実行例:

    tokenize TokenDelimit "ヴァヴィヴヴェヴォヴ" --token_filters 'TokenFilterNFKC100("unify_katakana_v_sounds", true)'
    # [
    #   [
    #     0,
    #     1546907295.776949,
    #     0.0003447532653808594
    #   ],
    #   [
    #     {
    #       "value": "バビブベボブ",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、unify_katakana_bu_sound オプションの使用例です。このオプションは、以下のように、"ヴァヴィヴゥヴェヴォ"を"ブ"に正規化します。

実行例:

    tokenize TokenDelimit "ヴァヴィヴヴェヴォヴ" --token_filters 'TokenFilterNFKC100("unify_katakana_bu_sound", true)'
    # [
    #   [
    #     0,
    #     1546907361.518968,
    #     0.0002958774566650391
    #   ],
    #   [
    #     {
    #       "value": "ブブブブブブ",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

以下は、 unify_to_romaji オプションの使用例です。このオプションは、以下のように、ひらがなとカタカナをローマ字に正規化します。

実行例:

    tokenize TokenDelimit "アァイィウゥエェオォ" --token_filters  'TokenFilterNFKC100("unify_to_romaji", true)'
    # [
    #   [
    #     0,
    #     1546907415.47742,
    #     0.0003619194030761719
    #   ],
    #   [
    #     {
    #       "value": "axaixiuxuexeoxo",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

## 7.9.2.5. 高度な使い方

`TokenFilterNFKC100` と `TokenMecab` の `use_reading` オプションを組み合わせることで、入力文字列を全てひらがなとして出力できます。

実行例:

    tokenize   'TokenMecab("use_reading", true)'   "私は林檎を食べます。"   --token_filters 'TokenFilterNFKC100("unify_kana", true)'
    # [
    #   [
    #     0,
    #     1545901819.377275,
    #     0.0003833770751953125
    #   ],
    #   [
    #     {
    #       "value": "わたし",
    #       "position": 0,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "は",
    #       "position": 1,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "りんご",
    #       "position": 2,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "を",
    #       "position": 3,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "たべ",
    #       "position": 4,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "ます",
    #       "position": 5,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     },
    #     {
    #       "value": "。",
    #       "position": 6,
    #       "force_prefix": false,
    #       "force_prefix_search": false
    #     }
    #   ]
    # ]

## 7.9.2.6. 引数

### 7.9.2.6.1. 省略可能引数

省略可能な引数は以下の通りです。

#### 7.9.2.6.1.1. `unify_kana`

このオプションは、同じ音となる全角ひらがな、全角カタカナ、半角カタカナの文字を同一視します。

#### 7.9.2.6.1.2. `unify_kana_case`

このオプションは、全角ひらがな、全角カタカナ、半角カタカナの小さな文字を大きな文字と同一視します。

#### 7.9.2.6.1.3. `unify_kana_voiced_sound_mark`

このオプションは、全角ひらがな、全角カタカナ、半角カタカナで濁点や半濁点の有無を同一視します。

#### 7.9.2.6.1.4. `unify_hyphen`

このオプションは、ハイフンを"-" (U+002D HYPHEN-MINUS)に正規化します。

正規化対象のハイフンは以下の通りです。

- "-" (U+002D HYPHEN-MINUS)
- "֊" (U+058A ARMENIAN HYPHEN)
- "˗" (U+02D7 MODIFIER LETTER MINUS SIGN)
- "‐" (U+2010 HYPHEN)
- "—" (U+2014 EM DASH)
- "⁃" (U+2043 HYPHEN BULLET)
- "⁻" (U+207B SUPERSCRIPT MINUS)
- "₋" (U+208B SUBSCRIPT MINUS)
- "−" (U+2212 MINUS SIGN)

#### 7.9.2.6.1.5. `unify_prolonged_sound_mark`

このオプションは、長音記号を"-" (U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK)に正規化します。

正規化対象の長音記号は以下の通りです。

- "—" (U+2014 EM DASH)
- "―" (U+2015 HORIZONTAL BAR)
- "─" (U+2500 BOX DRAWINGS LIGHT HORIZONTAL)
- "━" (U+2501 BOX DRAWINGS HEAVY HORIZONTAL)
- "ー" (U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK)
- "ｰ" (U+FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK)

#### 7.9.2.6.1.6. `unify_hyphen_and_prolonged_sound_mark`

このオプションは、ハイフンと長音記号を"-" (U+002D HYPHEN-MINUS)に正規化します。

正規化対象のハイフンと長音記号は以下の通りです。

- "-" (U+002D HYPHEN-MINUS)
- "֊" (U+058A ARMENIAN HYPHEN)
- "˗" (U+02D7 MODIFIER LETTER MINUS SIGN)
- "‐" (U+2010 HYPHEN)
- "—" (U+2014 EM DASH)
- "⁃" (U+2043 HYPHEN BULLET)
- "⁻" (U+207B SUPERSCRIPT MINUS)
- "₋" (U+208B SUBSCRIPT MINUS)
- "−" (U+2212 MINUS SIGN)
- "—" (U+2014 EM DASH)
- "―" (U+2015 HORIZONTAL BAR)
- "─" (U+2500 BOX DRAWINGS LIGHT HORIZONTAL)
- "━" (U+2501 BOX DRAWINGS HEAVY HORIZONTAL)
- "ー" (U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK)
- "ｰ" (U+FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK)

#### 7.9.2.6.1.7. `unify_middle_dot`

このオプションは、中点を"·" (U+00B7 MIDDLE DOT)に正規化します。

正規化対象の中点は以下の通りです。

- "·" (U+00B7 MIDDLE DOT)
- "ᐧ" (U+1427 CANADIAN SYLLABICS FINAL MIDDLE DOT)
- "•" (U+2022 BULLET)
- "∙" (U+2219 BULLET OPERATOR)
- "⋅" (U+22C5 DOT OPERATOR)
- "⸱" (U+2E31 WORD SEPARATOR MIDDLE DOT)
- "・" (U+30FB KATAKANA MIDDLE DOT)
- "･" (U+FF65 HALFWIDTH KATAKANA MIDDLE DOT)

#### 7.9.2.6.1.8. `unify_katakana_v_sounds`

このオプションは、"ヴァヴィヴヴェヴォ"を"バビブベボ"に正規化します。

#### 7.9.2.6.1.9. `unify_katakana_bu_sound`

このオプションは、"ヴァヴィヴゥヴェヴォ"を"ブ"に正規化します。

#### 7.9.2.6.1.10. `unify_to_romaji`

このオプションは、ひらがなとカタカナをローマ字に正規化します。