Перейти к основному содержимому
Перейти к основному содержимому

Функции обработки естественного языка (NLP)

Experimental feature. Learn more.
Not supported in ClickHouse Cloud
Примечание

Это экспериментальная функциональность, которая в данный момент находится в разработке и не готова для широкого использования. В будущих версиях она будет меняться непредсказуемым образом, нарушая обратную совместимость. Установите allow_experimental_nlp_functions = 1, чтобы включить её.

detectCharset

Впервые появилась в версии v22.2.0

Определяет кодировку (набор символов) входной строки, закодированной в формате, отличном от UTF-8.

Синтаксис

detectCharset(s)

Аргументы

  • s — текст для анализа. String

Возвращаемое значение

Возвращает строку с кодом обнаруженной кодировки символов. String

Примеры

Базовое использование

SELECT detectCharset('Ich bleibe für ein paar Tage.')
WINDOWS-1252

detectLanguage

Добавлена в версии: v22.2.0

Определяет язык входной строки в кодировке UTF-8. Функция использует библиотеку CLD2 для определения языка и возвращает двухбуквенный ISO‑код языка.

Чем длиннее входные данные, тем точнее будет определение языка.

Синтаксис

detectLanguage(s)

Аргументы

  • text_to_be_analyzed — текст для анализа. String

Возвращаемое значение

Возвращает двухбуквенный ISO-код обнаруженного языка. Другие возможные результаты: un = неизвестно, не удалось определить ни один язык; other = обнаруженный язык не имеет двухбуквенного кода. String

Примеры

Текст на смешанном языке

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

Добавлена в: v22.2.0

Аналогична функции 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.0

Аналогична функции detectLanguage, за исключением того, что функция detectLanguageUnknown работает со строками, закодированными не в UTF8. Используйте эту версию, когда ваш набор символов — UTF-16 или UTF-32.

Синтаксис

detectLanguageUnknown('s')

Аргументы

  • s — текст для анализа. String

Возвращаемое значение

Возвращает двухбуквенный код языка по стандарту ISO для обнаруженного языка. Другие возможные результаты: un = неизвестно, не удалось определить какой-либо язык, other = обнаруженный язык не имеет двухбуквенного кода. String

Примеры

Базовое использование

SELECT detectLanguageUnknown('Ich bleibe für ein paar Tage.')
de

detectTonality

Добавлено в: v22.2.0

Определяет тональность переданных текстовых данных.

Ограничение

В текущей реализации эта функция ограничена тем, что использует встроенный эмоциональный словарь и работает только для русского языка.

Синтаксис

detectTonality(s)

Аргументы

  • s — текст для анализа. String

Возвращаемое значение

Возвращает среднее значение тональности слов в тексте Float32

Примеры

Анализ тональности текста на русском языке

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

lemmatize

Добавлена в версии: v21.9.0

Выполняет лемматизацию заданного слова. Для работы этой функции необходимы словари, которые можно получить с GitHub. Подробнее о загрузке словаря из локального файла см. раздел «Определение словарей».

Синтаксис

lemmatize(lang, word)

Аргументы

  • lang — Язык, для которого будут применены правила. String
  • word — Слово в нижнем регистре, которое нужно лемматизировать. String

Возвращаемое значение

Возвращает лемматизированную форму слова String

Примеры

Лемматизация английского языка

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

stem

Добавлено в: v21.9.0

Выполняет стемминг слова или массива слов с использованием алгоритмов Snowball. Каждая входная строка должна содержать только одно слово в нижнем регистре — строки с пробельными символами вызывают исключение. Передача символов в верхнем регистре приводит к неопределённым результатам. Возвращает String для скалярных входных данных (включая FixedString) и Array(String) для входных массивов. Поддерживаются варианты Nullable и LowCardinality для типов String и FixedString.

Синтаксис

stem(word, language)

Аргументы

  • word — Одно слово в нижнем регистре (или массив слов) для стемминга. Должно быть в нижнем регистре — символы в верхнем регистре приводят к неопределённому результату. Принимает String, FixedString, Array(String), Array(FixedString), Array(Nullable(String)) или Array(Nullable(FixedString)). String или FixedString или Array(String) или Array(FixedString)
  • language — Язык, для которого будут применяться правила стемминга. Используйте двухбуквенный код ISO 639-1 (например, 'en', 'de', 'fr'), см. https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes. String

Возвращаемое значение

Стеммированная форма слова (String) или массив стеммированных слов (Array(String)). String или Array(String)

Примеры

Стемминг одного слова

SELECT stem('blessing', 'en') AS res
bless

Стемминг для массива слов

SELECT stem(['blessing', 'disguise'], 'en') AS res
['bless','disguis']

Стемминг типа FixedString

SELECT stem(toFixedString('blessing', 10), 'en') AS res
bless

Стемминг для слова типа Nullable

SELECT stem(toNullable('blessing'), 'en') AS res
bless

synonyms

Добавлена в версии: v21.9.0

Находит синонимы заданного слова.

Существует два типа расширений синонимов:

  • plain
  • wordnet

Для типа расширения plain необходимо указать путь к простому текстовому файлу, где каждая строка соответствует определённому множеству синонимов. Слова в этой строке должны быть разделены пробелами или символами табуляции.

Для типа расширения wordnet необходимо указать путь к каталогу, содержащему тезаурус WordNet. Тезаурус должен содержать WordNet sense index.

Синтаксис

synonyms(ext_name, word)

Аргументы

  • ext_name — Название расширения, в котором будет выполняться поиск. String
  • word — Слово, по которому будет выполняться поиск в расширении. String

Возвращаемое значение

Возвращает массив синонимов для указанного слова. Array(String)

Примеры

Поиск синонимов

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