[Python#3] Korean Natural Language Processing for Using KoNLPy ( Korean NLP in Python )
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을 이용하여 보여 줄 수 있다.