2.X/3. Dealing with Human Language

3-2-4. icu_tokenizer

drscg 2017. 9. 24. 17:31

The icu_tokenizer uses the same Unicode Text Segmentation algorithm as the standard tokenizer,but adds better support for some Asian languages by using a dictionary-based approach to identify words in Thai, Lao, Chinese, Japanese, and Korean, and using custom rules to break Myanmar and Khmer text into syllables.

icu_tokenizer 는 standard tokenizer와 동일한 Unicode 텍스트 분할 알고리즘(Unicode Text Segmentation Algorithm)을 사용한다. 그러나, 태국어(Thai), 라오스어(Lao), 중국어(Chinese), 일본어(Japanese), 한국어(Korean)에서 단어를 구분하기 위해, 사전 기반의 방식을 사용하고, 미얀마(Myanmar)와 크메르 문장을 음절로 나누기 위한 사용자 정의 규칙을 사용하여, 몇몇 아시아 언어에 대한 더 나은 지원을 제공한다.

For instance, compare the tokens produced by the standard and icu_tokenizers, respectively, when tokenizing "Hello. I am from Bangkok." in Thai:

예를 들어, standard 와 icu_tokenizer 에 의해 만들어진 token을 각각 비교해 보자. 태국어로 "Hello. I am from Bangkok." 을 각각 token으로 분할해 보면,

GET /_analyze?tokenizer=standard
สวัสดี ผมมาจากกรุงเทพฯ

The standard tokenizer produces two tokens, one for each sentence: สวัสดีผมมาจากกรุงเทพฯ. That is useful only if you want to search for the whole sentence "I am from Bangkok.", but not if you want to search for just "Bangkok."

standard tokenizer는 각 문장에 대해 하나씩, 2개의 token(สวัสดีผมมาจากกรุงเทพฯ)을 만들어낸다. 전체 문장인 "Hello. I am from Bangkok." 을 검색한 경우에만 유용하다. 그러나 "Bangkok." 을 검색한 경우에는 그렇지 않다.

GET /_analyze?tokenizer=icu_tokenizer
สวัสดี ผมมาจากกรุงเทพฯ

The icu_tokenizer, on the other hand, is able to break up the text into the individual words (สวัสดีผมมาจากกรุงเทพฯ), making them easier to search.

반면에, icu_tokenizer 는 문장(text)을, 검색하기 쉽도록, 개별 단어(สวัสดีผมมาจากกรุงเทพฯ)로 나눌 수 있다.

In contrast, the standard tokenizer "over-tokenizes" Chinese and Japanese text, often breaking up whole words into single characters. Because there are no spaces between words, it can be difficult to tell whether consecutive characters are separate words or form a single word. For instance:

그에 반해서, standard tokenizer는 중국어와 일본어 문장(text)을 "과하게 token으로(over-tokenize)" 만드는데, 가끔씩 전체 단어를 하나의 문자들로 나눈다. 단어 사이에 공백이 없기 때문에, 연속된 문자가 별도의 단어인지, 하나의 단어를 구성하는지를 판단하기 어렵다. 예를 들면,

  • 向 means facing, 日 means sun, and 葵 means hollyhock. When written together, 向日葵 means sunflower.

    向은 방향 을, 日은 태양 을, 葵은 접시꽃 을 의미한다. 向日葵 처럼 같이 쓰면 해바라기 를 의미한다.

  • 五 means five or fifth, 月 means month, and 雨 means rain. The first two characters written together as 五月 mean the month of May, and adding the third character, 五月雨 meanscontinuous rain. When combined with a fourth character, 式, meaning style, the word 五月雨式 becomes an adjective for anything consecutive or unrelenting.

    五는 다섯 또는 다섯 번째 를, 月은 달(월) 을, 雨는  를 의미한다. 五月 처럼 첫 두 문자를 함께 쓰면, 5월 을 의미하고, 세 번째 문자와 함께 五月雨 라고 쓰면 끊임없는 비 를 의미한다. 네 번째 문자로 방식(style) 을 의미하는 式 을 조합하면, 단어 五月雨式 은 연이은(consecutive) 또는 끊임없는(unrelenting) 이라는 형용사가 된다.

Although each character may be a word in its own right, tokens are more meaningful when they retain the bigger original concept instead of just the component parts:

각 글자는 그 자체로 단어로 될 수 있지만, token은 단순한 구성 요소 대신에, 더 큰 원래의 개념을 가지고 있어야 더 의미가 있다.

GET /_analyze?tokenizer=standard
向日葵

GET /_analyze?tokenizer=icu_tokenizer
向日葵

The standard tokenizer in the preceding example would emit each character as a separate token: . The icu_tokenizer would emit the single token 向日葵 (sunflower).

위의 예제에서, standard tokenizer는 개별 token으로 각각의 글자()를 출력할 것이다. 반면에, icu_tokenizer 는 하나의 token(向日葵, 해바라기)을 출력할 것이다.

Another difference between the standard tokenizer and the icu_tokenizer is that the latter will break a word containing characters written in different scripts (for example, βeta) into separate tokens—βeta—while the former will emit the word as a single token: βeta.

standard tokenizer와 icu_tokenizer 의 또 다른 차이점은 icu_tokenizer 는 다른 문자(예: βeta)로 쓰여진 글자를 포함하는 단어를 개별 token(βeta)으로 나눌 것이다. 반면에, standard tokenizer는 하나의 token(βeta)으로 단어를 출력한다.

'2.X > 3. Dealing with Human Language' 카테고리의 다른 글

3-2-2. standard Tokenizer  (0) 2017.09.24
3-2-3. Installing the ICU Plug-in  (0) 2017.09.24
3-2-5. Tidying Up Input Text  (0) 2017.09.24
3-3. Normalizing Tokens  (0) 2017.09.24
3-3-1. In That Case  (0) 2017.09.24