자연어처리(NLTK)를 활용한 간략한 응용 예제를 소개한다.
MeCab 형태소 분석기 구성하기
1. MeCab Korean 설치- 한국어의 특성에 대한 가중치 부분 수정된 버전
- https://bitbucket.org/eunjeon/mecab-ko/downloads/
2. MeCab Korean Dicationay 설치
- 한국어 말뭉치로 학습되어진 모델(사전)
- https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/
3. MeCab Python Library 설치
- pip3 install mecab-python3
4. 참고 홈페이지 (은전한닙프로젝트)
- https://bitbucket.org/eunjeon/mecab-ko
- 맥에서는 --prefix로 경로를 특정해서 사용한다.
* 아키 구성
MeCab 분석기에서는, 미리 학습되어진 모델을 통해서, 신규 문장에 대한 형태소 분석 결과를 리턴한다.
MeCab,NLTK 및 위키백과 활용하기
* 문장을 받아서, 질의 문장이면, 주제어를 위키백과에 조회해서, 결과를 출력한다.가. MeCab을 통해서 문장을 형태소로 분리하기
In [1]:
import MeCab
m = MeCab.Tagger ()
In [2]:
# 문장을 형태소로 분류한다.
out = m.parse("시리님 노아의 방주가 뭐죠?")
print(out)
In [3]:
# NLTK 라이브러리에서 사용할 포멧으로 만든다.
def pos_tagger(s):
""" (단어,태그) 셋을 만들기 """
word_tag = []
for r in s.split('\n'):
p = r.split('\t')
if len(p) > 1:
w, o = p
t = o.split(',')[0]
word_tag.append((w,t))
return word_tag
set_wp = pos_tagger(out)
print(set_wp)
나. NLTK를 통해서 형태소 패턴을 활용하기
In [4]:
# 문법 패턴을 정의 한다.
grammar = """
명사: {<NNG>}
명사구: {<명사><JKG><명사>}
동사구: {<NP\+VCP\+EF>}
동사구: {<NP><VCP\+EF>}
"""
In [5]:
import nltk
cp = nltk.RegexpParser(grammar)
tree = cp.parse(set_wp)
print(tree)
다. 질의 문장에 대해서 주제어를 위키백과에서 조회하기
In [6]:
bucket = []
for i in tree.subtrees(filter=lambda t: t.label() == '동사구'):
if ''.join([ w for w,p in i.leaves() ]) in ['뭔가요','뭐죠','무엇인가요']:
for j in tree.subtrees(filter=lambda t: t.label() == '명사' or t.label() == '명사구'):
space = lambda p : ' ' if p == 'JKG' else ''
bucket.append(''.join([ w+space(p) for w,p in j.leaves() ]))
print(bucket)
In [7]:
# 주제를 가진 단어들에 대한 위키백과 참고하기.
import wikipedia as wk
wk.set_lang("ko")
for title in bucket:
page = wk.page(title)
print(title,'_____위키백과_____\n',page.summary)
필자가 최근에 같이 일하게 된 시리(Siri)를 보면, 한글 자연어 처리 영역도 꽤 높은 수준에 도달 했음을 느낀다. 가벼운 문자 보내기, 음악 재생이 매우 편리하고, 위키백과 사전을 읽어주는 기능은 10년을 손가락과 눈으로 일한 IT 엔지니어에 대한 축복임이 틀림 없다.
혹시 자연어 처리 관련해서 입문하시는 분이라면, "한국어 형태소 분석과 정보 검색"이라는 책을 추천해 봅니다.
0 개의 댓글:
댓글 쓰기