7.3.65. tokenize

7.3.65.1. 概要

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

7.3.65.2. 構文

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

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

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

7.3.65.3. 使い方

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

実行例:

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

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

7.3.65.4. 引数

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

7.3.65.4.1. 必須引数

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

7.3.65.4.1.1. tokenizer

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

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

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

実行例:

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

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

7.3.65.4.1.2. string

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

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

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

実行例:

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

7.3.65.4.2. 省略可能引数

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

7.3.65.4.2.1. normalizer

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

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

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

実行例:

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

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

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

実行例:

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

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

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

実行例:

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

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

7.3.65.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
#   ],
#   [
#     {
#       "position": 0,
#       "force_prefix": false,
#       "value": "full"
#     },
#     {
#       "position": 1,
#       "force_prefix": false,
#       "value": "text sea"
#     },
#     {
#       "position": 2,
#       "force_prefix": false,
#       "value": "crch"
#     }
#   ]
# ]

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

7.3.65.4.2.3. mode

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

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

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

実行例:

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

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

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

実行例:

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

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

7.3.65.4.2.4. token_filters

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

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

7.3.65.5. 戻り値

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

[HEADER, tokens]

HEADER

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

tokens

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

名前 説明
value トークン自身
position N番目のトークン。

7.3.65.6. 参考