Elastic Search 분석기 - Token Filter

한민기·2024년 8월 1일

Elastic Search

목록 보기
6/6
post-thumbnail

Token Filter란

Elasticsearch에서 token_filter는 텍스트 분석 파이프라인의 중요한 부분으로, 텍스트를 토큰화한 후 필터링을 통해 분석된 토큰을 변형하거나 처리

Token Filter의 종류

  • asciifolding: 유니코드 문자를 ASCII 문자로 변환합니다. 예를 들어, "é"를 "e"로 변환합니다.

  • cjk_width: CJK(Chinese, Japanese, Korean) 문자들의 너비를 조정합니다. 주로 문서의 일관성을 위해 사용됩니다.

  • collation: 다양한 언어의 정렬 규칙에 따라 텍스트를 정렬합니다.

  • edge_ngram: 토큰의 접두사 부분을 생성하여 검색어 자동 완성 기능에 사용됩니다.

  • ngram: 텍스트에서 고정 길이의 n-그램을 생성합니다.

  • length: 토큰의 길이를 조정하거나 특정 길이 범위에 맞게 필터링합니다.

  • lowercase: 토큰을 소문자로 변환합니다.

  • remove: 특정 문자를 제거합니다. 예를 들어, 구두점을 제거할 때 사용됩니다.

  • shingle: 여러 토큰을 결합하여 새로운 토큰을 생성합니다. 예를 들어, "The quick brown fox"를 "The quick", "quick brown", "brown fox"와 같이 변환합니다.

  • stop: 언어별 불용어(stop words)를 제거합니다. 예를 들어, "the", "is", "in"과 같은 일반적인 단어를 제거합니다.

  • synonym: 동의어를 처리하여 동일한 의미를 가진 다양한 형태의 토큰을 동일하게 취급합니다.

  • stemmer: 단어의 어근을 추출하여 다양한 형태를 같은 단어로 처리합니다. 예를 들어, "running", "runner"를 "run"으로 변환합니다.

  • porter_stem: Porter 알고리즘을 사용하여 단어의 어근을 추출합니다.

  • kstem: K-스테머 알고리즘을 사용하여 단어를 처리합니다.

  • unique: 중복된 토큰을 제거합니다.

  • truncate: 토큰을 일정 길이로 자릅니다.

  • pattern_replace: 정규 표현식을 사용하여 토큰을 대체하거나 수정합니다.

  • word_delimiter: 단어의 구분 기호를 처리하여, 예를 들어, 하이픈으로 연결된 단어를 분리할 때 사용됩니다.

저는 이 중에서 동의어, 금지어를 사용해 보았고 사용법을 설명하겠습니다.

동의어, 금지어 사전 등록

먼저 동의어 금지어 사전을 만들어야 한다.

동의어 사전
custom_synoym.txt

Love, 사랑
tree, 나무
책, 도서
시작, 처음

이렇게 작성하면 token filter에서 책이 발견되었을 때 도서에게도 같이 분석된다.

금지어 사전
custom_stop_word.txt

겨우
과연

금지어 사전의 경우 이렇게 한단어씩 적어두면 된다.

사전들을 만들었다면 이제 사전들을 해당위치에 넣어두어야 한다.
사전의 위치는 Elastic Search 파일의 config에 넣어 두면 된다.
(권한 설정에 유의하자)

이제 인덱스 생성

PUT token_filter_test_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "nori_analyzer": {
          "type": "custom",
          "tokenizer": "nori_tokenizer",
          "filter": [
            "custom_stop",
            "custom_synonym"
          ]
        }
      }, 
      "tokenizer":{
        "nori_tokenizer": {
          "type": "nori_tokenizer"
        }
      },
      "filter": {
        "custom_stop": {
          "type": "stop",
          "stopwords_path": "custom_stop_words.txt"
        },
        "custom_synonym": {
          "type": "synonym",
          "synonyms_path": "custom_synoym.txt"
        }
      }
    }
  }
}

tokenizer는 nori를 사용해 보았다. filter를 등록해 금지어와 동의어를 등록하였다.

분석기로 실행

GET token_filter_test_index/_analyze
{
  "analyzer" : "nori_analyzer",
  "text" : "겨우 책"
}

결과

{
  "tokens": [
    {
      "token": "책",
      "start_offset": 3,
      "end_offset": 4,
      "type": "word",
      "position": 1
    },
    {
      "token": "도서",
      "start_offset": 3,
      "end_offset": 4,
      "type": "SYNONYM",
      "position": 1
    }
  ]
}

겨우는 금지어라 token으로 나오지 않고 책을 입력하였는데 동의어로 도서까지 함께 등록 되었다.

정리

token filter는 tokenzier로 분석 된걸 처리하는 filter이다.
쉽게 사용할수 있는 예로는 동의어, 금지어 등이 있다.

profile
백엔드 개발자

0개의 댓글