ClickHouse/docs/ja/sql-reference/functions/nlp-functions.md
2024-11-18 11:58:58 +09:00

12 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ja/sql-reference/functions/nlp-functions 130 NLP (エクスペリメンタル)

自然言語処理 (NLP) 関数

:::warning これは現在開発中のエクスペリメンタルな機能であり、一般的な利用にはまだ準備が整っていません。将来のリリースでは予測不可能な互換性のない変更が行われることがあります。有効にするには allow_experimental_nlp_functions = 1 を設定してください。 :::

detectCharset

detectCharset 関数は非UTF8エンコードの入力文字列の文字セットを検出します。

構文

detectCharset('text_to_be_analyzed')

引数

  • text_to_be_analyzed — 分析する文字列のコレクション(または文)。String.

返される値

  • 検出された文字セットのコードを含む String

クエリ:

SELECT detectCharset('Ich bleibe für ein paar Tage.');

結果:

┌─detectCharset('Ich bleibe für ein paar Tage.')─┐
│ WINDOWS-1252                                   │
└────────────────────────────────────────────────┘

detectLanguage

UTF8エンコードされた入力文字列の言語を検出します。関数は検出にCLD2ライブラリを使用し、2文字のISO言語コードを返します。

detectLanguage 関数は、入力文字列内に200文字以上を提供すると最適に動作します。

構文

detectLanguage('text_to_be_analyzed')

引数

  • text_to_be_analyzed — 分析する文字列のコレクション(または文)。String.

返される値

  • 検出された言語の2文字のISOコード

その他の可能な結果:

  • un = 不明、言語を検出できない。
  • other = 検出された言語に2文字のコードがない。

クエリ:

SELECT detectLanguage('Je pense que je ne parviendrai jamais à parler français comme un natif. Where theres a will, theres a way.');

結果:

fr

detectLanguageMixed

detectLanguage 関数に似ていますが、detectLanguageMixed は特定の言語の割合がテキスト内でどれだけ存在するかを示す2文字の言語コードの Map を返します。

構文

detectLanguageMixed('text_to_be_analyzed')

引数

  • text_to_be_analyzed — 分析する文字列のコレクション(または文)。String.

返される値

  • Map(String, Float32): キーが2文字のISOコードで、値がその言語のテキスト内の割合

クエリ:

SELECT detectLanguageMixed('二兎を追う者は一兎をも得ず二兎を追う者は一兎をも得ず A vaincre sans peril, on triomphe sans gloire.');

結果:

┌─detectLanguageMixed()─┐
│ {'ja':0.62,'fr':0.36  │
└───────────────────────┘

detectProgrammingLanguage

ソースコードからプログラミング言語を判別します。ソースコード内のコマンドのユニグラムとバイグラムをすべて計算します。その後、さまざまなプログラミング言語のコマンドのユニグラムとバイグラムの重みを持つマークアップされたDictionaryを使用して、最も重みのあるプログラミング言語を見つけて返します。

構文

detectProgrammingLanguage('source_code')

引数

  • source_code — 分析するソースコードの文字列表現。String.

返される値

  • プログラミング言語。String.

クエリ:

SELECT detectProgrammingLanguage('#include <iostream>');

結果:

┌─detectProgrammingLanguage('#include <iostream>')─┐
│ C++                                              │
└──────────────────────────────────────────────────┘

detectLanguageUnknown

detectLanguage 関数に似ていますが、detectLanguageUnknown 関数は非UTF8エンコードの文字列で動作します。文字セットがUTF-16またはUTF-32の場合、このバージョンを使用してください。

構文

detectLanguageUnknown('text_to_be_analyzed')

引数

  • text_to_be_analyzed — 分析する文字列のコレクション(または文)。String.

返される値

  • 検出された言語の2文字のISOコード

その他の可能な結果:

  • un = 不明、言語を検出できない。
  • other = 検出された言語に2文字のコードがない。

クエリ:

SELECT detectLanguageUnknown('Ich bleibe für ein paar Tage.');

結果:

┌─detectLanguageUnknown('Ich bleibe für ein paar Tage.')─┐
│ de                                                     │
└────────────────────────────────────────────────────────┘

detectTonality

テキストデータの感情を判定します。マークアップされた感情Dictionaryを使用し、各単語には -12 から 6 までのトナリティがあります。各テキストについて、その単語の平均感情値を計算し、範囲 [-1,1] でそれを返します。

:::note この関数は現段階では制限されています。現在は /contrib/nlp-data/tonality_ru.zst に埋め込まれた感情Dictionaryを使用し、ロシア語のみに対応しています。 :::

構文

detectTonality(text)

引数

  • text — 分析するテキスト。String.

返される値

  • text 内の単語の平均感情値。Float32.

クエリ:

SELECT detectTonality('Шарик - хороший пёс'), -- シャリクは良い犬です
       detectTonality('Шарик - пёс'), -- シャリクは犬です
       detectTonality('Шарик - плохой пёс'); -- シャリクは悪い犬です

結果:

┌─detectTonality('Шарик - хороший пёс')─┬─detectTonality('Шарик - пёс')─┬─detectTonality('Шарик - плохой пёс')─┐
│                               0.44445 │                             0 │                                 -0.3 │
└───────────────────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘

lemmatize

与えられた単語のレンマタイゼーションを行います。動作にはDictionariesが必要であり、こちらから入手できます。

構文

lemmatize('language', word)

引数

  • language — 適用するルールの言語。String.
  • word — レンマ化する必要のある単語。小文字である必要があります。String.

クエリ:

SELECT lemmatize('en', 'wolves');

結果:

┌─lemmatize("wolves")─┐
│              "wolf" │
└─────────────────────┘

設定

この設定は、英語(en)の単語のレンマタイゼーションに en.bin のDictionaryを使用することを指定します。 .bin ファイルはこちらからダウンロードできます。

<lemmatizers>
    <lemmatizer>
        <!-- highlight-start -->
        <lang>en</lang>
        <path>en.bin</path>
        <!-- highlight-end -->
    </lemmatizer>
</lemmatizers>

stem

与えられた単語のステミングを行います。

構文

stem('language', word)

引数

  • language — 適用するルールの言語。2文字のISO 639-1コードを使用します。
  • word — ステミングする必要のある単語。小文字である必要があります。String.

クエリ:

SELECT arrayMap(x -> stem('en', x), ['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) as res;

結果:

┌─res────────────────────────────────────────────────┐
│ ['I','think','it','is','a','bless','in','disguis'] │
└────────────────────────────────────────────────────┘

stem()でサポートされている言語

:::note stem() 関数は Snowballステミング ライブラリを使用します。最新の言語情報などはSnowballのウェブサイトを参照してください。 :::

  • アラビア語
  • アルメニア語
  • バスク語
  • カタルーニャ語
  • デンマーク語
  • オランダ語
  • 英語
  • フィンランド語
  • フランス語
  • ドイツ語
  • ギリシャ語
  • ヒンディー語
  • ハンガリー語
  • インドネシア語
  • アイルランド語
  • イタリア語
  • リトアニア語
  • ネパール語
  • ノルウェー語
  • ポーター
  • ポルトガル語
  • ルーマニア語
  • ロシア語
  • セルビア語
  • スペイン語
  • スウェーデン語
  • タミル語
  • トルコ語
  • イディッシュ語

synonyms

指定された単語の同義語を見つけます。plainwordnet の2種類の同義語拡張があります。

plain 拡張タイプでは、シンプルなテキストファイルへのパスを提供する必要があります。このファイルの各行は特定の同義語セットに対応し、その行内の単語はスペースまたはタブ文字で区切られている必要があります。

wordnet 拡張タイプでは、WordNetシソーラスが含まれているディレクトリへのパスを提供する必要があります。シソーラスにはWordNetのセンスインデックスが含まれている必要があります。

構文

synonyms('extension_name', word)

引数

  • extension_name — 検索が実行される拡張子の名前。String.
  • word — 拡張子内で検索される単語。String.

クエリ:

SELECT synonyms('list', 'important');

結果:

┌─synonyms('list', 'important')────────────┐
│ ['important','big','critical','crucial'] │
└──────────────────────────────────────────┘

設定

<synonyms_extensions>
    <extension>
        <name>en</name>
        <type>plain</type>
        <path>en.txt</path>
    </extension>
    <extension>
        <name>en</name>
        <type>wordnet</type>
        <path>en/</path>
    </extension>
</synonyms_extensions>