Стемминг
Стемминг — это процесс приведения слова к его корневой форме. Это обеспечивает соответствие различных вариантов слова во время поиска.
Например, walking и walked могут быть приведены к одному и тому же корневому слову: walk. После стемирования любое из этих слов будет соответствовать другому в поиске.
Стемминг зависит от языка, но часто включает удаление приставок и суффиксов из слов.
В некоторых случаях корневая форма стемированного слова может не быть реальным словом. Например, jumping и jumpiness могут быть приведены к jumpi. Хотя jumpi не является реальным английским словом, это не имеет значения для поиска; если все варианты слова сведены к одной и той же корневой форме, они будут правильно соответствовать друг другу.
Фильтры токенов стемирования
В Elasticsearch стеминг обрабатывается фильтрами токенов стемирования token filters. Эти фильтры токенов можно классифицировать в зависимости от способа приведения слов к корневой форме:
- Алгоритмические стемеры, которые приводят слова к корневой форме на основе набора правил
- Словарные стемеры, которые приводят слова к корневой форме, просматривая их в словаре
Поскольку стеминг изменяет токены, рекомендуется использовать те же фильтры токенов стемирования при анализе индекса и поиска.
Алгоритмические стемеры
Алгоритмические стемеры применяют серию правил к каждому слову, чтобы свести его к корневой форме. Например, алгоритмический стемер для английского языка может удалить суффиксы -s и -es из конца слов во множественном числе.
Алгоритмические стемеры обладают некоторыми преимуществами:
- Они требуют небольшого конфигурирования и обычно хорошо работают "из коробки".
- Они используют мало памяти.
- Они обычно быстрее, чем словарные стемеры.
Однако большинство алгоритмических стемеров изменяют только существующий текст слова. Это означает, что они могут не работать хорошо со словами, не содержащими корневую форму, например:
-
be,areиam -
mouseиmice -
footиfeet
Следующие фильтры токенов используют алгоритмический стеминг:
-
stemmer, который обеспечивает алгоритмический стеминг для нескольких языков, некоторых с дополнительными вариантами. -
kstem, стеминг для английского языка, который сочетает алгоритмический стеминг со встроенным словарем. -
porter_stem, рекомендуемый алгоритмический стеминг для английского языка. -
snowball, использующий основанные на Snowball правила стемирования для нескольких языков.
Словарные стемеры
Словарные стемеры ищут слова в предоставленном словаре, заменяя нестемированные варианты слов стемированными словами из словаря.
Теоретически, словарные стемеры хорошо подходят для:
- Стемирования нерегулярных слов
-
Различения слов, которые написаны похожим образом, но не связаны концептуально, например:
-
organиorganization -
brokerиbroken
-
На практике алгоритмические стемеры обычно превосходят словарные стемеры. Это связано со следующими недостатками словарных стемеров:
- Качество словаря
Словарной стемер настолько хорош, насколько хорош его словарь. Для хорошей работы эти словари должны содержать значительное количество слов, регулярно обновляться и меняться с языковыми трендами. Зачастую к моменту доступности словаря он уже неполный, а некоторые его записи устарели. - Размер и производительность
Словарные стемеры должны загрузить все слова, приставки и суффиксы из своего словаря в память. Это может потребовать значительного объема оперативной памяти. Низкокачественные словари также могут быть менее эффективны с удалением приставок и суффиксов, что может значительно замедлить процесс стемирования.
Для выполнения словарного стемирования можно использовать фильтр токенов hunspell.
Если доступен, рекомендуем попробовать алгоритмический стеминг для вашего языка перед использованием фильтра токенов hunspell.
Управление стемингом
Иногда стеминг может производить общие корневые слова, которые написаны похожим образом, но не связаны концептуально. Например, стеминг может привести как skies, так и skiing к одному и тому же корневому слову: ski.
Для предотвращения этого и лучшего управления стемингом вы можете использовать следующие фильтры токенов:
-
stemmer_override, который позволяет определять правила для стемирования конкретных токенов. -
keyword_marker, который помечает указанные токены как ключевые слова. Ключевые токены не стемируются последующими фильтрами токенов стемирования. -
conditional, который можно использовать для пометки токенов как ключевых, аналогично фильтруkeyword_marker.
Для встроенных языковых анализаторов также можно использовать параметр stem_exclusion для указания списка слов, которые не будут стемироваться.
© 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/stemming.html