python

형태소 분석기 mecab-ko 설치 + 사전 적용(+우선순위 높이기)

듐듐다다 2021. 2. 3. 12:01
반응형

목차

  • Mecab 설치
  • 사전등록 및 우선순위 적용

# Mecab 설치

Jupyter에서 pip install konlpy을 한 뒤에 mecab를 사용 해보면 다음과 같은 에러가 발생한다.

1 NameError: name 'Tagger' is not defined

그래서 다음과 같이 세가지 mecab 관련 파일을 받고 설치 해야한다.

mecab-ko 설치
mecab-dic 설치
mecab-python 설치

참고 링크 : https://lovablebaby1015.wordpress.com/2018/09/24/mecab-macos-설치-삽질-후기-작성중/

1. mecab-ko

 - 메캅 홈페이지에서 최신 버전 확인 후 다운로드 

   bitbucket.org/eunjeon/mecab-ko/downloads

 

 - 다운로드

wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz

 - 압축 해제 및 설치

>> tar xvfz mecab-0.996-ko-0.9.2.tar.gz
>> cd mecab-0.996-ko-0.9.2
>> ./configure
>> make
>> make check
>> sudo make install

 

2. mecab-ko-dic

 - 사전 관리 프로젝트 다운로드

wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz

 - 압축 해제 및 설치

>> tar xvfz mecab-ko-dic-2.1.1-20180720.tar.gz
>> cd mecab-ko-dic-2.1.1-20180720
>> ./configure
>> make
>> sudo make install

3. mecab python

 - 메캅 프로젝트 clone

>> git clone https://bitbucket.org/eunjeon/mecab-python-0.996.git
>> cd mecab-python-0.996
>> python setup.py build
>> su

 

이제 Jupyter 에서 정상적으로 Mecab 사용 가능

from konlpy.tag import Mecab
mecab = Mecab()

 

# 사용자 사전 등록 및 우선순위 높이기

참고 : https://kugancity.tistory.com/entry/mecab에-사용자사전기분석-추가하기

- 표층형 : 단어명
- 1785,3543,4267 : 좌문맥ID, 우문맥ID, 단어비용 (자동 생성 처리로 입력)
- 품사태그 : 품사 입력 (mecab-ko-dic 품사 태그를 참조하여 입력)
- 의미분류 : 인명 또는 지명 또는 *
- F : 받침유무 (원 단어의 끝 글자 받침 유무로 T, F 입력)
- 읽기 : 발음 (원 단어의 발음을 입력)
- 타입 : inflected, compound, Preanalysis, *  
- 첫번째 품사, 마지막 품사 : 기분석으로 나눠지는 토큰에 대한 각 품사 입력 (mecab-ko-dic 품사 태그를 참조하여 입력)
- 원형 : 토큰 들로 나눠지는 부분 +로 입력 ( 각 토큰 : 표층형/품사태그/의미분류 ) 
- 인덱스표현  : 토큰 들로 나눠지는 부분 +로 입력 ( 각 토큰:  표층형/품사태그/의미부류/PositionIncrementAttribute/PositionLengthAttribute) 

1. 사전 등록

 - mecab-ko-dic 설치 위치로 가서 nnp.csv에 사용자 사전 입력

>> cd ~/mecab-ko-dic-2.1.1-20180720/user-dic
>> vi nnp.csv

다음 형태로 입력
구르미그린달빛,0,0,0,NNP,*,T,구르미그린달빛,*,*,*,*
고프로,0,0,0,NNP,*,F,고프로,*,*,*,*
썸즈업,0,0,0,NNP,*,T,썸즈업,*,*,*,*
썬팍,0,0,0,NNP,*,T,썬팍,*,*,*,*

 - 적용 전 테스트

 - 사전 적용

   tools>> ./add-userdic.sh

   mecab-ko-dic-2.1.1-20180720 >> make install

(base) ➜  mecab-ko-dic-2.1.1-20180720 cd tools
(base) ➜  tools ./add-userdic.sh
(base) ➜  mecab-ko-dic-2.1.1-20180720 make install
generating userdic...
nnp.csv
.
.
.
emitting matrix      : 100% |###########################################|

done!
echo To enable dictionary, rewrite /usr/local/etc/mecabrc as \"dicdir = /usr/local/lib/mecab/dic/mecab-ko-dic\"
To enable dictionary, rewrite /usr/local/etc/mecabrc as "dicdir = /usr/local/lib/mecab/dic/mecab-ko-dic"
(base) ➜  tools

 - 사전 적용 후 테스트

  사전은 적용 되었지만 등록한 단어의 우선순위(단어비용)가 낮아서, 원하지 않는 모양으로 분해 되는 것을 확인함. (단어비용을 낮추면 검색 우선순위가 높아짐)
  현재 적용된 단어 비용

              구르미그린달빛의 단어비용 : 2953
              구르/미/그린/달빛 단어비용 : 2679/3464/1247/2215

2. 우선 순위 적용 (단어비용 낮추기)

 - mecab-ko-dic-2.1.1-20180720 >> vi user-nnp.csv

 - 2953 → 0 변경 후 저장

 - 변경 사항 반영
    mecab-ko-dic-2.1.1-20180720 >> sudo make clean
    mecab-ko-dic-2.1.1-20180720 >> sudo make install

 - 결과 확인

반응형