해당 내용은 현재 boostcampAI 2기를 같이 수강생분과 아래 링크를 참고하였으며, 참고 링크대로 진행하다가 발생한 문제를 추가로 기입하여 재작성한 내용입니다.
ssh server (저는 Ai stages server) 기준으로 작성
> cat /etc/issue
Ubuntu 18.04.5 LTS \n \l
apt-get install openjdk-8-jdk python-dev python3-dev
설치가 끝났으면 java 버전을 확인하여 jdk가 정상적으로 설치되었는지 테스트합니다.
> java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~18.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
root@27affec2fc2b:/opt/conda/lib/python3.8/site-packages/konlpy#
상기와 같이 출력되었으면 완료입니다.
konlpy 설치 및 테스트를 진행합니다.
pip install konlpy jpype1-py3
> python
Python 3.8.5 (default, Sep 4 2020, 07:30:14)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.> from konlpy.tag import Okt
> okt = Okt()
> okt.pos("안녕 친구야")
[('안녕', 'Noun'), ('친구', 'Noun'), ('야', 'Josa')]
잘 출력이 되면 <3. Mecab 설치>를 진행하고,
Okt() 실행 시 아래와 같이 error 메세지가 출력이 되면 추가로 진행합니다.
> Okt()
Traceback (most recent call last):
File "", line 1, in
File "/opt/conda/lib/python3.8/site-packages/konlpy/tag/_okt.py", line 91, in init
jvm.init_jvm(jvmpath, max_heap_size)
File "/opt/conda/lib/python3.8/site-packages/konlpy/jvm.py", line 64, in init_jvm
jpype.startJVM(jvmpath, '-Djava.class.path=%s' % classpath,
TypeError: startJVM() got an unexpected keyword argument 'convertStrings'
터미널에서 vi /opt/conda/lib/python3.8/site-packages/konlpy/jvm.py 실행하여
아래 converStrings=True를 # converStrings=True과 같이 주석표시를 합니다.
주석 표시를 했으면 esc 클릭 후 :wq를 입력하여 vi 종료하고,
이후 다시 실행하여 정상적으로 출력되는지 확인합니다.
konlpy를 설치했다고 해서 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
일단 konlpy 공식문서에는 mecab을 사용하고 싶으면 아래 명령을 실행하라고 나와있습니다.
>bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
여전히 NameError: name 'Tagger' is not defined 를 뱉습니다.
이제부터 mecab을 손수 설치해봅니다.
위 명령을 실행했다면 /tmp 경로에 mecab과 관련된 파일들이 위치하게 됩니다.
만약 /tmp 경로에 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
curl command not found 시 아래 명령어 실행해줍니다.
> apt install curl
다음은 mecab-ko-dic-2.1.1-20180720 경로로 이동하여 아래 명령을 실행합니다.
> cd /tmp/mecab-ko-dic-2.1.1-20180720
> 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
저는 마지막 명령어 쳤을 때 아무것도 나오지 않아서 뒤에서 에러가 났는데요
계속 진행하시다 보면 저부분도 해결하는 방법이 나옵니다.
우선 mecab-0.996-ko-0.9.2 경로로 이동하여 아래 명령을 수행합니다.
> cd /tmp/mecab-0.996-ko-0.9.2
> ./configure
> make
> make check
> $sudo make install
configure: error: Your compiler is not powerful enough to compile MeCab. 에러 메시지가 뜨면 명령어 실행해줍니다.
>apt install g++
이 때, make 명령어 실행이 안되는 경우 아래 명령어 실행하면 돌아갑니다.
>apt-get install build-essential
mecab-ko-dic-2.1.1-20180720 경로로 이동하여 아래 명령을 수행합니다.
> cd /tmp/mecab-ko-dic-2.1.1-20180720
> ./autogen.sh
> ./configure
> make
> sudo make install
Looking in current directory for macros.
./autogen.sh: 11: ./autogen.sh: aclocal: not found
./autogen.sh: 14: ./autogen.sh: autoconf: not found
./autogen.sh: 15: ./autogen.sh: automake: not found
이 에러가 나는 경우 아래 명령어 실행해줍니다.
> apt install automake libtool -y
만약 이 명령을 수행하는 도중 작업이 진행되지 않고 에러가 나온다면!!
libmecab.so.2가 있는지 확인하기
> ls /usr/local/lib/libmecab.so.2
/usr/local/lib/libmecab.so.2
ld.so.conf두 /usr/local/lib이상의 추가
vi /etc/ld.so.conf
수정 된 파일
include ld.so.conf.d/*.conf
/usr/local/lib
ld.so.conf 설정을 반영
ldconfig
마지막으로 mecab-python 을 설치해주자
pip install mecab-python3
python
Python 3.8.5 (default, Sep 4 2020, 07:30:14)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
from konlpy.tag import Mecab
m = Mecab()
m.pos('일등이 아니어도 괜찮아')
[('일등', 'NNG'), ('이', 'JKC'), ('아니', 'VCN'), ('어도', 'EC'), ('괜찮', 'VA'), ('아', 'EC')]
이러면 끝!