Most of the stemmers available in Elasticsearch are algorithmic in that they apply a series of rules to a word in order to reduce it to its root form, such as stripping the final s
or es
from plurals. They don’t have to know anything about individual words in order to stem them.
Elasticsearch에서 이용할 수 있는 대부분의 형태소 분석기는, 단어를 원형으로 축소하기 위해, 복수형에서 마지막의 s
나 es
를 떼어내는 것 같은, 일련의 규칙을 적용하는 알고리즘이다. 형태소 분석을 위해, 개별 단어에 대해 알 필요가 없다.
These algorithmic stemmers have the advantage that they are available out of the box, are fast, use little memory, and work well for regular words. The downside is that they don’t cope well with irregular words like be
, are
, and am
, or mice
and mouse
.
이들 알고리즘 형태소 분석기는 바로 사용할 수 있고, 빠르고, 적은 메모리를 사용하고, 규칙적인 단어에 대해 잘 동작하는 장점을 가지고 있다. 단점은 be
, are
, am
, 또는 mice
, mouse
같은 불규칙적인 단어에 잘 대응하지 못한다는 점이다.
One of the earliest stemming algorithms is the Porter stemmer for English, which is still the recommended English stemmer today. Martin Porter subsequently went on to create the Snowball language for creating stemming algorithms, and a number of the stemmers available in Elasticsearch are written in Snowball.
초기 형태소 분석 알고리즘 중의 하나는, 영어에 대한 Porter 형태소 분석기이다. 이것은 오늘날에도 여전히 영어 형태소 분석기로 추천된다. Martin Porter 이후, 형태소 분석 알고리즘의 생성을 위해 Snowball language가 생성되었고, Elasticsearch에서 이용할 수 있는 많은 형태소 분석기가 snowball에서 작성되었다.
The kstem
token filter is a stemmer for English which combines the algorithmic approach with a built-in dictionary. The dictionary contains a list of root words and exceptions in order to avoid conflating words incorrectly. kstem
tends to stem less aggressively than the Porter stemmer.
kstem
token filter는 내장된 사전과 알고리즘 방식을 조합한 영어 형태소 분석기이다. 사전은 단어의 원형 목록과, 부정확한 단어의 혼합을 피하기 위한 예외 사항을 포함하고 있다. kstem
은, Porter 형태소 분석기 보다, 덜 적극적으로 형태소 분석하려는 경향이 있다.
Using an Algorithmic Stemmeredit
While you can use the porter_stem
or kstem
token filter directly, or create a language-specific Snowball stemmer with the snowball
token filter, all of the algorithmic stemmers are exposed via a single unified interface: the stemmer
token filter, which accepts the language
parameter.
porter_stem
이나 kstem
token filter를 바로 사용하거나, snowball
token filter 를 이용하여, 특정 언어용 snowball 형태소 분석기를 생성할 수도 있지만, 모든 알고리즘 형태소 분석기는 하나의 통일된 인터페이스(language
매개변수를 가진 stemmer
token filter)를 가진다.
For instance, perhaps you find the default stemmer used by the english
analyzer to be too aggressive and you want to make it less aggressive. The first step is to look up the configuration for the english
analyzer in the language analyzers documentation, which shows the following:
예를 들자면, english
analyzer에 의해 사용되는 기본 형태소 분석기가 너무 적극적이어서, 덜 적극적으로 만들려고 할 수 있다. 첫 번째 단계는 language analyzers document에서, 아래처럼 보이는, english
analyzer의 설정을 살펴보는 것이다.
{ "settings": { "analysis": { "filter": { "english_stop": { "type": "stop", "stopwords": "_english_" }, "english_keywords": { "type": "keyword_marker", "keywords": [] }, "english_stemmer": { "type": "stemmer", "language": "english" }, "english_possessive_stemmer": { "type": "stemmer", "language": "possessive_english" } }, "analyzer": { "english": { "tokenizer": "standard", "filter": [ "english_possessive_stemmer", "lowercase", "english_stop", "english_keywords", "english_stemmer" ] } } } } }
Having reviewed the current configuration, we can use it as the basis for a new analyzer, with the following changes:
현재의 설정을 검토해 보면, 다음 사항을 변경하여, 새로운 analyzer의 기반으로 사용할 수 있다.
Change the
english_stemmer
fromenglish
(which maps to theporter_stem
token filter) tolight_english
(which maps to the less aggressivekstem
token filter).english_stemmer
를english
(porter_stem
token filter에 mapping된)에서light_english
(덜 적극적인kstem
token filter에 mapping된)로 변경Add the
asciifolding
token filter to remove any diacritics from foreign words.외래어의 모든 발음 구별 부호를 제거하기 위한,
asciifolding
token filter를 추가Remove the
keyword_marker
token filter, as we don’t need it. (We discuss this in more detail in Controlling Stemming.)필요하지 않은,
keyword_marker
token filter를 제거한다. 이 부분에 대해 Controlling Stemming에서 더 자세히 이야기할 것이다.
Our new custom analyzer would look like this:
새로운 사용자 정의 analyzer는 아래와 같다.
PUT /my_index { "settings": { "analysis": { "filter": { "english_stop": { "type": "stop", "stopwords": "_english_" }, "light_english_stemmer": { "type": "stemmer", "language": "light_english" }, "english_possessive_stemmer": { "type": "stemmer", "language": "possessive_english" } }, "analyzer": { "english": { "tokenizer": "standard", "filter": [ "english_possessive_stemmer", "lowercase", "english_stop", "light_english_stemmer", "asciifolding" ] } } } } }
'2.X > 3. Dealing with Human Language' 카테고리의 다른 글
3-3-6. Sorting and Collations (0) | 2017.09.24 |
---|---|
3-4. Reducing Words to Their Root Form (0) | 2017.09.24 |
3-4-2. Dictionary Stemmers (0) | 2017.09.24 |
3-4-3. Hunspell Stemmer (0) | 2017.09.24 |
3-4-4. Choosing a Stemmer (0) | 2017.09.24 |