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

自然言語処理 (NLP) 関数

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

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

detectCharset

導入バージョン: v22.2.0

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

構文

detectCharset(s)

引数

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

戻り値

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

基本的な使用方法

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

detectLanguage

導入バージョン: v22.2.0

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

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

構文

detectLanguage(s)

引数

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

戻り値

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

複数言語が混在するテキスト

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

detectLanguageMixed

導入バージョン: v22.2.0

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

構文

detectLanguageMixed(s)

引数

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

戻り値

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

複数の言語が混在するテキスト

SELECT detectLanguageMixed('二兎を追う者は一兎をも得ず二兎を追う者は一兎をも得ず A vaincre sans peril, on triomphe sans gloire.')
{'ja':0.62,'fr':0.36}

detectLanguageUnknown

導入バージョン: v22.2.0

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

detectTonality

導入バージョン: v22.2.0

指定されたテキストデータのセンチメント (感情極性) を判定します。

制限事項

この関数は現在の実装では、組み込みの感情 Dictionary を使用しており、ロシア語にのみ対応します。

構文

detectTonality(s)

引数

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

戻り値

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

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

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

lemmatize

導入バージョン: v21.9.0

指定された単語のレンマ化を実行します。 この関数の実行には Dictionary が必要で、GitHub から取得できます。ローカルファイルから Dictionary を読み込む方法の詳細については、ページ 「Defining Dictionaries」 を参照してください。

構文

lemmatize(lang, word)

引数

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

戻り値

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

英語でのレンマ化

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

stem

導入バージョン: v21.9.0

Snowball アルゴリズムを使用して、単語または単語の配列にステミングを実行します。 各入力文字列は小文字の単語 1 つである必要があり、空白を含む文字列を指定すると例外が発生します。 大文字を渡した場合の結果は未定義です。 スカラー入力 (FixedString を含む) の場合は String、配列入力の場合は Array(String) を返します。 String および FixedString の Nullable と LowCardinality の各型をサポートします。

構文

stem(word, language)

引数

戻り値

単語の語幹化後の形式 (String) 、または語幹化後の単語の配列 (Array(String)) 。 String or Array(String)

単一の単語を語幹化する

SELECT stem('blessing', 'en') AS res
bless

単語配列に対するステミング

SELECT stem(['blessing', 'disguise'], 'en') AS res
['bless','disguis']

FixedString に対するステミング

SELECT stem(toFixedString('blessing', 10), 'en') AS res
bless

Nullable な単語のステミング

SELECT stem(toNullable('blessing'), 'en') AS res
bless

synonyms

導入バージョン: v21.9.0

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

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

  • plain
  • wordnet

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

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

構文

synonyms(ext_name, word)

引数

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

返り値

指定した単語の類義語を要素とする配列を返します。Array(String)

類義語を検索する

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