Out-of-the-box stemming solutions are never perfect. Algorithmic stemmers, especially, will blithely apply their rules to any words they encounter, perhaps conflating words that you would prefer to keep separate. Maybe, for your use case, it is important to keep skies
and skiing
as distinct words rather than stemming them both down to ski
(as would happen with the english
analyzer).
내장된 형태소 분석기는 절대 완벽하지 않다. 특히, 알고리즘 형태소 분석기는, 개별적으로 저장하는 것이 더 나은 혼합 단어를 만나면, 그것의 규칙을 해당 단어에 무분별하게 적용한다. 아마, skies
와 skiing
을 형태소 분석하여 둘 모두를 ski
로 하는 (english
analyzer에서 발생) 것보다는, 별개의 단어로 저장하는 것이 더 중요할 것이다.
The keyword_marker
and stemmer_override
token filters allow us to customize the stemming process.
사용자 정의 형태소 분석 프로세스를 위해, keyword_marker
와 stemmer_override
token filter 를 이용할 수 있다.
Preventing Stemmingedit
The stem_exclusion
parameter for language analyzers (see Configuring Language Analyzers) allowed us to specify a list of words that should not be stemmed. Internally, these language analyzers use the keyword_marker
token filter to mark the listed words as keywords, which prevents subsequent stemming token filters from touching those words.
language analyzer(Configuring Language Analyzers 참조)에 대해, stem_exclusion
매개변수로, 형태소 분석을 하지 않을 단어의 목록을 지정할 수 있다. 내부적으로, 이런 language analyzer는, 나열된 단어를 keywords 로 표시하는, keyword_marker
token filter를 사용한다. 이것은, 후속 형태소 분석 token filter가 해당 단어를 변경하지 않도록 한다.
For instance, we can create a simple custom analyzer that uses the porter_stem
token filter, but prevents the word skies
from being stemmed:
예를 들어, porter_stem
token filter를 사용하는, 간단한 사용자 정의 analyzer를 만들어 보자. 그러나, 이것은 skies
라는 단어를 형태소 분석되는 것을 방지한다.
PUT /my_index { "settings": { "analysis": { "filter": { "no_stem": { "type": "keyword_marker", "keywords": [ "skies" ] } }, "analyzer": { "my_english": { "tokenizer": "standard", "filter": [ "lowercase", "no_stem", "porter_stem" ] } } } } }
Testing it with the analyze
API shows that just the word skies
has been excluded from stemming:
analyze
API를 이용해 테스트해 보면, skies
라는 단어가 형태소 분석에서 제외되는 것을 볼 수 있다.
While the language analyzers allow us only to specify an array of words in thestem_exclusion
parameter, the keyword_marker
token filter also accepts akeywords_path
parameter that allows us to store all of our keywords in a file. The file should contain one word per line, and must be present on every node in the cluster. See Updating Stopwords for tips on how to update this file.
language analyzer에서는 stem_exclusion
매개변수에 단어의 배열만을 지정할 수 있는 반면에, keyword_marker
token filter에서는, 파일에 모든 keywords를 저장하여, 그 경로를 keywords_path
매개변수에 지정할 수 있다. 파일은 한 라인에 한 단어씩 있어야 하고, cluster의 모든 node에 있어야 한다. 이 파일을 업데이트하는 방법에 대한 팁은 Updating Stopwords를 참조하자.
Customizing Stemmingedit
In the preceding example, we prevented skies
from being stemmed, but perhaps we would prefer it to be stemmed to sky
instead. The stemmer_override
token filter allows us to specify our own custom stemming rules. At the same time, we can handle some irregular forms like stemming mice
to mouse
and feet
to foot
:
위의 예제에서, skies
가 형태소 분석되는 것을 방지하였다. 그러나, 아마도 sky
로 대신 형태소 분석되는 것이 더 나을 것이다. stemmer_override
token filter를 이용하여, 자기 자신의 사용자 정의 형태소 분석 규칙을 지정할 수 있다. 동시에, mice
가 mouse
로, feet
이 foot
으로 형태소 분석되는 것처럼, 몇 가지 불규칙적인 형태를 처리할 수 있다.
PUT /my_index { "settings": { "analysis": { "filter": { "custom_stem": { "type": "stemmer_override", "rules": [ "skies=>sky", "mice=>mouse", "feet=>foot" ] } }, "analyzer": { "my_english": { "tokenizer": "standard", "filter": [ "lowercase", "custom_stem", "porter_stem" ] } } } } } GET /my_index/_analyze?analyzer=my_english The mice came down from the skies and ran over my feet
rules는 | |
| |
반환 값: |
Just as for the keyword_marker
token filter, rules can be stored in a file whose location should be specified with the rules_path
parameter.
keyword_marker
token filter처럼, 규칙은 파일에 저장될 수 있다. 파일의 위치는 rules_path
매개변수에 지정할 수 있다.
'2.X > 3. Dealing with Human Language' 카테고리의 다른 글
3-4-3. Hunspell Stemmer (0) | 2017.09.24 |
---|---|
3-4-4. Choosing a Stemmer (0) | 2017.09.24 |
3-4-6. Stemming in situ (0) | 2017.09.24 |
3-5. Stopwords: Performance Versus Precision (0) | 2017.09.24 |
3-5-1. Pros and Cons of Stopwords (0) | 2017.09.24 |