# New way of tokenization of Chinese

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

### Трудности поиска на китайском языке

Китайский язык принадлежит к так называемой языковой семье CJK (китайский, японский и корейский). Это, вероятно, самые сложные языки для реализации полнотекстового поиска, так как значения слов сильно зависят от многочисленных вариаций и последовательностей иероглифов, а символы не разделены на слова.

Специфика китайских языков:
- Китайские иероглифы не имеют прописных или строчных букв. У них есть только одно значение, независимо от контекста.
- Нет дополнительных украшений для букв, как, например, в арабском языке.
- Между словами в предложениях нет пробелов.

Так в чем же дело? Чтобы найти точное соответствие в полнотекстовом поиске, нам необходимо столкнуться с проблемой токенизации, основной задачей которой является разбивка текста на низкоуровневые единицы значений, которые могут быть найдены пользователем.

### Токенизация/Сегментация китайского языка

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

В большинстве языков мы используем пробелы или специальные символы для разделения текста на фрагменты. Однако в китайском и других языках CJK это невозможно из-за их морфологических свойств. Тем не менее, нам все равно нужно это сделать. И этот процесс называется сегментацией.

Другими словами, для китайского языка сегментация является предпосылкой для токенизации.

Вот пример, показывающий разницу между токенизацией на английском и китайском языках.

![](./new-way-of-tokenization-of-chinese/Example_1.png)
Как вы видите, китайское предложение вдвое короче и не имеет пробелов, запятых и даже не разделено на слова, каждое слово здесь представлено иероглифом или несколькими. Вот количественное сравнение:

![](./new-way-of-tokenization-of-chinese/Example_2.png)

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

![](./new-way-of-tokenization-of-chinese/Example_3.png)
Здесь мы можем видеть комбинацию из двух иероглифических символов “简单”, что означает “Простота”, но если мы возьмем каждый из иероглифов отдельно, они будут иметь разные значения “简” (простой) и “单” (один)

В некоторых случаях, в зависимости от того, где вы ставите границу между словами, значения могут быть разными. Например:

![](./new-way-of-tokenization-of-chinese/Example_4.png)
Проблема, как вы можете видеть, заключается в том, что группа символов может быть сегментирована по-разному, что приводит к различным значениям.

Давайте рассмотрим возможные способы решения проблем токенизации/сегментации китайского языка.

### Реализации

Существует несколько подходов к сегментации китайских текстов, но основные два:
- N-граммы: рассматривают перекрывающиеся группы "N" соседних китайских символов как токены, где "N" может быть 1 - Uni; 2 - Bi; 3 - Tri; и так далее "-граммы".
- Основанный на словаре: выполняет сегментацию слов на основе словаря.

Самый простой способ сегментации китайского текста предполагает использование N-грамм. Алгоритм прост, но известно, что он не отличается качеством и дает значительные накладные расходы, которые растут с увеличением длины обрабатываемого текста, поскольку каждая N-грамма является отдельным токеном, что делает словарь токенов больше и усложняет обработку поискового запроса. Исторически это был общий способ индексации текстов CJK в Manticore Search.

В версии Manticore Search 3.1.0 был представлен новый способ сегментации китайских текстов, основанный на алгоритме сегментации текста ICU, который следует второму подходу - сегментации на основе словаря.

### Преимущества использования ICU

ICU - это набор библиотек с открытым исходным кодом, предоставляющих поддержку Unicode и глобализации для программных приложений. Наряду с многими другими функциями, он решает задачу определения границ текста. Алгоритмы ICU определяют позиции слов, предложений, абзацев в пределах текста или определяют места, которые будут подходящими для переноса строк при отображении текста.

Алгоритм работы сегментации ICU в Manticore можно кратко описать следующим образом:
- Исходный текст рассматривается как массив символов.
- Затем Manticore проходит по массиву, и если находит набор китайских символов, передает его в библиотеку ICU для обработки.
- Сегментированные части китайского текста заменяют оригинальные, несегментированные части.
- Другие алгоритмы обработки естественного языка ([charset\_table](https://manual.manticoresearch.com/Creating_a_table/NLP_and_tokenization/Low-level_tokenization#charset_table), [wordforms](https://manual.manticoresearch.com/Creating_a_table/NLP_and_tokenization/Wordforms#wordforms) и т.д.) применяются к измененному тексту, как в обычном процессе сегментации.

Чтобы включить сегментацию ICU-Китай, необходимо установить следующие параметры конфигурации индекса:
- `morphology = icu_chinese`
- `charset_table = cjk / chinese`

### [Интерактивный курс](https://play.manticoresearch.com/icu-chinese/)

Попробуйте, как это работает, в нашем курсе

[![img](./new-way-of-tokenization-of-chinese/ICU_course-1.png)](https://play.manticoresearch.com/icu-chinese/)  

Вы можете узнать больше о токенизации китайского языка, если попробуете наш интерактивный курс "Токенизация текста ICU-Китай", который включает командную строку для более удобного обучения.
