ngram

指定したフィールドの文字列を連続するn文字単位(n-gram)に分割してトークンリストを出力します。テキスト類似度比較、異常ドメイン検出などの文字レベルの特徴抽出に活用します。

コマンドプロパティ

項目説明
コマンドタイプ加工クエリ
必要な権限なし
ライセンス使用量該当なし
並列実行対応
分散実行非対応

構文

ngram n=INT field=FIELD

オプション

n=INT
n-gramのサイズ。文字列を連続するn文字単位に分割します。1から10の間の整数でなければなりません。
field=FIELD
n-gramに分割するフィールド名

出力フィールド

フィールドタイプ説明
ngrams配列n-gram分割結果のトークンリスト。入力文字列の長さがn以下の場合は元の文字列を単一要素として含みます。

エラーコード

パースエラー
エラーコードメッセージ説明
40810ngram 명령어에 n 옵션을 지정하세요.nオプションが指定されていない場合
40811ngram 명령어의 n 값은 1에서 10 사이로 지정해야 합니다.n値が1未満または10を超える場合
40812ngram 명령어에 field 옵션을 지정하세요.fieldオプションが指定されていない場合
ランタイムエラー

該当なし

説明

ngramコマンドは、入力レコードの指定したフィールド値をn-gram方式で分割します。n-gramは文字列から連続するn文字で構成された部分文字列のリストです。

例えば、n=3で入力文字列が"google"の場合、結果は["goo", "oog", "ogl", "gle"]となります。

入力フィールド値が文字列でない場合、そのレコードは変換なしでそのまま通過します。入力文字列の長さがn以下の場合は、元の文字列を単一要素として含む配列をngramsフィールドに割り当てます。

生成されたn-gramトークンリストはtfidfコマンドの入力として活用したり、ドメイン名の文字パターンを分析するために使用できます。

使用例

  1. ドメイン名を3-gramに分割

    json "[{'domain': 'google.com'}, {'domain': 'xkcd123a.net'}, {'domain': 'example.org'}]"
    | ngram n=3 field=domain
    

    domainフィールドの文字列を3文字単位に分割してngramsフィールドに格納します。

  2. n-gramトークンでTF-IDFスコアを計算

    table duration=1d dns_logs
    | ngram n=3 field=domain
    | eval line = strjoin(" ", ngrams)
    | tfidf line
    

    ドメイン名を3-gramに分割した後、トークンを空白で連結してTF-IDFスコアを計算します。