12 KiB
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 there’s a will, there’s 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)
引数
例
クエリ:
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
指定された単語の同義語を見つけます。plain
と wordnet
の2種類の同義語拡張があります。
plain
拡張タイプでは、シンプルなテキストファイルへのパスを提供する必要があります。このファイルの各行は特定の同義語セットに対応し、その行内の単語はスペースまたはタブ文字で区切られている必要があります。
wordnet
拡張タイプでは、WordNetシソーラスが含まれているディレクトリへのパスを提供する必要があります。シソーラスにはWordNetのセンスインデックスが含まれている必要があります。
構文
synonyms('extension_name', word)
引数
例
クエリ:
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>