7.3.69. tokenize#

7.3.69.1. 概要#

tokenize コマンドは指定したトークナイザーでテキストをトークナイズします。これはトークナイズ処理のデバッグに便利です。

7.3.69.2. 構文#

このコマンドにはたくさんの引数があります。

tokenizerstring が必須の引数で、他の引数はすべて省略できます:

tokenize tokenizer
         string
         [normalizer=null]
         [flags=NONE]
         [mode=ADD]
         [token_filters=NONE]

7.3.69.3. 使い方#

以下は簡単な使用例です。

実行例:

tokenize TokenBigram "Fulltext Search"
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "Fu",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ul",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ll",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "lt",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "te",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ex",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "xt",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t ",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " S",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "Se",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ea",
#       "position": 10,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ar",
#       "position": 11,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "rc",
#       "position": 12,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ch",
#       "position": 13,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "h",
#       "position": 14,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

この例では必須のパラメーターだけ使っています。 tokenizer には TokenBigram を、 string には "Fulltext Search" を指定しています。この例は TokenBigram トークナイザーで "Fulltext Search" をトークナイズしたトークンを返します。この例では "Fulltext Search" を正規化していません。

7.3.69.4. 引数#

このセクションではすべての引数について説明します。引数はカテゴリわけしています。

7.3.69.4.1. 必須引数#

必須引数は二つあります。 tokenizerstring です。

7.3.69.4.1.1. tokenizer#

トークナイザー名を指定します。 tokenize コマンドは tokenizer で指定された名前のトークナイザーを使います。

組み込みのトークナイザーについては トークナイザー を参照してください。

以下は組み込みの TokenTrigram トークナイザーを使う例です。

実行例:

tokenize TokenTrigram "Fulltext Search"
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "Ful",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ull",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "llt",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "lte",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "tex",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ext",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "xt ",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t S",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " Se",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "Sea",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ear",
#       "position": 10,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "arc",
#       "position": 11,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "rch",
#       "position": 12,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ch",
#       "position": 13,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "h",
#       "position": 14,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

他のトークナイザーを使いたい場合は、 register コマンドでトークナイザープラグインを登録する必要があります。例えば、 KyTea ベースのトークナイザーを tokenizers/kytea を登録することで使えます。

7.3.69.4.1.2. string#

トークナイズしたい文字列を指定します。

string の中に文字列を含める場合は、シングルクォート( ' )またはダブルクォート( " )で string をクォートする必要があります。

string の中で空白を使う例です。

実行例:

tokenize TokenBigram "Groonga is a fast fulltext earch engine!"
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "Gr",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ro",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "oo",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "on",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ng",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ga",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "a ",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " i",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "is",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "s ",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " a",
#       "position": 10,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "a ",
#       "position": 11,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " f",
#       "position": 12,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "fa",
#       "position": 13,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "as",
#       "position": 14,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "st",
#       "position": 15,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t ",
#       "position": 16,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " f",
#       "position": 17,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "fu",
#       "position": 18,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ul",
#       "position": 19,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ll",
#       "position": 20,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "lt",
#       "position": 21,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "te",
#       "position": 22,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ex",
#       "position": 23,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "xt",
#       "position": 24,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t ",
#       "position": 25,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " e",
#       "position": 26,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ea",
#       "position": 27,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ar",
#       "position": 28,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "rc",
#       "position": 29,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ch",
#       "position": 30,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "h ",
#       "position": 31,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " e",
#       "position": 32,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "en",
#       "position": 33,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ng",
#       "position": 34,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "gi",
#       "position": 35,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "in",
#       "position": 36,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ne",
#       "position": 37,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "e!",
#       "position": 38,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "!",
#       "position": 39,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

7.3.69.4.2. 省略可能引数#

いくつか省略可能な引数があります。

7.3.69.4.2.1. normalizer#

ノーマライザー名を指定します。 tokenize コマンドは normalizer という名前のノーマライザーを使います。ノーマライザーは TokenBigrma など、N-gram関連のトークナイザーにとってとても重要です。

ノーマライザーはノーマライズ中にそれぞれの文字の種類を検出します。N-gram系のトークナイザーはトークナイズ中に文字の種類を利用します。

以下はノーマライザーを使わない例です。

実行例:

tokenize TokenBigram "Fulltext Search"
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "Fu",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ul",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ll",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "lt",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "te",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ex",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "xt",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t ",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " S",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "Se",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ea",
#       "position": 10,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ar",
#       "position": 11,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "rc",
#       "position": 12,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ch",
#       "position": 13,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "h",
#       "position": 14,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

すべてのアルファベットが2文字ごとトークナイズされています。例えば、 Fu で1つのトークンになっています。

以下はノーマライザーを使う例です。

実行例:

tokenize TokenBigram "Fulltext Search" NormalizerAuto
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "fulltext",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "search",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

連続するアルファベットが1つのトークンにトークナイズされています。例えば、 fulltext で1つのトークンになっています。

ノーマライザーを使いながら2文字でトークナイズしたい場合は TokenBigramSplitSymbolAlpha を使って下さい。

実行例:

tokenize TokenBigramSplitSymbolAlpha "Fulltext Search" NormalizerAuto
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "fu",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ul",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ll",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "lt",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "te",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ex",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "xt",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "se",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ea",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ar",
#       "position": 10,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "rc",
#       "position": 11,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ch",
#       "position": 12,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "h",
#       "position": 13,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

すべてのアルファベットが2文字ごとにトークナイズされています。そして、すべての文字が小文字にノーマライズされています。例えば、 fu で1つのトークンになっています。

7.3.69.4.2.2. flags#

トークナイズ処理をカスタマイズするオプションを指定します。「 | 」で区切って複数のオプションを指定することができます。例えば、 NONE|ENABLE_TOKENIZED_DELIMITER というように指定できます。

指定可能なフラグは以下の通りです。

フラグ

説明

NONE

無視されます。

ENABLE_TOKENIZED_DELIMITER

トークナイズ済み区切り文字を有効にします。トークナイズ済み区切り文字の詳細は トークナイザー を参照してください。

以下は ENABLE_TOKENIZED_DELIMITER を使った例です。

実行例:

tokenize TokenDelimit "Full￾text Sea￾crch" NormalizerAuto ENABLE_TOKENIZED_DELIMITER
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "full",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "text sea",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "crch",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

TokenDelimit トークナイザーはトークナイズ済み区切り文字をサポートしているトークナイザーの1つです。 ENABLE_TOKENIZED_DELIMITER でトークナイズ済み区切り文字を有効に出来ます。トークナイズ済み区切り文字はトークンの区切りを表す特別な文字です。この文字は U+FFFE です。この文字コードはどの文字にも割り当てられていません。つまり、通常の文字列にはこの文字は現れません。よって、トークンの区切りを表すという目的には適切な文字です。 ENABLE_TOKENIZED_DELIMITER が有効のときは、対象文字列はすでにトークナイズ済みであると扱われます。トークナイザーは単にトークナイズ済み区切り文字で区切ってトークナイズします。

7.3.69.4.2.3. mode#

トークナイズモードを指定します。 ADD を指定すると、ドキュメント追加時と同じルールでトークナイズされます。 GET を指定すると、ドキュメント検索時と同じルールでトークナイズされます。省略された場合、 ADD モードでトークナイズされます。

デフォルトのモードは ADD です。

以下は ADD モードの例です。

実行例:

tokenize TokenBigram "Fulltext Search" --mode ADD
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "Fu",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ul",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ll",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "lt",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "te",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ex",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "xt",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t ",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " S",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "Se",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ea",
#       "position": 10,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ar",
#       "position": 11,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "rc",
#       "position": 12,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ch",
#       "position": 13,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "h",
#       "position": 14,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

最後のアルファベットは1文字でトークナイズされています。

以下は GET モードの例です。

実行例:

tokenize TokenBigram "Fulltext Search" --mode GET
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     {
#       "value": "Fu",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ul",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ll",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "lt",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "te",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ex",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "xt",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "t ",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": " S",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "Se",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ea",
#       "position": 10,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ar",
#       "position": 11,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "rc",
#       "position": 12,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ch",
#       "position": 13,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

最後のアルファベットは2文字でトークナイズされています。

7.3.69.4.2.4. token_filters#

トークンフィルターを指定します。 tokenize コマンドは token_filters という名前のトークンフィルターを使います。

トークンフィルターについては トークンフィルター を参照してください。

7.3.69.5. 戻り値#

tokenize コマンドはトークナイズしたトークンをすべて返します。各トークンはトークン自身の文字列情報以外にいくつかの属性を持ちます。属性は今後増えていく可能性があります:

[HEADER, tokens]

HEADER

HEADER については 出力形式 を参照してください。

tokens

tokens はトークンの配列です。トークンは以下の属性を持ったオブジェクトです。

名前

説明

value

トークン自身

position

N番目のトークン。

7.3.69.6. 参考#