elasticsearch 한국어 형태소분석기 분석의 이해

Elastic/Elasticsearch 2013. 1. 22. 18:55

Spacial Thanks to : 이창민.

elasticsearch 한국어 형태소분석기 분석

  1. 소스 다운로드 (zip파일로 다운로드)
    1. 다운로드 : https://github.com/chanil1218/elasticsearch-analysis-korean
    2. 소스로 다운로드도 가능하지만 해당 위치를 elasticsearch plugin에서 플러그인명을 chanil1218/elasticsearch-analysis-korean로
      지정할 경우에도 사용된다. 이 때, 해당 elasticsearch 버전이 최신버전이면 해당 플러그인을 찾지 못한다. 서버와 플러그인의 버전이 같아야 설치 가능
  2. 이클립스에 프로젝트 import 방법
    1. eclipsesearch-analysis-korean-master.zip파일을 압축해제한다.
    2. 이클립스->마우스 오른쪽 버튼-> Import-> Maven -> Existing Maven Projects
    3. Browse...을 눌러 압축을 해제한 디렉토리를 선택하여 import 한다.
    4. 프로젝트 오른쪽 버튼 -> Run as -> Maven install을 하여 빌드 한다.
  3. 형태소 분석을 담당하는 주 클래스는 org.apache.lucene.analysis.kr.morph 패키지의 MorphAnalyzer 클래스이다.
    KoreaTokenizer가 한글과 영문을 토큰 단위로 분리를 하면, 이중 한글만 (한글, 숫자+한글, 영자+한글) MorphAnalyzer을 통해 형태소 분석.
  4. 형태소 분석한 결과는 KoreanFilter에 AnalysisOutput 클래스로 전달이 되며 명사인 경우만 색인어로 추출
  5. 형태소분석결과는 점수를 가진다. 30 or 100으로 표시되는 값
    1. 100인 경우는 형태소 분석에 성공한 경우이므로 분석결과를 그대로 색인어로 사용.
    2. 30인 경우는 문법형태소로는 분해를 하였지만 사전에는 없으므로 정확하지 않은 경우. 이런 경우는 검색이 않되는 경우를 방지하기 위해 bigram(바이어그램, 아래에 설명 추가)에
      의해 추가로 색인어를 추출합니다.
    3. 예를 들면, "블로그에" 라는 어절이 있을 때 "블로그"가 사전에 등록되어 있지 않으므로 형태소분석결과는 "블로그에(N)"와 블로그(N), 에(J)"가 되지만 색인어는 "블로그에", "블로그", "블로", "로그", "그에"가 됩니다.
  6. 형태소 분석결과 사전이 없을 경우 바이어그램으로 색인어를 추출하는데 false drop된 문서가 나온는 단점이 있다.
    1. http://blog.daum.net/maxmin93/10990156 에서 절단 검색부분에 bigram의 문제점과 trigram이 좀더 나은 검색결과를 제공가능 하지만 장단점이 있는 것 확인.
    2. 위의 한국어 형태소 분석기에는 현재 분석결과가 사전에 없을 경우 bigram만 적용 됨.
  7. 사전 데이터는 org.apache.lucene.analysis.kr.dic 패키지에 존재한다. (사전데이터 각 파일 설명)
    1. total. dic : 기본사전
      - 용언과 체언을 포함한 기본사전 입니다. 사전의 형식을 보면 다음과 같이 구성되어 있습니다.
      ==========================
      납부,10011X
      ==========================
      단어정보 - 단어정보는 6글자로 구성되어 있는데 각 글자는 단어의 사용규칙을 나타내며 아래와 같습니다.
          - 1 : 명사
          - 2 : 동사
          - 3 : 기타품사
          - 4 : 하여동사
          - 5 : 되어동사
          - 6 : 불규칙변형
          - 1~3은 품사에 대한 정보이며, 위에 기술한 각 품사 여부를 나타냅니다.
          - 4~5는 명사인 경우 "하다""되다"가 붙을 수 있는 경우를 나타냅니다. 주의) 동사는 반드시(0)이어야 합니다.
          - 6은 동사인 경우 불규칙변형의 종류를 나타내며 종류는 아래와 같습니다.
        
      B:  ㅂ 불규칙, H: ㅎ 불규칙, L: 르 불규칙, S: ㅅ 불규칙, R: 러 불규칙, X: 규칙
    2. extension.dic : 확장사전
      - 기본사전은 가능한 그대로 사용하는 것이 좋음. 사전을 조금 보완하여야 할 때 확장사전을 사용하면 됨. 사전을 구성하는 기본 규칙은 기본사전과 동일
    3. josa.dic : 조사사전
      - 조사들만 모아둔 사전. 각 조사는 한줄씩 구분이 됨
    4. eomi.dic : 어미사전
      - 어미들만 모아둔 사전. 각 어미는 한줄씩 구분이 됨
    5. prefix.dic : 접두어 사전
      - 복합명사를 분해시 2글자 이상의 단어로만 분해. 그러나 "과소비" 같은 경우 " 과"를 접두어로 분리해 내어 "과소비"와 "소비"를 색인어로 추출하기 위해 만든사전
    6. suffix.dic : 접미어 사전
      - 복합명사를 분해시 "현관문" 같은 경우 "문"을 접미어로 분해하여 "현관문"과 "현관"을 색인어로 추출하기 위해 만든 사전
    7. compounds.dic : 기분석 복합명사 사전
      - 복합명사는 명사 사전을 기반으로 최장일치법에 의해 분해를 합니다. 그러나 "근로자의날" 같은 경우 중간에 조사가 포함되어 있으므로 분해가 불가능합니다. 이런 경우 복합명사 사전에 등록을 합니다. 규칙은 다음과 같습니다.
      ==========================
      근로자의날:근로자,날
      ==========================

      - 콜론(\:)을 중심으로 좌측은 복합명사이고 우측은 함께 추출될 색인어입니다. 따라서 위의 경우는 색인어로 "근로자의날", "근로자","날" 이렇게 3개가 추출됩니다.

    8. syllable.dic : 음절정보
    9. 현재 파악 중 (cj.dic , occurrence.dic, uncompounds.dic 3개의 파일)

N-gram이란?
N-gram이란?
N-gram은 텍스트나 문서에서 추출한 문자 또는 단어의 시퀀스이며, 문자 기반 및 단어 기반이라는 두 그룹으로 분류할 수 있다. N-gram은 단어 또는 문자열(이 튜토리얼의 경우)에서 추출한 N개의 연속 문자 세트이다. 이 방법의 배후에는 비슷한 단어가 N-gram의 높은 비율을 차지할 것이라는 개념이 깔려있다. 가장 일반적으로 사용되는 N값은 2와 3이며, 각각의 경우를 bigram과 trigram이라고 한다. 예를 들어, TIKA라는 단어에서는 T, TI, IK, KA, A*라는 bigram과 **T, *TI, TIK, IKA, KA, A*라는 trigram이 생성된다. ""는 채우기 공간을 의미한다. 문자 기반 N-gram은 문자열으 유사성을 측정하는데 사용된다. 문자 기반 N-gram을 사용하는 애플리케이션으로는 맞춤법 검사기 스테밍(strmming), OCR등이 있다.
발췌 :  http://www.ibm.com/developerworks/kr/opensource/tutorials/os-apache-tika/section6.html

: