● KoNLPy란
KoNLPy는 한국어 정보처리를 위한 파이썬 패키지 입니다. 자연어처리(NLP)에서 형태소를 분리 (형태소 단위 토크나이징)하는 데이터 전처리가 필요한데 이때 한국어 데이터 전처리 를 할 때 많이 사용하는 패키지입니다.
텍스트를 형태소 단위로 분리하는 방법 중에는
1. 단어->품사 형태로 딕셔너리를 정의하고 이를 이용해 단어를 품사로 분리하는 방법. (딕셔너리가 동일해도 방법에 따라 형태소가 분리되는 결과가 다르다.) 2. 딕셔너리를 사용하지 않고 모델을 통해 학습시키는 방법. (어떤 품사인지까지 알 수 없고 문장에서 단어를 구별해내는 방법.)
이 있고 KoNLPy는 1번의 방법을 사용합니다. KoNLPy에는 총 5가지의 형태소 분석 방법을 제공하고 이는 Hannanum, Kkma, Komoran, Mecab, Okt(구 Twitter) 5가지 클래스로 제공됩니다.
다섯가지 클래스 비교 및 성능 분석관련 참고 블로그 글
○ KoNLPy 설치
KoNLPy는 자바VM환경에서 작동하므로 JDK와 JPype를 설치 한 후에 깔아야 합니다. 자바환경이 설정되지 않은 상태에서 pip install konlpy명령어로 패키지를 설치하면 많은 오류를 볼 수 있습니다....
KoNLPy의 설치 과정은
1. pip upgrade 2. JPype1 설치 3. JDK 설치 및 환경변수 설정 4. KoNLPy 패키지 설치
http://konlpy.org/ko/v0.5.2/install/#
Python2는 2020 1월1일 부로 지원을 종료하는 것 같습니다.
현재 KoNLPy의 공식 홈페이지에도 Python3를 위한 KoNLPy 설치 과정을 안내하고 있네요.
저는 윈도우, 아나콘다 환경에서 설치를 진행하였습니다. Konlpy의 클래스 중 성능이 괜찮다고 알려진 mecab()은 윈도우7에서는 사용할 수 없고 윈도우10에서는 빌드 등의 과정을 거쳐야 한다고 합니다.
아나콘다 프롬프트에서 konlpy를 설치하고 싶은 가상환경을 활성화 시킨 후 다음과 같은 명령어를 입력하여 패키지들을 설치합니다.
1. pip upgrade
> pip install --upgrade pip
2. JPype1 설치
JPype1 설치 페이지 (클릭)에 들어가서 자신에게 맞는 파이썬 버전과 윈도우 비트를 확인한 후 JPype라이브러리를 다운받습니다. cp뒤의 숫자는 파이썬버전을 의미하고(cp37-python3.7버전이상) amd의 숫자는 설치된 파이썬의 비트를 의미합니다. 저는 기존에 64비트 버전을 사용하고 있었기 때문에 amd64를 설치하였습니다.
다운받은 jpype라이브러리는 아나콘다가 설치되어 있는 디렉터리 안에 복사 합니다.(아나콘다 환경기준) (예, C:/User/Anaconda3) 후에 Anaconda3폴더로 이동후 ( >cd C:/User/Anaconda3 ) 아래 명령어를 입력해줍니다.
> pip install JPype1-0.7.1-cp37-none-win_amd64.whl
3. JDK설치 및 환경변수 설정
자바 다운로드 페이지 에 접속해서
JDK download 클릭 후 맞는 운영체제, 맞는 비트버전의 jdk를 다운받아 줍니다.
이때 파이썬과 OS버전을 맞춰야 하는데 최신 버전 다운로드페이지에는 32비트 버전이 없으므로 32비트 버전을 다운받으려면 더 이하의 버전페이지로 들어가야 합니다. (32비트 버전을 다운받을 경우 windowsx86이라고 쓰여져 있는 것 다운)
다운 Java파일 밑에 jvm.dll파일을 찾은 후 해당 파일의 경로를 환경변수로 등록하여야 합니다.
4. konlpy패키지 설치
> pip install konlpy
최종 테스트 코드
from konlpy.tag import Kkma
kkma = Kkma()
test = kkma.nous('코앤엘파이 한국어 형태소 분석기 설치 테스트 하는중 입니다.)
print(test)
결과
['코', '코앤엘파이', '앤', '엘', '파이', '한국어', '형태소', '분석기', '설치', '테스트', '중']
○ KoNLPy에서 제공하는 함수들
5가지 클래스 모두 동일한 형태소 분석 방법을 제공하지만 각기의 성능이 조금씩 다릅니다. 여기서는 Okt()클래스 기준으로 설명하겠습니다.
- morphs() : 텍스트를 형태소 단위로 나누는 함수. 파라미터의 norm 은 문장을 정규화, stem 은 각 단어에서 어간을 추출한다. - nouns() : 텍스트에서 명사만 추출하는 함수. - pharases() : 텍스트에서 어절을 추출하는 함수. - pos() : 각 품사를 태깅하는 함수. 주어진 텍스트를 형태소 단위로 나눈 후 나뉘어진 형태소를 해당하는 품사와 함께 리스트화 한다. 파라미터에는 norm, stem, join (나눠진 형태소와 품사를 형태소/품사 형태로 리스트화)가 있다.
Okt클래스 객체로 생성
from konlpy.tag import Okt
okt = Okt()
매서드 호출
okt = Okt()
text = '코앤엘파이 연습하는 중입니다. 열심히 해야지.'
print(okt.morphs(text))
print(okt.morphs(text, stem=True))
print(okt.nouns(text))
print(okt.phrases(text))
print(okt.pos(text))
print(okt.pos(text, join=True))
결과
['코앤', '엘', '파이', '연습', '하는', '중', '입니다', '.', '열심히', '해야지', '.']
['코앤', '엘', '파이', '연습', '하다', '중', '이다', '.', '열심히', '하다', '.']
['코앤', '파이', '연습', '중']
['코앤', '파이', '파이 연습', '파이 연습하는 중', '연습']
[('코앤', 'Noun'), ('엘', 'Josa'), ('파이', 'Noun'), ('연습', 'Noun'), ('하는', 'Verb'), ('중', 'Noun'), ('입니다', 'Adjective'), ('.', 'Punctuation'), ('열심히', 'Adverb'), ('해야지', 'Verb'), ('.', 'Punctuation')]
['코앤/Noun', '엘/Josa', '파이/Noun', '연습/Noun', '하는/Verb', '중/Noun', '입니다/Adjective', './Punctuation', '열심히/Adverb', '해야지/Verb', './Punctuation']
자연어처리를 위한 파이썬 패키지 시리즈
KoNLPy 데이터 전처리
2020/01/28 - [SW개발/Framework Library] - [파이썬패키지] 자연어 처리를 위한 패키지1 - KoNLPy로 데이터 전처리
NLTK 데이터 탐색
2020/01/31 - [SW개발/Framework Library] - [파이썬패키지] 자연어 처리를 위한 패키지2 - NLTK로 데이터 탐색
Gensim 토픽 모델링
2020/02/17 - [SW개발/Framework Library] - [파이썬패키지] 자연어 처리를 위한 패키지3 - Gensim의 Word2Vec으로 토픽모델링