일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Python
- 변수
- Background
- 스코프
- 디자인
- Push
- 카카오
- EC2
- 배포
- graphql
- 자바스크립트
- NATIVE
- JS
- ubuntu
- navigation
- 네이티브
- 면접
- 네비게이션
- React
- 리액트
- 레이아웃
- JavaScript
- 후기
- Notification
- MongoDB
- AWS
- Express
- github
- scope
- 알림
- Today
- Total
어서와, 개발은 처음이지?
[처음부터 시작하는 EC2] konlpy, mecab 설치하기(ubuntu) 본문
이번 글에서는 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 권한이 필요한 부분 또한 유의해주시면 좋을 것 같습니다.
이외에 설치 과정에서 다른 문제가 발생하면 댓글로 남겨주세요~
이곳 저곳에서 삽질했던 내용을 토대로 최대한 답변을 드리도록 하겠습니다!
'EC2_Ubuntu_Devops' 카테고리의 다른 글
배포 프로세스 구성하기1 - commit 전 코드 검증 자동화 (0) | 2020.06.23 |
---|---|
vscode ftp로 원격접속, 코드 동기화 (9) | 2020.06.22 |
[처음부터 시작하는 EC2] 에디터로 원격접속 (0) | 2019.02.22 |
[처음부터 시작하는 EC2] nodejs 설치 (0) | 2019.02.06 |
[처음부터 시작하는 EC2] mongodb 계정 생성, 외부 접속 (6) | 2019.02.04 |