- 전체
- Python 일반
- Python 수학
- Python 그래픽
- Python 자료구조
- Python 인공지능
- Python 인터넷
- Python SAGE
- wxPython
- TkInter
- iPython
- wxPython
- pyQT
- Jython
- django
- flask
- blender python scripting
- python for minecraft
- Python 데이터 분석
- Python RPA
- cython
- PyCharm
- pySide
Python 자료구조 텍스트 마이닝 3편. 형태소 분석 사전작업
2018.02.18 23:35
텍스트 마이닝 3편. 형태소 분석 사전작업
여기서는 아나콘다 파이썬에서 지원하지 않는 KoNLPy 모듈을 사용합니다.
내부적으로 자바 언어로 작성된 한국어 형태소 분석기를 호출하기 때문에 복잡한 준비를 해야 합니다.
자바개발자 도구 설치
자바 개발자 도구는 다음 사이트 에서 다운 받아 설치합니다.
http://www.oracle.com/technetwork/java/javase/downloads/index.html
JPype 패키지 설치
.whl 형식으로 패키징된 비공식 라이브러리 배포처인 http://www.lfd.uci.edu/~gohlke/pythonlibs/에 접속하여 JPype라이브러리 패키지를 내려받아 pip으로 설치합니다.
저는 JPype1‑0.6.2‑cp36‑cp36m‑win_amd64.whl를 다운로드 받았습니다.
그리고는 명령창에서 다음과 같이 실행하여 설치합니다.
$ pip install JPype1‑0.6.2‑cp36‑cp36m‑win_amd64.whl
KoNLPy모듈 설치
명령창에서 설치합니다.
$ pip install konlpy
형태소와 형태소 분석의 개념
이제 본격적으로 분석하는 작업을 시작해 보겠습니다.
형태소는 최소 의미 단위를 말합니다. 형태소 분석이란 언어 단위인 어절 혹은 문장을 형태소로 나눠가는 과정입니다. 형태소로 분절을 해야 컴퓨터가 분석이 가능한 형태가 됩니다.
“나는 배가 아파서 걸어서 집에 갔습니다”라는 문장을 형태소로 나누면 다음과 같습니다.
나/대명사 는/보조사 배/명사+가/격조사 아프/형용사+아서/연결어미 걷/동사+어서/연결어미 집/명사+에/격조사 가/동사+았/선어말어미+습니다/어말어미
나, 배, 아프, 걷, 집, 가는 어휘적 의미를 나타내는 어휘 형태소 입니다. 는, 가, 아서, 어서, 에, 았, 습니다는 문법적 의미를 나타내며 이러한 형태소들을 문법 형태소라고 부릅니다.
형태소 분석은 간단해 보이지만 사실은 매우 복잡한 과정입니다. 많은 경우에 명사와 조사의 분리, 동사와 형용사의 어간과 어미의 분리는 각각의 이들 어휘의 사전만 있으면 가능할 것으로 보이지만 불규칙 용언의 활용 등을 처리하려면 복잡한 규칙이 필요합니다.
예를들어 보겠습니다.
나는 -> 나/대명사+는/보조사 | 나/동사+는/관형형어미 | 날/동사+는/관형형어미 걸어서 -> 걷/동사+어서/연결어미 | 걸/형용사+어서/연결어미 | 걸/동사+어서/연결어미
위에서 보는 것과 같이 하나의 어절에 대하여도 여러 개의 분석 결과가 있을 수 있습니다. 의미가 중의적이기 때문에 이 중의성을 해결하는 과정이 필요합니다. 좋은 형태소 분석기는 이런 중의성을 잘 해결해야 하기 때문에 개발하기가 어렵습니다. 사실 제가 커버할 수 있는 내용도 아닙니다.
간단한 형태소 분석 라이브러리 사용하기
#!/usr/bin/env python3 # -*- coding: utf-8 -* import pprint import konlpy.tag komoran = konlpy.tag.Komoran() text = u"사랑하는 우리 와이프의 무병장수를 기원합니다." pprint.pprint(komoran.pos(text))
결과는
[('사랑', 'NNG'),
('하', 'XSV'),
('는', 'ETM'),
('우리', 'NP'),
('와이프', 'NNG'),
('의', 'JKG'),
('무병장수', 'NNG'),
('를', 'JKO'),
('기원', 'NNG'),
('하', 'XSV'),
('ㅂ니다', 'EF'),
('.', 'SF')
konlp.tag 모듈이 제공하는 Komoran 클래스를 이용합니다. 위에서는 형태소 분석을 수행하는 객체로 komoran 이라는 객체를 생성하였고, 형태소 분석을 할 때에는 이 객체의 pos() 메소드를 사용합니다. 참고로 pprint모듈의 pprint() 함수는 문자열이나 숫자가 아닌 리스트, 딕셔너리 등의 복잡한 객체를 보기 좋게 인쇄할 때 쓰입니다. pos() 메소드가 돌려주는 형태소 분석 결과는 형태소와 품사로 이루어진 튜플의 리스트 입니다. 형태소 분석 결과를 이용하기 위해서는 형태소 분석기가 돌려주는 품사 집합(part-of-speechtagset) 를 알고 있어야 합니다. Komoran() 클래스의 품사 집합은 다음과 같습니다.
NNG 일반 명사 NNP 고유 명사 NNB 의존 명사 NR 수사 NP 대명사 VV 동사 VA 형용사 VX 보조 용언 VCP 긍정 지정사 VCN 부정 지정사 MM 관형사 MAG 일반 부사 MAJ 접속 부사 IC 감탄사 JKS 주격 조사 JKC 보격 조사 JKG 관형격 조사 JKO 목적격 조사 JKB 부사격 조사 JKV 호격 조사 JKQ 인용격 조사 JC 접속 조사 JX 보조사 EP 선어말어미 EF 종결 어미 EC 연결 어미 ETN 명사형 전성 어미 ETM 관형형 전성 어미 XPN 체언 접두사 XSN 명사파생 접미사 XSV 동사 파생 접미사 XSA 형용사 파생 접미사 XR 어근 SF 마침표, 물음표, 느낌표 SE 줄임표 SS 따옴표,괄호표,줄표 SP 쉼표,가운뎃점,콜론,빗금 SO 붙임표(물결,숨김,빠짐) SW 기타기호 (논리수학기호,화폐기호) SH 한자 SL 외국어 SN 숫자 NF 명사추정범주 NV 용언추정범주 NA 분석불능범
다음시간에는 형태소 분석 실전으로 넘어갑니다.
[출처] 텍스트 마이닝 3편. 형태소 분석 사전작업|작성자 엉드루
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.