이번 포스팅에서는 Python의 대표적인 NLP툴인 Konlpy를 연동해보자.

포스팅의 환경은 linux(Ubuntu 16.04)이며, 공식 문서를 참조하였다.

$ sudo apt-get install g++ openjdk-8-jdk python-dev python3-dev
$ pip install JPype1 		# in Python 2.x
$ pip3 install JPype1-py3	# in Python 3.x

Konlpy를 설치/운용하기 위해서는 자바 설치환경과 python이 필요하다.

python2.x인지 python3.x인지는 선택에 따라 다르지만,

공식 문서대로 openjdk7버전으로 설치했을 때는 제대로 동작하지 않았다.

이후 Jpype를 설치하는데, 여기서 JAVA_HOME에 대해 자바 환경변수가 설정되어있지 않다면

...(생략)
NameError: name 'jpype' is not defined

이와 같은 에러를 보게 될 것이므로 꼭 설정해주길 바란다.

설정하는 명령어는 다음과 같다.

export JAVA_HOME=/usr/java/jdk버전/bin/java

이후 KoNLPy를 설치한다.

$ pip install konlpy        # Python 2.x
$ pip3 install konlpy       # Python 3.x

추가적으로 MeCab를 설치한다.

(원하지 않는다면 설치하지 않아도 무방하다. 하지만 공식문서 중 비교테이블

중에서 일반적으로 가장 성능이 낫다고 평가되는 것이 Mecab과 Twitter이다 )

$ sudo apt-get install curl
$ bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)

이후 다음 샘플 소스를 실행시켜서 Konlpy가 제대로 연동이 되었는지 확인가능하다.

# -*- coding: utf-8 -*-

import konlpy
import nltk

# POS tag a sentence
sentence = u'만 6세 이하의 초등학교 취학 전 자녀를 양육하기 위해서는'
words = konlpy.tag.Twitter().pos(sentence)

# Define a chunk grammar, or chunking rules, then chunk
grammar = """
NP: {<N.*>*<Suffix>?}   # Noun phrase
VP: {<V.*>*}            # Verb phrase
AP: {<A.*>*}            # Adjective phrase
"""
parser = nltk.RegexpParser(grammar)
chunks = parser.parse(words)
print("# Print whole tree")
print(chunks.pprint())

print("\n# Print noun phrases only")
for subtree in chunks.subtrees():
    if subtree.label()=='NP':
        print(' '.join((e[0] for e in list(subtree))))
        print(subtree.pprint())

# Display the chunk tree
chunks.draw()

다음 포스팅에서는 Custom Dictionary의 중요도와 실제 연동하는 작업을 진행해보겠다.