Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›Анализ текста ›Справочник по фильтрам токенов

Фильтр токенов разбиения по декомпонентам с использованием дефисов

Использует основанные на XML шаблоны деления по дефисам, чтобы найти потенциальные подслова в сложных словах. Затем эти подслова проверяются по заданному списку слов. Подслова, отсутствующие в списке, исключаются из выходного потока токенов.

Этот фильтр использует фильтр HyphenationCompoundWordTokenFilter Lucene, разработанный для германских языков.

Пример

Следующий запрос API анализа использует фильтр hyphenation_decompounder, чтобы найти подслова в Kaffeetasse на основе немецких шаблонов деления по дефисам в файле analysis/hyphenation_patterns.xml. Затем фильтр проверяет эти подслова по списку заданных слов: kaffee, zucker и tasse.

resp = client.indices.analyze(
    tokenizer="standard",
    filter=[
        {
            "type": "hyphenation_decompounder",
            "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
            "word_list": [
                "Kaffee",
                "zucker",
                "tasse"
            ]
        }
    ],
    text="Kaffeetasse",
)
print(resp)
const response = await client.indices.analyze({
  tokenizer: "standard",
  filter: [
    {
      type: "hyphenation_decompounder",
      hyphenation_patterns_path: "analysis/hyphenation_patterns.xml",
      word_list: ["Kaffee", "zucker", "tasse"],
    },
  ],
  text: "Kaffeetasse",
});
console.log(response);
GET _analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "hyphenation_decompounder",
      "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
      "word_list": ["Kaffee", "zucker", "tasse"]
    }
  ],
  "text": "Kaffeetasse"
}

Фильтр генерирует следующие токены:

[ Kaffeetasse, Kaffee, tasse ]

Настраиваемые параметры

hyphenation_patterns_path

(Обязательный, строка) Путь к файлу шаблонов деления по дефисам Apache FOP (Formatting Objects Processor) в формате XML.

Этот путь должен быть абсолютным или относительным к местоположению config. Поддерживаются только файлы, совместимые с FOP v1.2.

Примеры файлов шаблонов деления по дефисам в формате XML FOP:

  • Проект Objects For Formatting Objects (OFFO) на Sourceforge
  • Прямая загрузка offo-hyphenation_v1.2.zip (файлы шаблонов деления по дефисам версии 2.0 и выше не поддерживаются)
word_list

(Обязательный*, массив строк) Список подслов. Подслова, найденные с помощью шаблона деления по дефисам, но отсутствующие в этом списке, исключаются из выходного потока токенов.

Для проверки качества списков слов перед их внедрением можно использовать фильтр dictionary_decompounder.

Должен быть указан либо этот параметр, либо word_list_path.

word_list_path

(Обязательный*, строка) Путь к файлу, содержащему список подслов. Подслова, найденные с помощью шаблона деления по дефисам, но отсутствующие в этом списке, исключаются из выходного потока токенов.

Этот путь должен быть абсолютным или относительным к местоположению config, а файл должен быть закодирован в UTF-8. Каждый токен в файле должен быть отделен символом перевода строки.

Для проверки качества списков слов перед их внедрением можно использовать фильтр dictionary_decompounder.

Должен быть указан либо этот параметр, либо word_list.

max_subword_size
(Необязательный, целое число) Максимальная длина подслова в символах. Токены подслов большей длины исключаются из вывода. По умолчанию 15.
min_subword_size
(Необязательный, целое число) Минимальная длина подслова в символах. Токены подслов меньшей длины исключаются из вывода. По умолчанию 2.
min_word_size
(Необязательный, целое число) Минимальная длина слова в символах. Токены слов меньшей длины исключаются из вывода. По умолчанию 5.
only_longest_match
(Необязательный, булево) Если true, включать только самое длинное совпадающее подслово. По умолчанию false.
no_sub_matches
(Необязательный, булево) Если true, не сопоставлять подтокены в токенах, которые находятся в списке слов. По умолчанию false.
no_overlapping_matches
(Необязательный, булево) Если true, не допускать перекрывающихся токенов. По умолчанию false.

Обычно пользователям достаточно включить только один из трёх флагов, так как включение no_overlapping_matches является наиболее жёстким, а no_sub_matches более жёстким, чем only_longest_match. При включении более жёсткого варианта состояние менее жёсткого не имеет никакого эффекта.

Настройка и добавление в анализатор

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

Например, следующий запрос API создания индекса использует пользовательский фильтр hyphenation_decompounder для настройки нового пользовательского анализатора.

Пользовательский фильтр hyphenation_decompounder находит подслова на основе шаблонов деления по дефисам в файле analysis/hyphenation_patterns.xml. Затем фильтр проверяет эти подслова по списку слов, указанному в файле analysis/example_word_list.txt. Подслова длиной более 22 символов исключаются из выходного потока токенов.

resp = client.indices.create(
    index="hyphenation_decompound_example",
    settings={
        "analysis": {
            "analyzer": {
                "standard_hyphenation_decompound": {
                    "tokenizer": "standard",
                    "filter": [
                        "22_char_hyphenation_decompound"
                    ]
                }
            },
            "filter": {
                "22_char_hyphenation_decompound": {
                    "type": "hyphenation_decompounder",
                    "word_list_path": "analysis/example_word_list.txt",
                    "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
                    "max_subword_size": 22
                }
            }
        }
    },
)
print(resp)
const response = await client.indices.create({
  index: "hyphenation_decompound_example",
  settings: {
    analysis: {
      analyzer: {
        standard_hyphenation_decompound: {
          tokenizer: "standard",
          filter: ["22_char_hyphenation_decompound"],
        },
      },
      filter: {
        "22_char_hyphenation_decompound": {
          type: "hyphenation_decompounder",
          word_list_path: "analysis/example_word_list.txt",
          hyphenation_patterns_path: "analysis/hyphenation_patterns.xml",
          max_subword_size: 22,
        },
      },
    },
  },
});
console.log(response);
PUT hyphenation_decompound_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_hyphenation_decompound": {
          "tokenizer": "standard",
          "filter": [ "22_char_hyphenation_decompound" ]
        }
      },
      "filter": {
        "22_char_hyphenation_decompound": {
          "type": "hyphenation_decompounder",
          "word_list_path": "analysis/example_word_list.txt",
          "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
          "max_subword_size": 22
        }
      }
    }
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/analysis-hyp-decomp-tokenfilter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API