Mecab 형태소 분석기를 이용해 보기 위해서, Ubuntu 환경에서 konlpy 와 Mecab-ko 설치를 진행해 보았다.
http://konlpy.org/ko/latest/install/ 의 가이드를 따라 mecab 설치까지 진행하였으나, mecab 은 구동되지만, Mecab 클래스 인스턴스를 만드는 부분에서 mecab 설치가 안 되었다는 에러가 발생했다.
환경은 Ubuntu 18.x 이고, 다른 파이썬 패키지와의 꼬임을 방지하기 위해서, python3 venv 를 이용해 가상환경(virtual env)를 따로 만들어 진행했다. 문제는 가이드에서 제공하는 스크립트는 가상환경에 대한 고려가 되어 있지 않았기 때문에, 가상환경에 수동으로 추가적으로 패키지를 깔아주어야 했던 것이다.
진행한 순서는 다음과 같다.
openjdk-8-sdk , g++, python3-dev 등을 apt install 로 설치한다.
python3 -m venv nlp36 : nlp36 이란 이름의 가상환경을 만든다.
source Venvs/nlp36/bin/activate : nlp36 환경에 들어간다.
pip install konlpy : konlpy 를 설치한다.
$ bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh) : 스크립트를 실행한다. 스크립트는 mecab-ko, mecab-ko-dic, mecab-python 을 설치한다.
이것을 진행하고서, python 을 실행하고 간단한 형태소 분석을 진행하려 하였다.
(nlp36) daewon@daewon-VirtualBox:~/Venvs$ python
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 "/home/daewon/Venvs/nlp36/lib/python3.6/site-packages/konlpy/tag/_mecab.py", line 107, in __init__
self.tagger = Tagger('-d %s' % dicpath)
NameError: name 'Tagger' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/daewon/Venvs/nlp36/lib/python3.6/site-packages/konlpy/tag/_mecab.py", line 112, in __init__
raise Exception('Install MeCab in order to use it: http://konlpy.org/en/latest/install/')
Exception: Install MeCab in order to use it: http://konlpy.org/en/latest/install/
위와 같이 Mecab() 부분에서 에러가 발생한다. konlpy 까지만 설치했을 때와 동일한 에러 메시지이다. 분명 mecab 까지 설치했고, 셸에서도 mecab 명령으로, 설치된 단독 mecab 이 잘 동작하는 것까지 확인할 수 있는데 이상하다.
그래서,
https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh
이 스크립트에서 무슨 짓을 하는지 살펴보면, 마지막에 mecab-python 설치 부분이 다음과 같다.
# install mecab-python
cd /tmp
git clone https://bitbucket.org/eunjeon/mecab-python-0.996.git
cd mecab-python-0.996
python setup.py build
$sudo python setup.py install
if hash "python3" &>/dev/null
then
python3 setup.py build
$sudo python3 setup.py install
fi
/tmp 폴더에 bitbucket.org 에서 mecab-python-0.996 소스를 복제해 온다.
소스를 빌드하고, python setup.py install 명령으로 설치를 한다.
그런데, 이 때 진행되었던 메시지 마지막 부분을 보면 다음과 같았다.
running build_ext
running install_lib
copying build/lib.linux-x86_64-3.6/MeCab.py -> /usr/local/lib/python3.6/dist-packages
copying build/lib.linux-x86_64-3.6/_MeCab.cpython-36m-x86_64-linux-gnu.so -> /usr/local/lib/python3.6/dist-packages
byte-compiling /usr/local/lib/python3.6/dist-packages/MeCab.py to MeCab.cpython-36.pyc
running install_egg_info
Removing /usr/local/lib/python3.6/dist-packages/mecab_python-0.996_ko_0.9.2.egg-info
Writing /usr/local/lib/python3.6/dist-packages/mecab_python-0.996_ko_0.9.2.egg-info
즉 해당 명령으로는 내가 만들어 놓은 가상환경에 설치된 것이 아니라, /usr/local/lib/python3.6 즉 시스템의 기본 python3 에 설치가 된 것이다. 그래서, (nlp36) 환경의 python 에서는 에러가 발생한 것.
그래서, 가상환경이 activate 된 상태로, tmp 폴더로 가서, 복제되어 있는 폴더로 찾아가서, python setup.py install 을 실행하여 (nlp36) 가상환경에도 설치를 진행하여 문제를 해결했다.
(nlp36) daewon@daewon-VirtualBox:/tmp$ cd mecab-python-0.996/
(nlp36) daewon@daewon-VirtualBox:/tmp/mecab-python-0.996$ ls -l
total 368
-rw-r--r-- 1 daewon daewon 28 12월 6 16:57 AUTHORS
-rw-r--r-- 1 daewon daewon 1602 12월 6 16:57 BSD
-rw-r--r-- 1 daewon daewon 240 12월 6 16:57 COPYING
-rw-r--r-- 1 daewon daewon 18009 12월 6 16:57 GPL
-rw-r--r-- 1 daewon daewon 26428 12월 6 16:57 LGPL
-rw-r--r-- 1 daewon daewon 15733 12월 6 16:57 MeCab.py
-rw-r--r-- 1 daewon daewon 264856 12월 6 16:57 MeCab_wrap.cxx
-rw-r--r-- 1 daewon daewon 353 12월 6 16:57 README
-rw-r--r-- 1 daewon daewon 1212 12월 6 16:57 README.md
-rw-r--r-- 1 daewon daewon 9473 12월 6 16:57 bindings.html
drwxr-xr-x 6 daewon daewon 4096 12월 6 16:57 build
-rw-r--r-- 1 daewon daewon 503 12월 6 16:57 setup.py
-rw-r--r-- 1 daewon daewon 1205 12월 6 16:57 test.py
(nlp36) daewon@daewon-VirtualBox:/tmp/mecab-python-0.996$ 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.py -> /home/daewon/Venvs/nlp36/lib/python3.6/site-packages
copying build/lib.linux-x86_64-3.6/_MeCab.cpython-36m-x86_64-linux-gnu.so -> /home/daewon/Venvs/nlp36/lib/python3.6/site-packages
byte-compiling /home/daewon/Venvs/nlp36/lib/python3.6/site-packages/MeCab.py to MeCab.cpython-36.pyc
running install_egg_info
Writing /home/daewon/Venvs/nlp36/lib/python3.6/site-packages/mecab_python-0.996_ko_0.9.2.egg-info
(nlp36) daewon@daewon-VirtualBox:/tmp/mecab-python-0.996$ python
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('안녕하세요.')
[('안녕', 'NNG'), ('하', 'XSV'), ('세요', 'EP+EF'), ('.', 'SF')]
>>>
'프로그래밍 > Python' 카테고리의 다른 글
[Anaconda] jupyter notebook 500 internal error (4) | 2019.03.15 |
---|---|
PIP 수동으로 설치하기 (0) | 2019.02.13 |
[Python|Numpy|Matplotlib] 푸리에 시리즈 사각파 (0) | 2018.12.06 |
[Python] 이항분포 그래프 그리기 (0) | 2018.11.15 |
[Python] pandas read_csv issue regarding non-ascii filename (0) | 2018.11.08 |