HAO ES 分词器
Введение
HAO ES — это плагин для Elasticsearch, который позволяет выполнять китайское разбиение на слова.
Для обсуждения можно использовать QQ-группу: 743457803.
Как разработать плагин ES для разбиения на слова?
Пожалуйста, обратитесь к этому документу.
Основные функции:
— Поддержка сложных китайских иероглифов, некоторые из которых в Java имеют длину не равную 1, например, 𡃁. IK и HanLP не поддерживают такие символы.
— Поддерживает однословное разбиение и поиск, а режим ik_max_word не поддерживает.
— Позволяет настраивать длину разбиения слов, что подходит для распознавания имён в коротких текстах.
— Поддерживает поиск по эмодзи.
— По сравнению с IK, HAO более интеллектуальный и точный. Например, IK использует метод перебора всех возможных слов, поэтому при поиске могут быть найдены нерелевантные результаты. В то время как HAO использует алгоритм, основанный на подсчёте частоты слов, чтобы определить наиболее вероятные комбинации слов. Также можно настроить частоту слов в соответствии с конкретными потребностями.
— Результаты разбиения на слова в режиме hao_search_mode являются подмножеством результатов в режиме hao_index_mode.
— В сравнении с HanLP, HAO легче, разбиение на слова более контролируемо, и нет некоторых интеллектуальных функций, таких как прогнозирование имён, которые могут привести к нестабильности и неточности разбиения. Кроме того, HanLP не имеет официального плагина для ES.
— Основываясь на частоте слов, HAO определяет наиболее вероятные слова, вместо того чтобы перебирать все возможные варианты. Если выбранный вариант неверен, можно настроить частоту слов для исправления ошибок. Файл с частотой слов представляет собой текстовый файл с удобным для чтения форматом.
— Поддерживаются ключевые слова, такие как «Россия», которые не будут разбиты на «Рос» и «сия». Это позволяет избежать поиска документов, связанных с Россией, при поиске «сия».
— Однако не поддерживается определение частей речи.
Предоставляются следующие анализаторы и токенизаторы:
Анализатор: hao_search_mode, hao_index_mode Токенизатор: hao_search_mode, hao_index_mode
Версии:
Git tag | ES версия |
---|---|
master | ES последняя стабильная версия |
v7.17.1 | 7.17.1 |
vX.Y.Z | X.Y.Z |
Использование
Установка:
Способ 1: bin/elasticsearch-plugin install file:///Users/xiaoming/Download/analysis-hao.zip
Способ 2: Распакуйте файл и поместите его в каталог плагинов ES.
После этого необходимо перезапустить ES.
Обновление версии ES:
Если нужной версии ES нет, необходимо внести изменения в несколько мест:
Разбиение на слова:
Можно настроить параметры разбиения на слова следующим образом:
Параметры | Функция | Значение по умолчанию |
---|---|---|
enableIndexMode | Использовать ли режим index, который обеспечивает более детальное разбиение. Режим index подходит для Term Query, а режим phrase — для Phrase запроса. | hao_search_mode имеет значение false, hao_index_mode — true. |
enableFallBack | Если разбиение на слова не удаётся, следует ли использовать режим понижения качества, который разбивает слова по буквам. Рекомендуется использовать в режиме search_mode, чтобы избежать влияния на поиск пользователей. В режиме index_mode не рекомендуется использовать, чтобы быстро получать уведомления об ошибках. | false |
enableFailDingMsg | Следует ли отправлять уведомления о сбоях через веб-хук Ding. Адрес Ding Web Hook Url указан в файле HaoAnalyzer.cfg.xml. | false |
enableSingleWord | Следует ли использовать однословные результаты, полученные в результате детального разбиения. Например, «значение силы тела» будет разбито только на «значение силы» и «тело». | false |
autoWordLength | Если длина текста после разделения пробелами, символами пунктуации и цифрами меньше autoWordLength, текст считается одним словом. По умолчанию установлено значение -1, что означает, что функция отключена. >=2 означает включение функции. | -1 |
Внутренние анализаторы:
hao_index_mode:
На основе словаря и весов слов выполняется рекурсивное разбиение до тех пор, пока слово не станет неразделимым. Если enableSingleWord = true, то разбиение продолжается до отдельных букв.
Например, для текста «мост через реку Янцзы в городе Нанкин»
hao_search_mode:
Этот режим аналогичен hao_index_mode, но разбиение выполняется только один раз.
Результаты разбиения для текста «Мост через реку Янцзы в городе Нанкин»: «Мост через реку Янцзы в городе Нанкин».
Файл конфигурации HaoAnalyzer.cfg.xml:
Параметр | Функция | Примечание |
---|---|---|
baseDictionary | Имя файла базового словаря | Хранится в каталоге config плагина или в каталоге config ES |
customerDictionaryFile | Файл пользовательского удалённого словаря, разделённый английскими точками с запятой | Хранится в каталоге config плагина или в каталоге config ES |
remoteFreqDict | Удалённый пользовательский файл словаря | Используется для обновления в реальном времени. Обновления выполняются согласно параметрам syncDicTime и syncDicPeriodTime. |
syncDicTime | Время следующего обновления удалённого словаря в формате hh:mm:ss | Если не указано, используется параметр syncDicPeriodTime |
syncDicPeriodTime | Интервал времени между обновлениями удалённого словаря (в секундах), минимальное значение — 30 секунд | Например, syncDicTime = 20:00:00, syncDicPeriodTime = 86400, обновление происходит ежедневно в 20:00 |
dingWebHookUrl | URL-адрес веб-хука Ding | Используется для отправки уведомлений о проблемах с разбиением на слова и обновлением словаря |
dingMsgContent | Текст уведомления | При настройке веб-хука Ding убедитесь, что текст уведомления соответствует этому тексту. |
Словарь:
Базовый словарь:
Основной словарь хранится в файле base_dictionary.txt. Слова разделены запятыми, за которыми следуют их частоты. Например, «напряжённая работа» разбивается на «напряжённый», «работа», потому что слово «работа» имеет высокую частоту. Можно уменьшить частоту слова «работа» в словаре, чтобы предотвратить такое разбиение.
Удалённый словарь:
Пользовательский словарь обновляется автоматически в соответствии с настройками времени и интервала. После обновления словарь заменяет текущий customerDictionaryFile. Формат каждой строки файла удалённого словаря: {Слово}, {Частота}, {Является ли слово ключевым}, например, «Россия, 1000, 1».
Является ли слово ключевым:
Значение 1 означает, что слово является ключевым и не будет разделено дальше. Например, слово «Россия» не будет разделяться на «Рос» и «Сия». Значение 0 означает, что слово может быть разделено. ``` type: "custom", tokenizer: "my_search_token" }, index_analyzer: { char_filter: [ "html_strip" ], type: "custom", tokenizer: "my_index_token" } }, tokenizer: { my_index_token: { enableFailDingMsg: "true", type: "hao_index_mode", enableSingleWord: "true", enableFallBack: "true", autoWordLength: 3 }, my_search_token: { enableFailDingMsg: "true", type: "hao_search_mode", enableSingleWord: "true", enableFallBack: "true", autoWordLength: 3 } }, number_of_replicas: "0" }, mappings: { properties: { title: { type: "text", index_options: "offsets", analyzer: "index_analyzer", search_analyzer: "search_analyzer" } } }
**Тест сегментации**
test/_analyze { analyzer: "index_analyzer", text: "徐庆年 奋发图强打篮球有利于提高人民生活,有的放矢,中华人民共和国家庭宣传委员会宣。🐶" }
test/_analyze { analyzer: "search_analyzer", text: "徐庆年 奋发图强打篮球有利于提高人民生活,有的放矢,中��ха人民共和国家庭宣传委员会宣。 🐶" }
`徐庆年` не находится в словаре, но распознается как слово с помощью `autoWordLength`.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )