MeCab을 이용한 한글 형태소 분석


한글 형태소 분석을 할려고 이것 저것 알아보다가 도달한 결론이 MeCab이란 일본에서 만든 형태소 분석기를 알게 되었다.

1. Ubuntu

1.1 설치

add-apt-repository ppa:tsuchiya/mecab 
apt-get install mecab 
apt-get install libcurl4-openssl-dev
mecab -v # 설치 잘 되었는지 확인하기 위해서

우분투 12에서 최신버전은 0.98 우분투 14.04L 에서는 0.996이 최신버전으로 설치되었다.

1.2 파일들

실행: /usr/bin/mecab /usr/lib/mecab => 다른 실행파일들 설정: /usr/local/etc/mecabrc 로그: 사전: /usr/share/mecab/dic/ipadic /usr/share/mecab/dic/juman

1.3 설정 파일

;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir =  /usr/local/lib/mecab/dic/ipadic
;dicdir = /usr/share/mecab/dic/kdic/final
dicdir = /usr/local/lib/mecab/dic/mecab-ko-dic
; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

/etc/mecabrc => 우분투에서 설정파일은 여깃다.

1.4 명령어

mecab
mecab -v 

2. Mac OS X

2.0 Update homebrew

brew update cd $(brew --prefix) git fetch origin git reset --hard origin/master brew update brew upgrade nginx brew --version

2.1 Installation

brew install mecab brew install mecab-ipadic

mecab -v # 설치 잘 되었나 확인하기 위해서

2.2 파일들

실행: /usr/local/bin/mecab symlinked to /usr/local/Cellar/mecab/0.994/bin/mecab 설정: /usr/local/etc/mecabrc 로그: 사전: /usr/local/Cellar/mecab/0.994/lib/mecab/dic/ipadic /usr/local/Cellar/mecab/0.994/lib/mecab/dic/kdic /usr/local/Cellar/mecab/0.994/lib/mecab/dic/

2.3 사전파일

[email protected] /usr/local/Cellar/mecab/0.994/lib/mecab/dic $ unzip mecab-ko-dic.zip Archive: mecab-ko-dic.zip creating: mecab-ko-dic/ inflating: mecab-ko-dic/model.bin inflating: mecab-ko-dic/matrix.bin inflating: mecab-ko-dic/char.bin inflating: mecab-ko-dic/sys.dic inflating: mecab-ko-dic/unk.dic inflating: mecab-ko-dic/left-id.def inflating: mecab-ko-dic/right-id.def inflating: mecab-ko-dic/rewrite.def inflating: mecab-ko-dic/pos-id.def inflating: mecab-ko-dic/dicrc

3. ruby랑 엮기

그 다음에 루비랑 엮기위해서는 루비 바인딩이 필요한데 이를 위해서는 Natto라는 gem이 필요하다.

Gemfile에 natto 추가하고 bundle install해주면 된다.

gem 'natto'

4. 한글 사전

4.1 cogniti

한글 형태소 분석을 하려면 한글사전이 필요하다. 공개로 구할 수 있는 것은 cogniti님이 github에서 돌리신 mecab-kdic이 있다. 이거 가지고 해보자. 먼저 github에서 git clone해온다.

git clone http://github.com/cogniti/mecab-kdic.git

프로젝트 루트에서 make하면 사전파일이 만들어지는 구조이다.

개별적으로 환경이 맞지 않아서 수정해 줘야할 부분이 있는데, 내 경우에는 파일 2개 손대야 헸다. seed/Makefile하고 final/Makefile하고, 사전을 만들기 위해서는 mecab에서 제공하는 3개의 실행파일이 필요한데 그 경로를 잘 지정해줘야한다.

[email protected] ~/_tmp/mecab-kdic $ cat seed/Makefile 
all:
  /usr/local/Cellar/mecab/0.994/libexec/mecab/mecab-dict-index -p -d . -c UTF-8 -t UTF-8 -f UTF-8
  /usr/local/Cellar/mecab/0.994/libexec/mecab/mecab-cost-train -c 1.0 corpus model
  /usr/local/Cellar/mecab/0.994/libexec/mecab/mecab-dict-gen -o ../final -m model

clean: rm -f *.dic *.bin model model.txt pos-id.def kdic.csv

Makefile은 이렇게 생겼다.

[email protected] ~/_tmp/mecab-kdic $ cat final/Makefile 
all:
  /usr/local/Cellar/mecab/0.994/libexec/mecab/mecab-dict-index -d . -c UTF-8 -t UTF-8 -f UTF-8

clean:
  rm -f *.dic *.bin *.def *.csv dicrc model model.txt

설정 잘 맞추고 make잘 하면 final디렉토리에 파일들이 생긴다.

최종적으로 필요한 사전파일은 다음과 같다.

char.bin
dicrc
left-id.def
matrix.binc
pos-id.def
rewrite.def
right-id.def
sys.dic
unk.dic

맥의 경우에 사전파일들의 위치는 다음이므로.. kdic이라는 디랙토리를 하나 만들어주고 만들어진 바이너리들을 symlink로 연결해줫다.

/usr/local/Cellar/mecab/0.994/lib/mecab/dic/kdic

lrwxr-xr-x   1 kjune  admin   43 Dec 10 17:31 char.bin -> /Users/kjune/_tmp/mecab-kdic/final/char.bin
lrwxr-xr-x   1 kjune  admin   40 Dec 10 17:30 dicrc -> /Users/kjune/_tmp/mecab-kdic/final/dicrc
lrwxr-xr-x   1 kjune  admin   46 Dec 10 17:31 left-id.def -> /Users/kjune/_tmp/mecab-kdic/final/left-id.def
lrwxr-xr-x   1 kjune  admin   45 Dec 10 17:32 matrix.bin -> /Users/kjune/_tmp/mecab-kdic/final/matrix.bin
lrwxr-xr-x   1 kjune  admin   45 Dec 10 17:32 pos-id.def -> /Users/kjune/_tmp/mecab-kdic/final/pos-id.def
lrwxr-xr-x   1 kjune  admin   46 Dec 10 17:32 rewrite.def -> /Users/kjune/_tmp/mecab-kdic/final/rewrite.def
lrwxr-xr-x   1 kjune  admin   47 Dec 10 17:32 right-id.def -> /Users/kjune/_tmp/mecab-kdic/final/right-id.def
lrwxr-xr-x   1 kjune  admin   42 Dec 10 17:23 sys.dic -> /Users/kjune/_tmp/mecab-kdic/final/sys.dic
lrwxr-xr-x   1 kjune  admin   42 Dec 10 17:30 unk.dic -> /Users/kjune/_tmp/mecab-kdic/final/unk.dic

여러사전 중에서 어떤 사전을 선택할까는 mecabrc에서 정한다.

-rw-r--r--   1 kjune  admin  373 Dec 10 17:57 mecabrc
[email protected] /usr/local/Cellar/mecab/0.994/etc $ cat mecabrc 
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir =  /usr/local/Cellar/mecab/0.994/lib/mecab/dic/ipadic
dicdir = /usr/local/Cellar/mecab/0.994/lib/mecab/dic/kdic

; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

소스부터 다시 빌드하기

mecab-kdic 사전 만들다가 에러나서 소스로 부터 다시 빌드ㅎ하고 있다. 최신버전 0.994

sudo apt-get install mecab mecab-utils mecab-naist-jdic mecab-ipadic-utf8 mecab-jumandic-utf8 libmecab-java libmecab-jni python-mecab libmecab-ruby1.9.1

소스로 빌드하기 ubuntu 12.04 LT에서

4.2 은전한닢 프로젝트

검색에 쓸만한 오픈소스 한국어 형태소 분석기 http://eunjeon.blogspot.ca/2013/02/blog-post.html

4.2.1 mecab 용 한글 사전 설치하기

1) 먼저 mecab-ko-dic 파일을 다운로드 받는다. https://bitbucket.org/eunjeon/mecab-ko-dic/downloads

다운로드 받은 소스를 풀어서 build한다.

wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-1.6.1-20140814.tar.gz
tar zxfv mecab-ko-dic-XX.tar.gz
$ cd mecab-ko-dic-XX
$ ./autogen.sh
$ configure
$ make
$ su
# make install

문제점 => configure하는데서 에러가 났다.

checking for mecab-config... no
configure: error: mecab-config is not found in your system

해결책

apt-get install libmecab-config

다시 시작하니 설치가 잘 되었다. 마지막에는 다음과 같은 메시지가 나온다.

echo To enable dictionary, rewrite /etc/mecabrc as \"dicdir = /usr/lib/mecab/dic/mecab-ko-dic\"
To enable dictionary, rewrite /etc/mecabrc as "dicdir = /usr/lib/mecab/dic/mecab-ko-dic"
[email protected]:~/tmp/mecab-ko-dic-1.6.1-20140814# cd /usr/lib

마지막으로 make install을 하면 파일들이 다음 디렉토리로 설치된다.

[email protected]:/usr/lib/mecab/dic# cd mecab-ko-dic/
[email protected]:/usr/lib/mecab/dic/mecab-ko-dic# ll
total 120224
drwxr-xr-x 2 root root     4096 Feb 24 21:33 ./
drwxr-xr-x 3 root root     4096 Feb 24 21:33 ../
-rw-r--r-- 1 root root   262560 Feb 24 21:33 char.bin
-rw-r--r-- 1 root root     1421 Feb 24 21:33 dicrc
-rw-r--r-- 1 root root    81685 Feb 24 21:33 left-id.def
-rw-r--r-- 1 root root 20548480 Feb 24 21:33 matrix.bin
-rw-r--r-- 1 root root  9800884 Feb 24 21:33 model.bin
-rw-r--r-- 1 root root     1680 Feb 24 21:33 pos-id.def
-rw-r--r-- 1 root root     2540 Feb 24 21:33 rewrite.def
-rw-r--r-- 1 root root   121997 Feb 24 21:33 right-id.def
-rw-r--r-- 1 root root 92257020 Feb 24 21:33 sys.dic
-rw-r--r-- 1 root root     4196 Feb 24 21:33 unk.dic

이제 설치된 mecab에 맞춰서 mecabrc파일에 다음 내용을 추가한다.

/etc/mecabrc
dicdir = /usr/lib/mecab/dic/mecab-ko-dic

잘 설치되었나 확인하기

[email protected]:~# mecab
오늘은 날씨가 맑다.
오늘    NNG,*,T,오늘,*,*,*,*,*
은      JX,*,T,은,*,*,*,*,*
날씨    NNG,*,F,날씨,*,*,*,*,*
가      JKS,*,F,가,*,*,*,*,*
맑      VA,*,T,맑,*,*,*,*,*
다      EF,*,F,다,*,*,*,*,*
.       SF,*,*,*,*,*,*,*,*
EOS
^C

4.2.2 한글 사전용 mecab의 fork 설치하기

은전한닢 프로젝트에서 mecab을 fork한 버전을 배포하기 시작했다. 0.996 기반으로 한국어 특성에 맞는 기능을 추가했다고 한다.

wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.1.tar.gz
tar xvfz mecab-0.996-ko-0.9.1.tar.gz
cd mecab-XX-ko-XX
./configure 
make
make check
su
make install

이러면 다음 파일들이 설치된다.

/usr/local/bin/mecab
/usr/local/bin/mecab-config
/usr/local/etc/mecabrc

이걸로 빌드를 하니까 사전 파일이 다른 디렉토리에 생긴다.

/usr/local/lib/mecab/dic/mecab-ko-dic

5. 결론

ubuntu랑 mac환경에서 mecab 설치하고 사전 설치하는 과정을 해봤는데, 현 시점에서는 은전한닢 프로젝트의 결과물을 가져와서 개발하는 것이 가장 안정적인 것으로 판단된다.