Ubuntu 18.04 konlpy & mecab install

newbie·2021년 9월 11일
0

ETC

목록 보기
3/3
post-custom-banner

해당 내용은 현재 boostcampAI 2기를 같이 수강생분과 아래 링크를 참고하였으며, 참고 링크대로 진행하다가 발생한 문제를 추가로 기입하여 재작성한 내용입니다.

ssh server (저는 Ai stages server) 기준으로 작성


Ubuntu 버전 확인

> cat /etc/issue
Ubuntu 18.04.5 LTS \n \l


1. JDK 설치

  • apt를 사용하여 jdk와 python-dev, python3-dev를 설치
  • JDK는 무난하게 1.8 버전을 설치

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#

상기와 같이 출력되었으면 완료입니다.


2. 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 종료하고,
이후 다시 실행하여 정상적으로 출력되는지 확인합니다.


3. Mecab 설치

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 를 뱉습니다.


4. libmecab.so.2 링크 생성

이제부터 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

저는 마지막 명령어 쳤을 때 아무것도 나오지 않아서 뒤에서 에러가 났는데요
계속 진행하시다 보면 저부분도 해결하는 방법이 나옵니다.


5. 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

configure: error: Your compiler is not powerful enough to compile MeCab. 에러 메시지가 뜨면 명령어 실행해줍니다.

>apt install g++

이 때, make 명령어 실행이 안되는 경우 아래 명령어 실행하면 돌아갑니다.

>apt-get install build-essential


6. 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
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')]
이러면 끝!

profile
DL, NLP Engineer to be....
post-custom-banner

0개의 댓글