Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

detectCharset

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

Экспериментальная возможность
Не поддерживается в ClickHouse Cloud

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

Синтаксис

detectCharset(s)

Аргументы

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

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

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

Примеры

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

SET allow_experimental_nlp_functions = 1;
SELECT detectCharset('Ich bleibe für ein paar Tage.')
WINDOWS-1252

detectLanguage

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

Экспериментальная возможность
Не поддерживается в ClickHouse Cloud

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

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

Синтаксис

detectLanguage(s)

Аргументы

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

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

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

Примеры

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

SET allow_experimental_nlp_functions = 1;
SELECT detectLanguage('Je pense que je ne parviendrai jamais à parler français comme un natif.')
fr

detectLanguageMixed

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

Экспериментальная возможность
Не поддерживается в ClickHouse Cloud

Подобно функции detectLanguage, detectLanguageMixed возвращает Map с двухбуквенными кодами языков, которым сопоставлена процентная доля соответствующего языка в тексте.

Синтаксис

detectLanguageMixed(s)

Аргументы

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

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

Возвращает Map, где ключи — двухбуквенные ISO-коды, а соответствующие значения — доля текста, определённого как данный язык Map(String, Float32)

Примеры

Смешанные языки

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

detectLanguageUnknown

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

Экспериментальная возможность
Не поддерживается в ClickHouse Cloud

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

Синтаксис

detectLanguageUnknown('s')

Аргументы

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

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

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

Примеры

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

SET allow_experimental_nlp_functions = 1;
SELECT detectLanguageUnknown('Ich bleibe für ein paar Tage.')
de

detectTonality

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

Экспериментальная возможность
Не поддерживается в ClickHouse Cloud

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

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

Синтаксис

detectTonality(s)

Аргументы

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

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

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

Примеры

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

SET allow_experimental_nlp_functions = 1;

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

lemmatize

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

Экспериментальная возможность
Не поддерживается в ClickHouse Cloud

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

Синтаксис

lemmatize(lang, word)

Аргументы

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

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

Лемматизированная форма слова String

Примеры

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

SET allow_experimental_nlp_functions = 1;
SELECT lemmatize('en', 'wolves')
wolf

stem

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

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

Синтаксис

stem(word, language)

Аргументы

  • word — Одно слово в нижнем регистре (или массив слов) для стемминга. Должно быть в нижнем регистре — символы в верхнем регистре приводят к неопределённому результату. Принимает String, FixedString, Array(String), Array(FixedString), Array(Nullable(String)) или Array(Nullable(FixedString)). String или FixedString или Array(String) или Array(FixedString)
  • language — Язык, для которого будут применяться правила стемминга. Канонические идентификаторы перечислены в system.stemmers (например, 'english', 'german', 'porter'). Snowball также принимает 2- или 3-буквенные коды ISO 639 (например, 'en', 'eng') в качестве псевдонимов там, где они определены, но их поддержка зависит от языка — для переносимости предпочтительнее использовать имена из system.stemmers. 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

Экспериментальная возможность
Не поддерживается в ClickHouse Cloud

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

Есть два типа расширений синонимов:

  • plain
  • wordnet

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

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

Синтаксис

synonyms(ext_name, word)

Аргументы

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

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

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

Примеры

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

SET allow_experimental_nlp_functions = 1;
SELECT synonyms('en', 'important')
['important','big','critical','crucial','essential']
Navigation