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