어서와, 개발은 처음이지?

[처음부터 시작하는 EC2] konlpy, mecab 설치하기(ubuntu) 본문

EC2_Ubuntu_Devops

[처음부터 시작하는 EC2] konlpy, mecab 설치하기(ubuntu)

오지고지리고알파고포켓몬고 2019. 3. 17. 23:18
반응형



이번 글에서는 EC2 ubuntu에서 파이썬의 형태소 분석기 패키지인 konlpy를 사용할 수 있도록 konlpy와 mecab을 설치해보겠습니다.


1. JDK 설치


konlpy를 사용하기 위해서는 JDK 설치가 선행되어야 합니다. 또한 python-dev python3-dev을 설치해야합니다. (제 이전 글을 보고 파이썬 환경을 구축하신 분들은 jdk만 설치하시면 되겠습니다.)


apt를 사용하여 jdk와 python-dev python3-dev를 설치합니다.

jdk는 무난하게 1.8 버전을 설치하겠습니다.

> sudo apt-get install openjdk-8-jdk python-dev python3-dev


설치가 끝났다면 java 버전을 확인하여 jdk가 정상적으로 설치되었는지 테스트해봅니다.

> java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)



2. KoNLPy 설치


이어서 konlpy를 설치합니다.

우선 전역환경에서 사용할 수 있도록 sudo 권한을 사용하여 설치하겠습니다.

> sudo pip3 install konlpy jpype1-py3

설치가 완료되었다면 파이썬에서 konlpy 패키지를 사용할 수 있는지 확인해봅니다.

> python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

> from konlpy.tag import Twitter
> t = Twitter()
/usr/local/lib/python3.6/dist-packages/konlpy/tag/_okt.py:16: UserWarning: "Twitter" has changed to "Okt" since KoNLPy v0.4.5.
  warn('"Twitter" has changed to "Okt" since KoNLPy v0.4.5.')

> t.pos("안녕 또막아")
[('안녕', 'Noun'), ('또', 'Noun'), ('막아', 'Verb')]

중간에 경고메세지가 나오는데, KoNLPy 0.4.5 버전부터는 Twitter 패키지 이름이 Okt로 바뀌었다고 하는군요.

지금은 크게 신경쓸 필요 없습니다.


pos 함수에 문장을 넣었을 때 잘 동작하는 모습을 볼 수 있습니다.




3. Mecab 설치


konlpy를 설치했다고 해서 mecab을 바로 사용할 수 없습니다.

현재 상태에서 mecab 객체를 생성하면 아래와 같은 에러 메세지를 뱉어냅니다. 퉤!

> python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

> from konlpy.tag import Mecab
> m = Mecab()
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/konlpy/tag/_mecab.py", line 107, in __init__
    self.tagger = Tagger('-d %s' % dicpath)
NameError: name 'Tagger' is not defined

NameError: name 'Tagger' is not defined ... 아주 지독한 녀석이죠..

mecab 때문에 삽을 많이 푸었었고, 아마 여러분이 이 글을 보고계신 이유도 마찬가지가 아닐까 짐작해봅니다.


일단 konlpy 공식문서에는 mecab을 사용하고 싶으면 아래 명령을 실행하라고 나와있습니다.

> bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)

명령을 실행하면 뭐가 주르르르르르르륵 나오지만, 여전히 NameError: name 'Tagger' is not defined 를 뱉습니다.




4. libmecab.so.2 링크 생성


이제부터 mecab을 손수 설치해봅니다.

위 명령을 실행했다면 /tmp 경로에 mecab과 관련된 파일들이 위치하게 됩니다.


우선 /tmp 경로로 이동해서 뭣이 있는지 살펴봅니다.

> cd /tmp
> ls
mecab-0.996-ko-0.9.2
mecab-0.996-ko-0.9.2.tar.gz
mecab-ko-dic-2.1.1-20180720
mecab-ko-dic-2.1.1-20180720.tar.gz
mecab-python-0.996
mongodb-27017.sock
npm-6793-857b0999

이런저런 친구들이 나오는데, mecab-0.996-ko-0.9.2와 mecab-ko-dic-2.1.1-20180720이 없다면 /tmp 경로에서 아래 명령을 따라 다운받아줍니다.

> curl -LO https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz > tar zxfv mecab-0.996-ko-0.9.2.tar.gz > curl -LO https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz > tar -zxvf mecab-ko-dic-2.1.1-20180720.tar.gz

mecab 사전(mecab-ko-dic)의 버전은 이 곳에서 확인할 수 있습니다.


다음은 mecab-ko-dic-2.1.1-20180720 경로로 이동하여 아래 명령을 실행합니다.

> /tmp/mecab-ko-dic-2.1.1-20180720
> sudo ldconfig
> ldconfig -p | grep /usr/local/lib
	libmecab.so.2 (libc6,x86-64) => /usr/local/lib/libmecab.so.2
	libmecab.so (libc6,x86-64) => /usr/local/lib/libmecab.so



5. mecab-ko 설치


다음으로 mecab-ko를 설치합니다.

우선 mecab-0.996-ko-0.9.2 경로로 이동하여 아래 명령을 수행합니다.

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

스무~스하게 진행됩니다.




6. mecab-ko-dic 설치


다음으로 mecab-ko-dic을 설치합시다.

mecab-ko-dic-2.1.1-20180720 경로로 이동하여 아래 명령을 수행합니다.

> cd /tmp/mecab-ko-dic-2.1.1-20180720
> ./autogen.sh
> ./configure
> make
> sudo make install

이제 모든 준비가 완료되었습니다.



7. mecab 써보기


다시 파이썬을 실행해서 mecab 객체를 생성해봅니다.

> python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

> from konlpy.tag import Mecab
> m = Mecab()
> m.pos("안녕 또막아")
[('안녕', 'IC'), ('또', 'MAG'), ('막', 'VV'), ('아', 'EC')]

이번엔 아주 잘 되네요!




8. (뽀~나스) 가상환경에서 mecab 사용하기


우선 가상환경(virtual env)을 실행하고, konlpy를 설치합니다.

가상환경 생성 방법을 모르신다면 [처음부터 시작하는 EC2] django 프로젝트 생성의 1번 인덱스를 참고하세요.

> source ./myvenv/bin/activate
(myvenv) > pip install konlpy

가상환경에서는 sudo 권한으로 실행하지 않는 점을 유의하세요.


konlpy 설치 후 mecab을 사용하려하면, 다시 NameError: name 'Tagger' is not defined 이 녀석을 볼 수 있습니다.

(myvenv) > python
> from konlpy.tag import Mecab
> m = Mecab()

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/konlpy/tag/_mecab.py", line 107, in __init__
    self.tagger = Tagger('-d %s' % dicpath)
NameError: name 'Tagger' is not defined

> exit()

이럴 땐 가상환경 상태에서 /tmp로 이동하여 아래 명령을 실행 해줍니다. 

(myvenv) > cd /tmp
(myvenv) > cd mecab-python-0.996
(myvenv) > python setup.py build
running build
running build_py
running build_ext

(myvenv) > python setup.py install
running install
running build
running build_py
running build_ext
running install_lib
copying build/lib.linux-x86_64-3.6/_MeCab.cpython-36m-x86_64-linux-gnu.so -> /home/ubuntu/app/django/firstproject/myvenv/lib/python3.6/site-packages
copying build/lib.linux-x86_64-3.6/MeCab.py -> /home/ubuntu/app/django/firstproject/myvenv/lib/python3.6/site-packages
byte-compiling /home/ubuntu/app/django/firstproject/myvenv/lib/python3.6/site-packages/MeCab.py to MeCab.cpython-36.pyc
running install_egg_info
Writing /home/ubuntu/app/django/firstproject/myvenv/lib/python3.6/site-packages/mecab_python-0.996_ko_0.9.2.egg-info

mecab 관련된 것들이 가상환경 패키지 아래에 복사되어집니다.


이제 다시 mecab 객체를 사용해봅니다.

(myvenv) > python
> from konlpy.tag import Mecab
> m = Mecab()
> m.pos("일등이 아니여도 괜찮아")
[('일등', 'NNG'), ('이', 'JKC'), ('아니', 'VCN'), ('여도', 'EC'), ('괜찮', 'VA'), ('아', 'EC')]

정상적으로 실행되는 모습을 볼 수 있습니다.



9. 마치며


mecab 설치에 시행착오를 거친 결과, 권한에 대한 문제가 까다롭게 작용했던 것 같습니다.

제 경우는 python과 python3, pip와 pip3 명령을 구분하였고, 가상환경은 python3로만 설정하였기 때문에 python 명령으로 통일이 되어있던 점을 유의해주시고, sudo 권한이 필요한 부분 또한 유의해주시면 좋을 것 같습니다.


이외에 설치 과정에서 다른 문제가 발생하면 댓글로 남겨주세요~


이곳 저곳에서 삽질했던 내용을 토대로 최대한 답변을 드리도록 하겠습니다!






Comments