Elasticsearch – Text Analysis

By | 2022년 8월 18일
Table of Contents

Elasticsearch – Text Analysis

3단계

Elasticsearch의 애널라이저는,
0 ~ 3 개의 Character Filter,
1개의 Tokenizer,
그리고 0 ~ n 개의 Token Filter 로 이루어집니다.

Character Filter

Data type text 가 입력되면 가장 먼저 0 ~ 3 개의 Character Filter 가 적용됩니다.

이 단계에서는 text 에서 특정 문자를 replace 또는 제거하게 됩니다.

Character Filter 종류

  • HTML Strip Character Filter

    html 을 제거합니다.

    GET /_analyze

    {
     "tokenizer": "keyword",
     "char_filter": [
       "html_strip"
     ],
     "text": "<p>I&apos;m so <b>happy</b>!</p>"
    }

    response

    {
     "tokens": [
       {
         "token": " I'm so happy! ",
         "start_offset": 0,
         "end_offset": 32,
         "type": "word",
         "position": 0
       }
     ]
    }
  • Mapping Character Filter

    문자 또는 문자열을 다른 문자 또는 문자열로 변환해 줍니다.

    • mappings : 배열을 데이타로 합니다.
    • mappings_path : 파일에 매핑정보를 저장할 수 있습니다.

    GET /_analyze

    {
     "tokenizer": "keyword",
     "char_filter": [
       {
         "type": "mapping",
         "mappings": [
           "c++ => c_plus_plus"
         ]
       }
     ],
     "text": "c++"
    }

    response

    {
     "tokens": [
       {
         "token": "c_plus_plus",
         "start_offset": 0,
         "end_offset": 3,
         "type": "word",
         "position": 0
       }
     ]
    }
  • Pattern Replace Character Filter

    Java 정규식을 이용한 변환을 합니다.

Tokenizer

Character Filter 를 통과한 text 는 1개의 Tokenizer 에 의해,
N 개의 단어로 분리됩니다.

예를 들어, whitespace Tokenizer 는 공백문자를 기준으로 단어를 추출해 냅니다.

Tokenizer 종류

단어 기반

  • Standard Tokenizer

    whitespace Tokenizer 와 유사하지만, 마침표 물음표, 마이너스 등을 제거합니다.

    POST _analyze

    {
     "tokenizer": "standard",
     "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
    }
  • Whitespace Tokenizer

    공백문자를 기준으로 단어를 추출합니다.
    마침표 물음표 등을 제거하지 않습니다.

  • Classic Tokenizer

    영어에 특화된 Tokenizer 입니다.
    이메일주소, 도메인, 전화번호 등을 인식합니다.

단어 조각화

  • N-Gram Tokenizer

    sliding window 방식으로 단어를 조각화 합니다.
    sliding window 란 오른쪽으로 이동하면서,
    일정한 길이만큼 단어를 조각내는 방식입니다.

    띄어쓰기 안된 한글을 토크나이징 하기에 적합합니다.

    quick → [qu, ui, ic, ck]

    token_chars 에는 letter, digit, whitespace, punctuation, symbol, custom 이 포함될 수 있습니다.
    custom 을 쓰기 위해서는 custom_token_chars 가 세팅되어 있어야 합니다.

    PUT my_index

    {
     "settings": {
       "max_ngram_diff": 20,
       "analysis": {
         "analyzer": {
           "my_analyzer": {
             "tokenizer": "my_tokenizer"
           }
         },
         "tokenizer": {
           "my_tokenizer": {
             "type": "ngram",
             "custom_token_chars": "+-_'",
             "min_gram": 1,
             "max_gram": 20,
             "token_chars": [
               "letter",
               "digit",
               "custom"
             ]
           }
         }
       }
     }
    }

    POST my_index/_analyze

    {
     "analyzer": "my_analyzer",
     "text": "1800사무용책상"
    }
  • Edge N-Gram Tokenizer

    첫글자를 시작점으로 글자수를 늘려가면서 단어를 조각냅니다.

    quick → [q, qu, qui, quic, quick]

구조화된 단어

……

Token Filter

Tokenizer 를 거친 단어들은 Token Filter 에 의해 정제됩니다.

예를 들어, lowercase 는 모든 단어를 소문자로 변경합니다.

Token Filter 종류

참조

답글 남기기