メインコンテンツへスキップ
メインコンテンツへスキップ

自然言語処理 (NLP) 関数

Experimental feature. Learn more.
Not supported in ClickHouse Cloud
注記

これは現在開発中の実験的機能であり、本番利用にはまだ適していません。今後のリリースで後方互換性のないかたちで予期しない変更が行われる可能性があります。この機能を有効化するには、allow_experimental_nlp_functions = 1 を設定してください。

detectCharset

導入バージョン: v22.2

UTF-8 以外でエンコードされた入力文字列の文字セットを検出します。

構文

detectCharset(s)

引数

  • s — 解析対象のテキスト。String

戻り値

検出された文字セットのコードを表す文字列を返します。String

使用例

基本的な使用方法

SELECT detectCharset('Ich bleibe für ein paar Tage.')
WINDOWS-1252

detectLanguage

導入バージョン: v22.2

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

入力が長いほど、言語検出の精度は高くなります。

構文

言語を検出する(s)

引数

  • text_to_be_analyzed — 解析するテキスト。String

戻り値

検出された言語の2文字のISOコードを返します。その他の結果: un = 不明(いずれの言語も検出できない場合)、other = 検出された言語に対応する2文字コードが存在しない場合。String

複数言語が混在したテキスト

SELECT detectLanguage('自分は決してネイティブのようにフランス語を話せるようにはならないと思う。意志あるところに道は開ける。')
fr

detectLanguageMixed

導入バージョン: v22.2

detectLanguage 関数と類似していますが、detectLanguageMixed はテキスト内に含まれる各言語の占める割合を値とし、2 文字の言語コードをキーとする Map を返します。

構文

detectLanguageMixed(s)

引数

  • s — 解析するテキスト String

返される値

2文字のISOコードをキー、その言語で検出されたテキストの割合(パーセンテージ)を値とするマップを返します Map(String, Float32)

複数言語の混在

SELECT detectLanguageMixed('二兎を追う者は一兎をも得ず二兎を追う者は一兎をも得ず 危険なくして勝つ者に栄光なし。')
{'ja':0.62,'fr':0.36}

detectLanguageUnknown

導入バージョン: v22.2

detectLanguage 関数と似ていますが、detectLanguageUnknown 関数は UTF-8 以外でエンコードされた文字列も扱うことができます。 文字セットが UTF-16 または UTF-32 の場合は、このバージョンを優先して使用してください。

構文

detectLanguageUnknown('s')

引数

  • s — 解析するテキスト。String

戻り値

検出された言語の2文字のISOコードを返します。返されるその他の値: un = 不明(いずれの言語も検出できない場合)、other = 検出された言語に2文字コードが存在しない場合。String

基本的な使用例

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

detectProgrammingLanguage

導入されたバージョン: v22.2

与えられたソースコードスニペットからプログラミング言語を判定します。

構文

detectProgrammingLanguage('source_code')

引数

  • source_code — 解析対象のソースコードを表す文字列。String

戻り値

プログラミング言語名を表す String を返します。

C++ コードの検出

SELECT detectProgrammingLanguage('#include <iostream>')
C++

detectTonality

導入バージョン: v22.2

指定されたテキストデータの感情を判定します。

制限事項

この関数は組み込みの感情辞書を利用するため、現状はロシア語にのみ対応しています。

構文

detectTonality(s)

引数

  • s — 解析するテキスト。String

戻り値

テキスト内の単語の平均センチメント値を返します。Float32

ロシア語のセンチメント分析

SELECT
    detectTonality('Шарик - хороший пёс'),
    detectTonality('Шарик - пёс'),
    detectTonality('Шарик - плохой пёс')
0.44445, 0, -0.3

lemmatize

導入バージョン: v21.9

指定された単語に対してレンマ化(基本形への変換)を行います。 この関数を利用するには辞書が必要で、GitHub から取得できます。ローカルファイルから辞書を読み込む方法の詳細については "Defining Dictionaries" のページを参照してください。

構文

lemmatize(lang, word)

引数

  • lang — 規則を適用する言語。String
  • word — レンマ化対象の小文字の単語。String

戻り値

単語のレンマ化された形を返します。String

使用例

英語でのレンマ化

SELECT lemmatize('en', 'wolves')

stem

導入: v21.9

与えられた単語に対してステミングを行います。

構文

stem(lang, word)

引数

  • lang — 適用するルールの言語。2文字の ISO 639-1 コードを使用します。String
  • word — ステミングの対象となる小文字の単語。String

戻り値

指定した単語のステミング後の形を返します。String

英語のステミング

SELECT arrayMap(x -> stem('en', x),
['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) AS res
['私は','それは','(災い転じて)','祝福だと','思います']

synonyms

Introduced in: v21.9

指定した語の類義語を検索します。

類義語拡張には 2 種類あります:

  • plain
  • wordnet

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

wordnet 拡張タイプでは、WordNet シソーラスを含むディレクトリへのパスを指定する必要があります。 このシソーラスには、WordNet の sense index が含まれていなければなりません。

Syntax

synonyms(ext_name, word)

引数

  • ext_name — 検索を実行する拡張機能の名前。String
  • word — 拡張機能内で検索する単語。String

返される値

指定した単語の類義語を格納した配列を返します。Array(String)

類義語を検索する

SELECT synonyms('list', 'important')
['important','big','critical','crucial']