형태소분석기 Mecab 설치 방법과 사용법, 사용자사전추가하기

우선 다운로드 해야하는 것은 크게 3가지이다.

  • mecab-ko
  • mecab-dic
  • mecab-python

이 후, MeCab을 직접 import하거나, konlpy.tagger.Mecab 으로 import하여 사용할 수 있다. 여기서 KoNLPy는 MeCab(은전한닢), Kkma(꼬꼬마), Hannanum(한나눔), Okt(Twitter), Komoran(코모란) 5새 오픈소스 형태소 분석기를 파이썬 환경에서 사용할 수 있도록 인터페이스를 통일한 한국어 자연어 처리 패키지이다. 직접 MeCab을 불러와서 사용하는 방법과 konlpy 라이브러리를 활용하여 Mecab을 사용하는 방법도 아래에 정리해놓았다. 주의할 점은 두 방법에서 Mecab을 지명하는 알파벳 대소문자가 조금씩 다르다는 것이다.


Installation

mecab-ko 설치

먼저 배포된 최신버전(포스트 작성 시점 기준: mecab-0.996-ko-0.9.2.tar.gz) mecab-ko를 여기에서 다운로드한다. 해당 파일은 본인이 사용하는 파이썬 환경이나 가상환경에 위치시킨다. 나 같은 경우는 tf2라는 virtualenv 가상환경을 사용하는데, tf2/bin 경로에 압축파일을 두었다. 해당 파일이 있는 경로로 가서 직접 파일을 압축해제하거나, 터미널에서 해당 경로로 가서 tar xzvf mecab-0.996-ko-0.9.2.tar.gz를 터미널에 쳐서 압축해제 한다. 이 후, 아래 코드를 입력하여 설치를 완료한다.

cd mecab-0.996-ko-0.9.2
./configure
make
sudo make install

mecab-dic 설치

먼저 배포된 최신버전(포스트 작성 시점 기준: mecab-ko-dic-2.1.1-20180720.tar.gz) mecab-ko를 여기에서 다운로드한다. 위 mecab-ko를 설치했던 방법과 동일하다. 해당 파일이 있는 경로로 가서 직접 파일을 압축해제하거나, 터미널에서 해당 경로로 가서 tar xvfz mecab-ko-dic-2.1.1-20180720.tar.gz를 터미널에 쳐서 압축해제 한다. 이 후, 아래 코드를 입력하여 설치를 완료한다.

cd mecab-ko-dic-2.1.1-20180720
./configure
make
sudo make install

mecab-python 설치

아래 코드를 입력하여 git에서 소스코드를 내려받아 설치를 완료한다.

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

Usage

직접 MeCab 불러와서 사용

import Mecab
m = MeCab.Tagger()
te = m.parse('아버지가방에들어가신다')
print(te)

konlpy 라이브러리 사용

from konlpy.tag import Mecab
tokenizer = Mecab()
print(tokenizer.morphs('아버지가방에들어가신다'))

Mecab의 사용자사전 추가하기

nnp.csv 파일에 직접 추가하기

mecab-dic을 설치할 때, 만들어진 mecab-ko-dic-2.1.1-20180720 폴더로 들어가면, user-dic 폴더가 있다. user-dic 폴더 안에는 nnp.csv, person.csv, place.csv 파일이 있는데, 목적에 따라 하나의 파일을 선택하여 단어를 추가하면 된다. 고유명사는 nnp.csv, 인명은 person.csv, 지명인 경우 place.csv이다. 그 외 품사의 경우, mecab-ko-dic의 품사태그표를 참고하여 csv 파일을 만들면 되는 것 같다. 텍스트 편집기로 nnp.csv 파일을 열면 아래와 같이 나온다.

대우,,,,NNP,*,F,대우,*,*,*,*,*
구글,,,,NNP,*,T,구글,*,*,*,*,*

nnp.csv 파일에 예시와 똑같은 형식으로 본인이 추가하고 싶은 단어를 줄바꿈하여 추가하여 저장한다. 형식은 (단어),,,,(품사태그),(의미분류),(종성유무),(읽기),(타입),(첫번째품사),(마지막품사),(원형),(인덱스표현)이다. 종성유무는 종성이 있을 경우 T, 없을 경우 F이다. 이외는 아래 링크 - 사전형식v1.6에서 그 정의를 확인할 수 있다. 아래는 프렌치팝이라는 고유명사를 추가한 것이다.

대우,,,,NNP,*,F,대우,*,*,*,*,*
구글,,,,NNP,*,T,구글,*,*,*,*,*
프렌치팝,,,,NNP,*,T,프렌치팝,*,*,*,*,*

사전 컴파일

위에서 사전에 단어를 추가하는 과정 후에, 컴파일하는 과정을 거쳐야 한다. mecab-ko-dic-2.1.1-20180720 폴더의 디렉토리로 이동하고, 컴파일 명령어를 치면 완료된다. 이는 아래 코드로 구현 가능하다.

cd ./mecab-ko-dic-2.1.1-20180720
./tools/add-userdic.sh
make install

이제 Mecab을 불러와서 쓸 때, 프렌치팝은 고유명사로 태깅된다.

컴파일 시, Mac OS에서 나타나는 오류

./mecab-ko-dic-2.1.1-20180720/tools/add-userdic.sh을 터미널에 치면 ls: *.csv: No such file or directory라고 경로를 못 찾는다는 에러가 뜰 수 있다. 이 문제는 다음과 같은 이유로 발생할 수 있다고 한다.

  • add-userdic.sh 스크립트 내에서 실행되는 readlink가 Mac OS에서 일반적인 Linux와 동작이 다르다.
  • 따라서, 변수 경로 등이 꼬여서 나타나는 에러로 보인다.

해결 방법은 아래와 같다. 먼저 brew를 이용해서 coreutils를 설치한다.

brew install coreutils

이 후에, tools/add-userdic.sh 파일을 vi로 연다.

vi ./tools/add-userdic.sh

상단 코드를 읽다보면, 아래와 같은 코드를 찾을 수 있다. 여기서 readlink를 g만 앞에 추가해서 greadlink로 변경하여 저장해주면 된다. 참고로, vi로 열고 i를 치면 수정모드가 되고, greadlink로 변경 후 esc를 치고 :wq를 하면 저장하고 파일에서 나온다. 수정코드

다시 tools/add-userdic.sh를 실행하면 오류없이 진행되는 것을 확인할 수 있다.

make install 시, 나타날 수 있는 오류

만약 사전 컴파일 이후, make install에서 permission denied 오류가 난다면 아래 코드로 해결할 수 있다. make install의 권한을 해제하는 코드인데, 해당 코드를 작성하면 권한 오류가 나타나지 않는다.

make install DESTDIR=/tmp/myinst/
sudo cp -va /tmp/myinst/ /

참고: 은닢한전의 user-dic 관련 instruction