새소식

AI 개발

[KoNLPy] 자연어 처리1 - KoNLPy로 데이터 전처리

  • -

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으로 토픽모델링

 


 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.