自然语言处理 (NLP) 函数
这是一个实验性功能,目前正在开发中,尚未准备好供普遍使用。它将在将来的版本中以不可预测的方式发生向后不兼容的更改。设置 allow_experimental_nlp_functions = 1
以启用它。
detectCharset
detectCharset
函数检测非 UTF8 编码的输入字符串的字符集。
语法
detectCharset('text_to_be_analyzed')
参数
text_to_be_analyzed
— 要分析的字符串集合(或句子)。字符串.
返回值
- 包含检测到的字符集代码的
字符串
示例
查询
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
— 要分析的字符串集合(或句子)。字符串.
返回值
- 检测到的语言的 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
返回一个 Map
,其中 2 个字母的语言代码映射到文本中特定语言的百分比。
语法
detectLanguageMixed('text_to_be_analyzed')
参数
text_to_be_analyzed
— 要分析的字符串集合(或句子)。字符串.
返回值
Map(String, Float32)
:键是 2 个字母的 ISO 代码,值是在该语言中找到的文本的百分比
示例
查询
SELECT detectLanguageMixed('二兎を追う者は一兎をも得ず二兎を追う者は一兎をも得ず A vaincre sans peril, on triomphe sans gloire.');
结果
┌─detectLanguageMixed()─┐
│ {'ja':0.62,'fr':0.36 │
└───────────────────────┘
detectProgrammingLanguage
从源代码中确定编程语言。计算源代码中命令的所有单字和双字。然后使用带标记的词典,其中包含各种编程语言的命令单字和双字的权重,找到编程语言的最大权重并返回它。
语法
detectProgrammingLanguage('source_code')
参数
source_code
— 要分析的源代码的字符串表示形式。字符串.
返回值
- 编程语言。字符串.
示例
查询
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
— 要分析的字符串集合(或句子)。字符串.
返回值
- 检测到的语言的 2 个字母的 ISO 代码
其他可能的结果
un
= 未知,无法检测到任何语言。other
= 检测到的语言没有 2 个字母的代码。
示例
查询
SELECT detectLanguageUnknown('Ich bleibe für ein paar Tage.');
结果
┌─detectLanguageUnknown('Ich bleibe für ein paar Tage.')─┐
│ de │
└────────────────────────────────────────────────────────┘
detectTonality
确定文本数据的感情色彩。使用带有标记的感情词典,其中每个词都有一个感情色彩范围,从 -12
到 6
。对于每个文本,它计算其词语的平均感情色彩值,并将其返回到 [-1,1]
范围内。
此函数在当前形式下受到限制。目前它使用嵌入在 /contrib/nlp-data/tonality_ru.zst
中的情感词典,并且仅适用于俄语。
语法
detectTonality(text)
参数
text
— 要分析的文本。字符串.
返回值
text
中词语的平均感情色彩值。Float32.
示例
查询
SELECT detectTonality('Шарик - хороший пёс'), -- Sharik is a good dog
detectTonality('Шарик - пёс'), -- Sharik is a dog
detectTonality('Шарик - плохой пёс'); -- Sharkik is a bad dog
结果
┌─detectTonality('Шарик - хороший пёс')─┬─detectTonality('Шарик - пёс')─┬─detectTonality('Шарик - плохой пёс')─┐
│ 0.44445 │ 0 │ -0.3 │
└───────────────────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘
lemmatize
对给定词语执行词形还原。需要词典才能操作,这些词典可以从 这里 获取。
语法
lemmatize('language', word)
参数
示例
查询
SELECT lemmatize('en', 'wolves');
结果
┌─lemmatize("wolves")─┐
│ "wolf" │
└─────────────────────┘
配置
此配置指定应该使用 en.bin
词典来进行英语 (en
) 词语的词形还原。.bin
文件可以从 这里 下载。
<lemmatizers>
<lemmatizer>
<lang>en</lang>
<path>en.bin</path>
</lemmatizer>
</lemmatizers>
stem
对给定词语执行词干提取。
语法
stem('language', word)
参数
language
— 将应用规则的语言。使用 2 个字母的 ISO 639-1 代码.word
— 需要进行词干提取的词语。必须为小写。字符串.
示例
查询
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() 支持的语言
stem() 函数使用 Snowball 词干提取 库,请参阅 Snowball 网站以获取更新的语言等信息。
- 阿拉伯语
- 亚美尼亚语
- 巴斯克语
- 加泰罗尼亚语
- 丹麦语
- 荷兰语
- 英语
- 芬兰语
- 法语
- 德语
- 希腊语
- 印地语
- 匈牙利语
- 印度尼西亚语
- 爱尔兰语
- 意大利语
- 立陶宛语
- 尼泊尔语
- 挪威语
- 波特
- 葡萄牙语
- 罗马尼亚语
- 俄语
- 塞尔维亚语
- 西班牙语
- 瑞典语
- 泰米尔语
- 土耳其语
- 意第绪语
synonyms
查找给定词语的同义词。有两种同义词扩展类型:plain
和 wordnet
。
使用 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>