2.X/3. Dealing with Human Language

3-1-2. Configuring Language Analyzers

drscg 2017. 9. 24. 17:54

While the language analyzers can be used out of the box without any configuration, most of them do allow you to control aspects of their behavior, specifically:

language analyzer는, 어떤 설정 없이, 즉시 사용할 수 있지만, 대부분은 특별히 작동 방식을 제어할 수 있다.

Stem-word exclusion

Imagine, for instance, that users searching for the "World Health Organization" are instead getting results for "organ health". The reason for this confusion is that both "organ" and "organization" are stemmed to the same root word: organ. Often this isn’t a problem, but in this particular collection of documents, this leads to confusing results. We would like to prevent the words organization and organizations from being stemmed.

예를 들어, "World Health Organization" 을 검색한 사용자가 "organ health" 라는 결과를 얻은 상황을 가정해 보자. 이런 혼란의 이유는 "organ" 과 "organization" 이 동일한 원형(organ)을 가지기 때문이다. 대체로 이런 상황은 문제가 아니다. 그러나, 이 특별한 document의 집합에서, 이 상황은 혼란스러운 결과가 될 수 있다. organization 과 organizations 라는 단어는 형태소 분석이 되지 않도록 해야 한다.

Custom stopwords

The default list of stopwords used in English are as follows:

영어에서 사용되는 불용어의 기본 목록은 아래와 같다.

a, an, and, are, as, at, be, but, by, for, if, in, into, is, it, no, not, of, on, or, such, that, the, their, then, there, these, they, this, to, was, will, with

The unusual thing about no and not is that they invert the meaning of the words that follow them. Perhaps we decide that these two words are important and that we shouldn’t treat them as stopwords.

no 와 not 이 특이한 것은, 이것에 이어지는 단어의 의미가 변경된다는 점이다. 이들 두 단어가 중요한지, 불용어로 처리하지 않을지를 결정해야 한다.

To customize the behavior of the english analyzer, we need to create a custom analyzer that uses the english analyzer as its base but adds some configuration:

english analyzer의 동작을 사용자 정의하기 위해, english analyzer를 기반으로 사용하는, 그러나, 몇 가지 설정을 추가한, 사용자 정의 analyzer를 생성해야 한다.

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_english": {
          "type": "english",
          "stem_exclusion": [ "organization", "organizations" ], 
          "stopwords": [ 
            "a", "an", "and", "are", "as", "at", "be", "but", "by", "for",
            "if", "in", "into", "is", "it", "of", "on", "or", "such", "that",
            "the", "their", "then", "there", "these", "they", "this", "to",
            "was", "will", "with"
          ]
        }
      }
    }
  }
}

GET /my_index/_analyze?analyzer=my_english 
The World Health Organization does not sell organs.

organization 과 organizations 는 형태소 분석을 하지 않는다.

사용자 정의 불용어 목록을 지정한다.

worldhealthorganizationdoesnotsellorgan 이라는 token이 나온다.

We discuss stemming and stopwords in much more detail in Reducing Words to Their Root Formand Stopwords: Performance Versus Precision, respectively.

형태소 분석과 불용어에 대해, Reducing Words to Their Root Form와 Stopwords: Performance Versus Precision에서, 더 자세히 이야기해 보자.