ngram
指定したフィールドの文字列を連続するn文字単位(n-gram)に分割してトークンリストを出力します。テキスト類似度比較、異常ドメイン検出などの文字レベルの特徴抽出に活用します。
コマンドプロパティ
| 項目 | 説明 |
|---|---|
| コマンドタイプ | 加工クエリ |
| 必要な権限 | なし |
| ライセンス使用量 | 該当なし |
| 並列実行 | 対応 |
| 分散実行 | 非対応 |
構文
ngram n=INT field=FIELD
オプション
n=INT- n-gramのサイズ。文字列を連続するn文字単位に分割します。1から10の間の整数でなければなりません。
field=FIELD- n-gramに分割するフィールド名
出力フィールド
| フィールド | タイプ | 説明 |
|---|---|---|
ngrams | 配列 | n-gram分割結果のトークンリスト。入力文字列の長さがn以下の場合は元の文字列を単一要素として含みます。 |
エラーコード
パースエラー
| エラーコード | メッセージ | 説明 |
|---|---|---|
| 40810 | ngram 명령어에 n 옵션을 지정하세요. | nオプションが指定されていない場合 |
| 40811 | ngram 명령어의 n 값은 1에서 10 사이로 지정해야 합니다. | n値が1未満または10を超える場合 |
| 40812 | ngram 명령어에 field 옵션을 지정하세요. | fieldオプションが指定されていない場合 |
ランタイムエラー
該当なし
説明
ngramコマンドは、入力レコードの指定したフィールド値をn-gram方式で分割します。n-gramは文字列から連続するn文字で構成された部分文字列のリストです。
例えば、n=3で入力文字列が"google"の場合、結果は["goo", "oog", "ogl", "gle"]となります。
入力フィールド値が文字列でない場合、そのレコードは変換なしでそのまま通過します。入力文字列の長さがn以下の場合は、元の文字列を単一要素として含む配列をngramsフィールドに割り当てます。
生成されたn-gramトークンリストはtfidfコマンドの入力として活用したり、ドメイン名の文字パターンを分析するために使用できます。
使用例
-
ドメイン名を3-gramに分割
json "[{'domain': 'google.com'}, {'domain': 'xkcd123a.net'}, {'domain': 'example.org'}]" | ngram n=3 field=domaindomainフィールドの文字列を3文字単位に分割してngramsフィールドに格納します。 -
n-gramトークンでTF-IDFスコアを計算
table duration=1d dns_logs | ngram n=3 field=domain | eval line = strjoin(" ", ngrams) | tfidf lineドメイン名を3-gramに分割した後、トークンを空白で連結してTF-IDFスコアを計算します。