자연어 처리

KoNLPy

KoNLPy는 한국어 처리를 파이썬 패키지입니다. 기존에 개발된 라이브러리들을 파이썬에서 사용할 수 있게 해 놓은 것입니다. Hannanum, Kkma, Komoran, Mecab, Okt 클래스들을 사용할 수 있습니다. 대부분이 자바로 개발되어 있어서 파이썬에서 자바를 사용할 수 있는 모듈 JPype를 설치해야 합니다. Mecab 클래스는 윈도우즈에서는 지원되지 않습니다.

konlpy 설치

KoNLPy 홈페이지를 참조하세요.

  1. JPype 설치
    conda install -c conda-forge jpype1
    
  2. konlpy 설치
    pip install konlpy
    

사용하기

In [1]: from konlpy.tag import Kkma
   ...: kkma = Kkma()
   ...: 

문장(sentences) 분석을 합니다.

In [3]: kkma.sentences("한국어 분석을 시작합니다 재미있어요~~~")
Out[3]: ['한국어 분석을 시작합니다', '재미있어요~~~']

명사(noun) 분석을 합니다.

In [4]: kkma.nouns("한국어 분석을 시작합니다 재미있어요~~~")
Out[4]: ['한국어', '분석']

형태소(pos) 분석을 합니다.

In [5]: kkma.pos("한국어 분석을 시작합니다 재미있어요~~~")
Out[5]: 
[('한국어', 'NNG'),
 ('분석', 'NNG'),
 ('을', 'JKO'),
 ('시작하', 'VV'),
 ('ㅂ니다', 'EFN'),
 ('재미있', 'VA'),
 ('어요', 'EFN'),
 ('~~~', 'SW')]

한나눔(Hannanum) 클래스를 사용해 봅니다.

In [6]: from konlpy.tag import Hannanum
   ...: hannanum = Hannanum()
   ...: 

명사 분석시를 사용해보면 꼬꼬마 분석기와 약간 다르게 시작이라는 명사를 찾는 것을 알 수 있습니다.

In [8]: hannanum.nouns("한국어 분석을 시작합니다 재미있어요~~~")
Out[8]: ['한국어', '분석', '시작']

한나눔 행태소 분석을 해봅니다.

In [9]: hannanum.pos("한국어 분석을 시작합니다 재미있어요~~~")
Out[9]: 
[('한국어', 'N'),
 ('분석', 'N'),
 ('을', 'J'),
 ('시작', 'N'),
 ('하', 'X'),
 ('ㅂ니다', 'E'),
 ('재미있', 'P'),
 ('어요', 'E'),
 ('~~~', 'S')]

Okt 분석기를 사용해봅니다. 이것은 이전에 트위터(Twitter) 분석기로 불리었던 것입니다.

In [10]: from konlpy.tag import Okt
   ....: okt = Okt()
   ....: 
In [12]: okt.nouns("한국어 분석을 시작합니다 재미있어요~~~")
Out[12]: ['한국어', '분석', '시작']
In [13]: okt.pos("한국어 분석을 시작합니다 재미있어요~~~")
Out[13]: 
[('한국어', 'Noun'),
 ('분석', 'Noun'),
 ('을', 'Josa'),
 ('시작', 'Noun'),
 ('합니다', 'Verb'),
 ('재미있어요', 'Adjective'),
 ('~~~', 'Punctuation')]

법안 분석

육아 휴직 법안을 읽어들입니다.

In [14]: from konlpy.corpus import kobill
   ....: doc = kobill.open("1809890.txt").read()
   ....: 

Okt 분석기로 명사 분석을 합니다.

In [16]: from konlpy.tag import Okt
   ....: okt = Okt()
   ....: tokens = okt.nouns(doc)
   ....: tokens[:10]
   ....: 
Out[19]: ['지방공무원법', '일부', '개정', '법률', '안', '정의화', '의원', '대표', '발의', '의']

단어의 횟수를 확인해봅니다.

In [20]: import nltk
   ....: words = nltk.Text(tokens, name="육아휴직 법안")
   ....: 
In [22]: from matplotlib import font_manager, rc
   ....: import matplotlib as mlp
   ....: font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
   ....: rc('font', family=font_name)
   ....: mlp.rcParams['axes.unicode_minus'] = False # 축에 음수 표시
   ....: 

그래프로 표시합니다.

In [27]: import matplotlib.pyplot as plt
   ....: fig, ax = plt.subplots(figsize=(12, 6))
   ....: words.plot(50)
   ....: 
_images/plot_nlp_breed_vacation.png

단어가 문서내에서 몇 번 나타나는지를 확인해봅니다.

In [30]: ax.cla()
   ....: words.dispersion_plot(['육아휴직', '초등학교', '공무원'])
   ....: 
_images/plot_nlp_breed_vac_freq.png

Mecab 설치

윈도우즈 10 빌드 16215 이상에서는 WSL(Windows Subsystem for Linux)를 이용해서 리눅스를 서브시스템으로 설치할 수 있습니다. 서브시스템 리눅스에서 bash 쉘을 이용하여 윈도우즈와 별도로 파이썬을 설치하고 Mecab을 설치해서 사용할 수 있습니다. 윈도우즈 기능 켜기/끄기를 실행하여 Linux용 윈도우즈 하위 시스템을 선택합니다. 윈도우즈 다시 시작이 필요합니다. 자세한 설치 방법은 여기를 참조하세요.