1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tenlee-elasticsearch-analysis-hao

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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 нет, необходимо внести изменения в несколько мест:

  1. Изменить значение elasticsearch.version в файле pom.xml на нужную версию.
  2. Скомпилировать и исправить ошибки в коде, если они возникнут.
  3. Выполнить команду mvn clean package -Dmaven.test.skip=true, чтобы получить zip-файл плагина.

Разбиение на слова:

Можно настроить параметры разбиения на слова следующим образом:

Параметры Функция Значение по умолчанию
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, то разбиение продолжается до отдельных букв.

Например, для текста «мост через реку Янцзы в городе Нанкин»

  1. «Мост через реку Янцзы в городе Нанкин» → «Мост», «через», «реку», «Янцзы», «город», «Нанкин».
  2. «Город» → «Город», «Нанкин».
  3. Если enableSingleWord = false, разбиение останавливается, и получается «Мост через реку Янцзы в городе», «Мост», «Через», «Река», «Янцзы», «Город», «Нанкин».
  4. Если 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Java и 2 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/tenlee-elasticsearch-analysis-hao.git
git@api.gitlife.ru:oschina-mirror/tenlee-elasticsearch-analysis-hao.git
oschina-mirror
tenlee-elasticsearch-analysis-hao
tenlee-elasticsearch-analysis-hao
main