[TIL]형태소 분석기 사용자 사전 사용하기

강슬기·2021년 10월 3일
0

TIL

목록 보기
1/9

사용자 사전

사용자 사전의 단어(word)는 크게 단일어와 복합어로 구성된다12(여기서 융합 합성어는 복합어가 아닌 단일어로 취급한다). 위와 같이 단일어는 홀로 명시하고 복합어는 원형어 다음에 형태소(낱말)들을 띄어쓰기와 함께 나열한다.1

사용자 사전을 정의할 때 주의할 점이 있다. 단일어와 복합어의 구분을 명확히하고, 동일한 복합어의 형태소 구성의 일관성을 유지해야 한다13. 개념을 어떻게 바라보느냐에 따라 단일어가 복합어가 되고, 복합어가 단일어가 될 수 있기에 일관된 기준이 중요하다. 예를 들어, ‘바늘’과 ‘방석’이 원형인 ‘바늘방석’의 의미를 보존하지 못하므로 단일어로 취급한다. ‘인공’과 ‘지능’은 원형인 ‘인공지능’의 의미를 보존하므로 복합어가 된다. 단, 이러한 기준은 코퍼스의 크기와 도메인에 따라 달라질 수 있다. 코퍼스의 크기가 작으면 sparsity 문제를 최소화하기 위해서 단일어의 비중이 높아질 수 있다. 또한, 정밀도(precision)를 높이기 위해 복합어를 단일어로 정의할 수 있다.1

예시

[경희대]를 Lucene 기반 검색엔진에서 어떤 형태소 분석기로 분석하면 [경희]와 [대]로 색인.
[경희대]를 사용자 사전에 추가하면 [경희대]로 색인은 되지만, [경희대학교]가 [경희대]와 [학교]로 색인.
[경희대학교]를 사용자 사전에 추가하면, 공백 차이로 [경희 대학교]가 색인되지 않음(검색되지 않음)
따라서, [경희대]를 사용자 사전에 추가하고, [경희대학교]와 [경희 대학교]를 복합명사 사전에 등록해야
[경희대], [경희대학교], [경희 대학교](실제로는 [경희], [대학교])로 색인.2

Nori

노리는 내부적으로 사용자 사전의 단어들은 모두 일괄적으로 NNG(일반명사) 품사 태그를 붙인다.1
아래와 같이 텍스트파일에 엔터단위로 작성한다.
복합명사의 경우 한 줄에 분해정보까지 작성한다.

c++
C샤프
세종
세종시 세종 시
대한민국날씨
대한민국
날씨
21세기대한민국
세기
자연어처리 자연어 처리
노리
텍스트마이닝
경희대
경희대학교 경희 대학교

Pynori를 통해 위의 사용자사전 적용결과는 아래와 같다.

{'termAtt': ['경희대', '는', '회기', '역', '에', '있', '다'], 'offsetAtt': [(0, 3), (3, 4), (5, 7), (7, 8), (8, 9), (10, 11), (11, 12)], 'posLengthAtt': [1, 1, 1, 1, 1, 1, 1], 'posTypeAtt': ['MORP', 'MORP', 'MORP', 'MORP', 'MORP', 'MORP', 'MORP'], 'posTagAtt': ['NNG', 'JX', 'NNP', 'NNG', 'JKB', 'VV', 'EC'], 'dictTypeAtt': ['US', 'KN', 'KN', 'KN', 'KN', 'KN', 'KN']}

{'termAtt': ['경희', '대학교', '는', '회기', '역', '에', '있', '다'], 'offsetAtt': [(0, 2), (2, 5), (5, 6), (7, 9), (9, 10), (10, 11), (12, 13), (13, 14)], 'posLengthAtt': [1, 1, 1, 1, 1, 1, 1, 1], 'posTypeAtt': ['MORP', 'MORP', 'MORP', 'MORP', 'MORP', 'MORP', 'MORP', 'MORP'], 'posTagAtt': ['NNG', 'NNG', 'JX', 'NNP', 'NNG', 'JKB', 'VV', 'EC'], 'dictTypeAtt': ['US', 'US', 'KN', 'KN', 'KN', 'KN', 'KN', 'KN']}

TODO

Pynori3 기능테스트해보기

  • 동의어 사용시 offsetAtt
  • 동의어 처리 모드

각주

1: https://gritmind.blog/2020/07/22/nori_deep_dive/
2: https://forest71.tistory.com/204?category=628611
3: https://github.com/gritmind/python-nori

profile
구르는돌

0개의 댓글