跳到主要内容
跳到主要内容

自然语言处理 (NLP) 函数

实验性功能。 了解更多。
ClickHouse Cloud 中不支持
危险

这是一个实验性功能,目前正在开发中,尚未准备好供通用使用。在未来的版本中,它将以不可预测的向后不兼容的方式进行更改。设置 allow_experimental_nlp_functions = 1 以启用它。

detectCharset

detectCharset 函数检测非 UTF8 编码的输入字符串的字符集。

语法

detectCharset('text_to_be_analyzed')

参数

  • text_to_be_analyzed — 要分析的字符串集合(或句子)。 字符串

返回值

  • 一个 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 语言代码。

当在输入字符串中提供超过 200 个字符时,detectLanguage 函数效果最佳。

语法

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

从源代码中确定编程语言。计算源代码中命令的所有 unigram 和 bigram。然后使用标有各种编程语言的命令的 unigram 和 bigram 权重的标记字典,找到编程语言的最大权重并返回它。

语法

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 — 要分析的文本。 字符串

返回值

  • 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 — 将应用规则的语言。使用两个字母的 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 网站。

  • 阿拉伯语
  • 亚美尼亚语
  • 巴斯克语
  • 加泰罗尼亚语
  • 丹麦语
  • 荷兰语
  • 英语
  • 芬兰语
  • 法语
  • 德语
  • 希腊语
  • 印地语
  • 匈牙利语
  • 印尼语
  • 爱尔兰语
  • 意大利语
  • 立陶宛语
  • 尼泊尔语
  • 挪威语
  • Porter
  • 葡萄牙语
  • 罗马尼亚语
  • 俄语
  • 塞尔维亚语
  • 西班牙语
  • 瑞典语
  • 泰米尔语
  • 土耳其语
  • 意第绪语

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>