跳至主要内容

自然语言处理 (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

确定文本数据的感情色彩。使用带有标记的感情词典,其中每个词都有一个感情色彩范围,从 -126。对于每个文本,它计算其词语的平均感情色彩值,并将其返回到 [-1,1] 范围内。

注意

此函数在当前形式下受到限制。目前它使用嵌入在 /contrib/nlp-data/tonality_ru.zst 中的情感词典,并且仅适用于俄语。

语法

detectTonality(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)

参数

  • 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

查找给定词语的同义词。有两种同义词扩展类型:plainwordnet

使用 plain 扩展类型,我们需要提供一个简单文本文件的路径,其中每行对应一个同义词集。该行中的词语必须用空格或制表符分隔。

使用 wordnet 扩展类型,我们需要提供一个包含 WordNet 词库的目录的路径。词库必须包含 WordNet 词义索引。

语法

synonyms('extension_name', word)

参数

  • 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>