본문 바로가기

ELK스택

[Elasticsearch] 노리(nori) 한글 형태소 분석기

이번 글에서는 2가지를 정리해 보려고 합니다.

  • 노리(nori) 설치
  • 노리(nori) 설정

노리(nori)가 필요한 이유를 간단히 설명드리면, Elasticsearch에서는 한글을 단어단위로 나눌때 복합어, 합성어 등 정확하게 단어를 나누기가 쉽지 않습니다. 그래서 한글을 형태소 분석을 하기위해서는 Elastic사에서 직접 개발한 한글 형태소 분석기인 노리(nori)가 필요합니다.

 

노리(Nori) 설치

노리(Nori)를 사용하기 위해서는 "bin/elasticsearch-plugin install analysis-nori" 명령어를 통해 설치를 진행해야 합니다.

아래와 같이 진행이 되었다면 설치가 완료된 것입니다. 설치가 완료되면 Elastic서버를 내렷다가 다시 올려줍니다.

이제 노리(Nori)를 사용 할 수 있게되었습니다.

그럼 기존 standartd 토크나이저와 nori 토크나이저의 차이를 알아보도록 하겠습니다.

아래 그림과 같이 standard 토크나이저는 단순 띄어쓰기 단위로만 단어를 분리 할 수 있었지만, nori 토크나이저는 "물", "산"과 같은 단어도 분리한 것을 확인 할 수 있습니다.

 

노리(nori) 설정

노리(Nori) 토크나이저에는 여러가지 옵션들이 있습니다.

  1. user_dictionary : 사용자 사전이 저장된 파일의 경로를 입력합니다.
  2. user_dictionary_rules : 사용자 정의 사전을 배열로 입력합니다.
  3. decompound_mode : 합성어의 저장 방식을 결정합니다.

먼저, user_dictionary와 user_dictionary_rules을 사용하여 사용자 정의 사전을 통한 검색방법을 알아보도록 하겠습니다. 아래와 같이 my_nori인덱스에 해물 사전을 포함한 토크나이저를 생성하였습니다.

그리고 검색을 하게 되면 "uesr_dictionary_rules"에 해물이라는 배열을 넣어두어서 가중치가 높아지게 됩니다.

아래를 보면 해물이라는 단어의 순위가 위로올라온 것을 알 수 있습니다.

하지만, "동", "해물", "과"와 같이 단어가 나뉘게 된다면 사용자가 "동해", "물"과 같은 단어로 검색하였을 때, 검색이 되지 않습니다. 이러한 점을 주의하여 사용하셔야 합니다.

그럼에도 불구하고 사용자 사전 검색방식은 특정 상황에서 자주 사용된다고 합니다. 예를들면, Youtube에는 많은 BJ들이 존재하는데 BJ명이 일반적인 사전에 등록되어 있지 않은경우가 많습니다. 그럴경우 BJ명을 검색한다 할지라고 그 BJ는 검색이 되지 않을 것입니다. 이러한 경우 사용자 사전 검색방식을 사용하여 검색을 가능하게 할 수 있는 방법입니다.

 

마지막으로 decompound_mode을 알아보도록 하겠습니다.

decompound_mode는 다음 3개의 값을 사용 할 수 있습니다.

  • none : 어근을 분리하지 않고 완성된 합성어만 저장합니다.
  • discard (디폴트) : 합성어를 분리하여 각 어근만 저장합니다.
  • mixed : 어근과 합성어를 모두 저장합니다.

먼저 decompound_mode를 각각의 옵션으로 설정한 토크나이저를 my_nori인덱스에 저장합니다.

아래는 decompound_mode를 변경하여 검색한 예제입니다.

"none", "discard", "mixed"옵션에 따라 검색되는 단어가 달라지게 되므로 상황에 맞게 잘 사용하는 것이 좋을 것이라고 생각이 됩니다.