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

自然语言处理(NLP)函数

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

这是一个仍在开发中的实验性特性,目前尚未准备好供广泛使用。在未来的版本中,它可能会以不可预期且不向后兼容的方式发生变化。请将 allow_experimental_nlp_functions 设为 1 以启用该功能。

detectCharset

自 v22.2 起引入

检测非 UTF-8 编码输入字符串的字符集。

语法

detectCharset(s)

参数

  • s — 要分析的文本。String

返回值

返回一个表示检测到的字符集编码的字符串。String

示例

基本用法

SELECT detectCharset('我会待几天。')
WINDOWS-1252

detectLanguage

引入版本:v22.2

检测 UTF-8 编码输入字符串的语言。 该函数使用 CLD2 库 进行检测,并返回两个字母的 ISO 语言代码。

输入越长,语言检测的精度越高。

语法

detectLanguage(s)

参数

  • text_to_be_analyzed — 要分析的文本。String

返回值

返回检测到的语言的 2 个字母的 ISO 代码。其他可能的结果:un = 未知,无法检测到任何语言;other = 检测到的语言不具有 2 个字母的代码。String

示例

混合语言文本

SELECT detectLanguage('我觉得我永远无法像母语者那样说法语。有志者事竟成。')
fr

detectLanguageMixed

引入版本:v22.2

detectLanguage 函数类似,但 detectLanguageMixed 返回一个 Map,其中键为 2 字母语言代码,值为该语言在文本中所占的百分比。

语法

detectLanguageMixed(s)

参数

  • s — 要分析的文本 String

返回值

返回一个 Map,键是 2 个字母的 ISO 语言代码,对应的值是该语言在文本中所占的百分比 Map(String, Float32)

示例

混合语言

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

detectLanguageUnknown

自 v22.2 起引入

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

detectProgrammingLanguage

自 v22.2 起提供

根据给定的源代码片段确定其编程语言。

语法

detectProgrammingLanguage('source_code')

参数

  • source_code — 要分析的源代码的字符串形式。String

返回值

返回表示编程语言的 String

示例

C++ 代码检测

SELECT detectProgrammingLanguage('#include <iostream>')
C++

detectTonality

引入于:v22.2

用于判断提供的文本数据的情感倾向。

限制

该函数目前存在如下限制:它使用内置的情感词典,并且仅适用于俄语。

语法

detectTonality(s)

参数

  • s — 要分析的文本。String

返回值

返回文本中各个单词情感值的平均值 Float32

示例

俄语情感分析

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

lemmatize

引入于:v21.9

对给定单词执行词形还原(lemmatization)。 此函数运行时需要依赖词典,可以从 GitHub 获取。关于如何从本地文件加载词典的更多详情,请参阅页面 “Defining Dictionaries”

语法

lemmatize(lang, word)

参数

  • lang — 应用规则所针对的语言。String
  • word — 需要进行词形还原的小写单词。String

返回值

返回该单词词形还原后的形式 String

示例

英文词形还原

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

stem

引入于:v21.9

对给定单词执行词干提取。

语法

stem(lang, word)

参数

  • lang — 应用规则所基于的语言。使用两个字母的 ISO 639-1 代码。String
  • word — 需要进行词干提取的小写单词。String

返回值

返回该单词的词干形式 String

示例

英文词干提取

SELECT arrayMap(x -> stem('en', x),
['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) AS res
['I','think','it','is','a','bless','in','disguis']

synonyms

自 v21.9 引入

查找给定单词的同义词。

有两种类型的同义词扩展:

  • plain
  • wordnet

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

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

语法

synonyms(ext_name, word)

参数

  • ext_name — 要在其中执行搜索的扩展的名称。String
  • word — 要在扩展中搜索的词语。String

返回值

返回指定词语的同义词数组。Array(String)

示例

查找同义词

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