티스토리 뷰

Korean Natural Language Processing for Using KoNLPy ( Korean NLP in Python )

Python기반 자연어 처리가 가능한 오픈소스 라이브러리가 있어 소개하고자 한다.

NLP란 Natural Language Processing의 약자로  KoNLPy는 한국어 자연어

처리란 의미를 가지고 있다. 이는 형태소 분석뿐 아니라 더 많고 포괄적인

자연어 처리기능을 내포하고 있어 목적과 취향에 맞춰 사용할 수 있다.


github : https://github.com/e9t/konlpy 


자 이제 설치 및 튜토리얼을 통해 확인해 보도록 한다.


step1. 설치

pip installer를 통해 간단히 설치 가능하다.

$ pip install JPype1

$ pip install konlpy


step 2. word cloud 테스트

이미지를 그리기 위해 SDL 라이브러리와 pygame모듈을 설치한다.

$ brew install sdl sdl_image sdl_mixer sdl_ttf smpeg portmidi

$ pip install hg+http://bitbucket.org/pygame/pygame

$ pip install git+https://github.com/e9t/PyTagCloud.git


step 3. 예제 코드 실행

특정 웹페이지를 크롤링하여 분석한 예제 코드

#! /usr/bin/python2.7
# -*- coding: utf-8 -*-

from collections import Counter
import urllib
import random
import webbrowser

from konlpy.tag import Hannanum
from lxml import html
import pytagcloud # requires Korean font support
import sys

if sys.version_info[0] >= 3:
    urlopen = urllib.request.urlopen
else:
    urlopen = urllib.urlopen


r = lambda: random.randint(0,255)
color = lambda: (r(), r(), r())

def get_bill_text(billnum):
    url = 'http://pokr.kr/bill/%s/text' % billnum
    response = urlopen(url).read().decode('utf-8')
    page = html.fromstring(response)
    text = page.xpath(".//div[@id='bill-sections']/pre/text()")[0]
    return text

def get_tags(text, ntags=50, multiplier=10):
    h = Hannanum()
    nouns = h.nouns(text)
    count = Counter(nouns)
    return [{ 'color': color(), 'tag': n, 'size': c*multiplier }\
                for n, c in count.most_common(ntags)]

def draw_cloud(tags, filename, fontname='Noto Sans CJK', size=(800, 600)):
    pytagcloud.create_tag_image(tags, filename, fontname=fontname, size=size)
    webbrowser.open(filename)


bill_num = '1904882'
text = get_bill_text(bill_num)
tags = get_tags(text)
print(tags)
draw_cloud(tags, 'wordcloud.png')


[그림 1] 분석 테그 클라우드


참조 : 

 http://konlpy.readthedocs.org/en/latest/examples/wordcloud/ 

 https://github.com/e9t/PyTagCloud-CJK

형태소 분석 결과를 다양한 형태의 visualization을 이용하여 보여 줄 수 있다. 

댓글