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

- English

# 7.7.2.3. `NormalizerNFKC121`

## 7.7.2.3.1. 概要

バージョン 9.0.3 で追加.

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

このノーマライザーはオプションを指定することで、動作を変更できます。

## 7.7.2.3.2. 構文

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

オプションなし:

    NormalizerNFKC121

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

オプション指定:

    NormalizerNFKC121("unify_kana", true)

    NormalizerNFKC121("unify_kana_case", true)

    NormalizerNFKC121("unify_kana_voiced_sound_mark", true)

    NormalizerNFKC121("unify_hyphen", true)

    NormalizerNFKC121("unify_prolonged_sound_mark", true)

    NormalizerNFKC121("unify_hyphen_and_prolonged_sound_mark", true)

    NormalizerNFKC121("unify_middle_dot", true)

    NormalizerNFKC121("unify_katakana_v_sounds", true)

    NormalizerNFKC121("unify_katakana_bu_sound", true)

    NormalizerNFKC121("unify_to_romaji", true)

複数のオプション指定:

    NormalizerNFKC121("unify_to_romaji", true, "unify_kana_case", true, "unify_hyphen_and_prolonged_sound_mark", true)

上記のように、 `NormalizerNFKC121` は複数のオプションを指定することもできます。上記の例以外にも複数のオプションを組み合わせて指定できます。

## 7.7.2.3.3. 使い方

### 7.7.2.3.3.1. 簡単な使い方

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

実行例:

    normalize NormalizerNFKC121 "©" WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "©",
    #     "types": [
    #       "emoji"
    #     ],
    #     "checks": []
    #   }
    # ]

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

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

実行例:

    normalize   'NormalizerNFKC121("unify_kana", true)'   "あイｳｪおヽヾ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "あいうぇおゝゞ",
    #     "types": [
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana"
    #     ],
    #     "checks": []
    #   }
    # ]

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

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

実行例:

    normalize   'NormalizerNFKC121("unify_kana_case", true)'   "ぁあぃいぅうぇえぉおゃやゅゆょよゎわゕかゖけ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "ああいいううええおおややゆゆよよわわかかけけ",
    #     "types": [
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana"
    #     ],
    #     "checks": []
    #   }
    # ]

実行例:

    normalize   'NormalizerNFKC121("unify_kana_case", true)'   "ァアィイゥウェエォオャヤュユョヨヮワヵカヶケ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "アアイイウウエエオオヤヤユユヨヨワワカカケケ",
    #     "types": [
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana"
    #     ],
    #     "checks": []
    #   }
    # ]

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

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

実行例:

    normalize   'NormalizerNFKC121("unify_kana_voiced_sound_mark", true)'   "かがきぎくぐけげこごさざしじすずせぜそぞただちぢつづてでとどはばぱひびぴふぶぷへべぺほぼぽ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "かかききくくけけここささししすすせせそそたたちちつつててととはははひひひふふふへへへほほほ",
    #     "types": [
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana",
    #       "hiragana"
    #     ],
    #     "checks": []
    #   }
    # ]

実行例:

    normalize   'NormalizerNFKC121("unify_kana_voiced_sound_mark", true)'   "カガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドハバパヒビピフブプヘベペホボポ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "カカキキククケケココササシシススセセソソタタチチツツテテトトハハハヒヒヒフフフヘヘヘホホホ",
    #     "types": [
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana"
    #     ],
    #     "checks": []
    #   }
    # ]

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

実行例:

    normalize   'NormalizerNFKC121("unify_hyphen", true)'   "-˗֊‐‑‒–⁃⁻₋−"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "-----------",
    #     "types": [
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol"
    #     ],
    #     "checks": []
    #   }
    # ]

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

実行例:

    normalize   'NormalizerNFKC121("unify_prolonged_sound_mark", true)'   "ー—―─━ｰ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "ーーーーーー",
    #     "types": [
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana"
    #     ],
    #     "checks": []
    #   }
    # ]

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

実行例:

    normalize   'NormalizerNFKC121("unify_hyphen_and_prolonged_sound_mark", true)'   "-˗֊‐‑‒–⁃⁻₋− ﹣－ ー—―─━ｰ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "----------- -- ------",
    #     "types": [
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "others",
    #       "symbol",
    #       "symbol",
    #       "others",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol"
    #     ],
    #     "checks": []
    #   }
    # ]

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

実行例:

    normalize   'NormalizerNFKC121("unify_middle_dot", true)'   "·ᐧ•∙⋅⸱・･"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "········",
    #     "types": [
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol",
    #       "symbol"
    #     ],
    #     "checks": []
    #   }
    # ]

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

実行例:

    normalize   'NormalizerNFKC121("unify_katakana_v_sounds", true)'   "ヴァヴィヴヴェヴォヴ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "バビブベボブ",
    #     "types": [
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana"
    #     ],
    #     "checks": []
    #   }
    # ]

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

実行例:

    normalize   'NormalizerNFKC121("unify_katakana_bu_sound", true)'   "ヴァヴィヴヴェヴォヴ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "ブブブブブブ",
    #     "types": [
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana",
    #       "katakana"
    #     ],
    #     "checks": []
    #   }
    # ]

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

実行例:

    normalize   'NormalizerNFKC121("unify_to_romaji", true)'   "アァイィウゥエェオォ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "axaixiuxuexeoxo",
    #     "types": [
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha"
    #     ],
    #     "checks": []
    #   }
    # ]

### 7.7.2.3.3.2. 高度な使い方

`TokenMecab` と `NormalizerNFKC121` を組み合わせて使うことで、特定の品詞の読みをローマ字で出力できます。

まずはじめに、`TokenMecab` の `target_class` オプションと `include_reading` オプションを使って人名の接尾語と非自立語を除いた名詞を抽出します。

次に、抽出した名詞の読みを `NormalizerNFKC121` の `unify_to_romaji` を使って正規化します。

実行例:

    tokenize 'TokenMecab("target_class", "-名詞/非自立", "target_class", "-名詞/接尾/人名", "target_class", "名詞", "include_reading", true)' '彼の名前は山田さんのはずです。'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     {
    #       "force_prefix_search": false,
    #       "position": 0,
    #       "force_prefix": false,
    #       "value": "彼",
    #       "metadata": {
    #         "reading": "カレ"
    #       }
    #     },
    #     {
    #       "force_prefix_search": false,
    #       "position": 1,
    #       "force_prefix": false,
    #       "value": "名前",
    #       "metadata": {
    #         "reading": "ナマエ"
    #       }
    #     },
    #     {
    #       "force_prefix_search": false,
    #       "position": 2,
    #       "force_prefix": false,
    #       "value": "山田",
    #       "metadata": {
    #         "reading": "ヤマダ"
    #       }
    #     }
    #   ]
    # ]
    normalize   'NormalizerNFKC121("unify_to_romaji", true)'   "カレ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "kare",
    #     "types": [
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha"
    #     ],
    #     "checks": []
    #   }
    # ]
    normalize   'NormalizerNFKC121("unify_to_romaji", true)'   "ナマエ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "namae",
    #     "types": [
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha"
    #     ],
    #     "checks": []
    #   }
    # ]
    normalize   'NormalizerNFKC121("unify_to_romaji", true)'   "ヤマダ"   WITH_TYPES
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "normalized": "yamada",
    #     "types": [
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha",
    #       "alpha"
    #     ],
    #     "checks": []
    #   }
    # ]

## 7.7.2.3.4. 引数

### 7.7.2.3.4.1. 省略可能引数

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

#### 7.7.2.3.4.1.1. `unify_kana`

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

#### 7.7.2.3.4.1.2. `unify_kana_case`

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

#### 7.7.2.3.4.1.3. `unify_kana_voiced_sound_mark`

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

#### 7.7.2.3.4.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.7.2.3.4.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.7.2.3.4.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.7.2.3.4.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.7.2.3.4.1.8. `unify_katakana_v_sounds`

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

#### 7.7.2.3.4.1.9. `unify_katakana_bu_sound`

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

#### 7.7.2.3.4.1.10. `unify_to_romaji`

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

## 7.7.2.3.5. 参考

- normalize