딥러닝/자연어처리

konlpy 라이브러리를 이용한 형태소 분석

씩씩한 IT블로그 2020. 10. 2. 15:28
반응형

0. 서론

konlpy라는 라이브러리가 있다. 한국어 형태소분석을 할 수 있는 여러개의 클래스가 모여있는 라이브러리이다.

공식 사이트는 여기 konlpy-ko.readthedocs.io/ko/v0.4.3/

라이브러리를 임포트해서 사용해보도록 한다.

 

1. 라이브러리 import

#konlpy에 있는 클래스 모두 import
from konlpy.tag import *


import re
import pandas as pd
import requests
from bs4 import BeautifulSoup

5개의 클래스가 있고, 출처는 아래와 같다.

 

2. 객체설정

hannanum = Hannanum()  
kkma = Kkma()  
komoran = Komoran()  
mecab = Mecab()  
okt = Okt()  

위와같이 객체를 설정해서 사용할 수 있다.

 

3. 함수 

* 클래스별로 함수이름이 다를 수 있으니 주의!

(1) .pos() : 형태소 분석 함수. 형태소를 분석해 각 형태소별 품사까지 태그해주는 함수.

print(okt.pos('이문장을 형태소 분석 해봅시다. ㅎㅎ'))
[('이', 'Determiner'), ('문장', 'Noun'), ('을', 'Josa'), ('형태소', 'Noun'), ('분석', 'Noun'), ('해봅시다', 'Verb'), ('.', 'Punctuation'), ('ㅎㅎ', 'KoreanParticle')]

 

(2) .morphs() : 형태소 분석 함수. 형태소를 분석해서 나눈 뒤 리스트로 만들어 준다. 품사를 태깅하진 않는다.

print(okt.morphs('이문장을 형태소 분석 해봅시다. ㅎㅎ'))
['이', '문장', '을', '형태소', '분석', '해봅시다', '.', 'ㅎㅎ']

 

(3) .target : 태그된 형태소의 품사가 무엇인지 나와있는 변수.

- hannanum

wordType=hannanum.tagset
print(wordType)
{'E': '어미', 'EC': '연결 어미', 'EF': '종결 어미', 'EP': '선어말어미', 'ET': '전성 어미', 'F': '외국어', 'I': '독립언', 'II': '감탄사', 'J': '관계언', 'JC': '격조사', 'JP': '서술격 조사', 'JX': '보조사', 'M': '수식언', 'MA': '부사', 'MM': '관형사', 'N': '체언', 'NB': '의존명사', 'NC': '보통명사', 'NN': '수사', 'NP': '대명사', 'NQ': '고유명사', 'P': '용언', 'PA': '형용사', 'PV': '동사', 'PX': '보조 용언', 'S': '기호', 'X': '접사', 'XP': '접두사', 'XS': '접미사'}

- Okt

wordTypeOkt=okt.tagset
print(wordTypeOkt)
{'Adjective': '형용사', 'Adverb': '부사', 'Alpha': '알파벳', 'Conjunction': '접속사', 'Determiner': '관형사', 'Eomi': '어미', 'Exclamation': '감탄사', 'Foreign': '외국어, 한자 및 기타기호', 'Hashtag': '트위터 해쉬태그', 'Josa': '조사', 'KoreanParticle': '(ex: ㅋㅋ)', 'Noun': '명사', 'Number': '숫자', 'PreEomi': '선어말어미', 'Punctuation': '구두점', 'ScreenName': '트위터 아이디', 'Suffix': '접미사', 'Unknown': '미등록어', 'Verb': '동사'}

 

4. 대통령 연선문을 이용한 실습

(1) 크롤링 및 형태소 분석

#웹크롤링
url = 'https://www1.president.go.kr/articles/7940'
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
text = soup.select_one('.cs_body > .cs_view.text > .text')
text = text.get_text(' ', strip=True)


# 특수문자들 전처리
text = re.sub('[0-9]+', '', text)
text = re.sub('[A-Za-z]+', '', text)
text = re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ·!』\\‘’|\(\)\[\]\<\>`\'…》]', '', text)

#형태소분석
myNouns = hannanum.nouns(text) # 명사 분석
myMorphs=hannanum.morphs(text) # 형태소 (의미를 가지는 요소로서는 더 이상 분석할 수 없는 가장 작은말의 단위)
myPos=hannanum.pos(text) # 품사 분석

# 수식언(그러나, 그) M
print(myPos)
[('존경', 'N'), ('하', 'X'), ('는', 'E'), ('국민', 'N'), ('여러분', 'N'), ('경자년庚子年', 'N'), ('새', 'P'), ('어', 'E'), ('하', 'P'), ('어', 'E'), ('가', 'P'), ('아', 'E'), ('밝', 'P'), ('아ㅂ니다', 'E'), ('독립운동', 'N'), ('과', 'J'), ('임시정부', 'N'), ('수립', 'N'), ('년', 'N'), ('의', 'J'), ('뜻깊', 'P'), ('은', 'E'), ('해', 'N'), ('를', 'J'), ('보내', 'P'), ('고', 'E'), ('올해', 'N'), ('혁명', 'N'), ('주년', 'N'), ('과', 'J'), ('민주화운동', 'N'), ('주년', 'N'), ('을', 'J'), ('맞', 'P'), ('으며', 'E'), ('년', 'N'), ('전', 'N'), ('촛불', 'N'), ('을', 'J'), ('들', 'P'), ('어', 'E'), ('민주공화국', 'N'), ('을', 'J'), ('지키', 'P'), ('어', 'E'), ('내', 'P'), ('었던', 'E'), ('숭고', 'N'), ('하', 'X'), ('ㄴ', 'E'), ('정신', 'N'), ('을', 'J'), ('되새기', 'P'), ('ㅂ니다', 'E'), ('정의', 'N'), ('롭', 'X'), ('고', 'E'), ('안전', 'N'), ('하', 'X'), ('며', 'E'), ('더', 'M'), ('평화', 'N'), ('롭', 'X'), ('고', 'E'), ('행복', 

 

(2) 많이나온 명사 추출

from collections import Counter
count=Counter(myNouns)
common_list=count.most_common(100)
print(common_list)
[('우리', 30), ('것', 30), ('수', 24), ('등', 21), ('국민', 20), ('년', 17), ('올해', 17), ('노력', 14), ('평화', 13), ('지난해', 13), ('정부', 12), ('수출', 12), ('남북', 11), ('전', 10), ('변화', 10), ('경제', 10), ('사회', 10), ('강화', 10), ('대', 10), ('협력', 10), ('국민들', 9), ('공정', 9), ('원', 9), ('세계', 9), ('도약', 8), ('혁신', 8), ('일자리', 8), ('지원', 8), ('대화', 8), ('여러분', 7), ('삶', 7), ('증가', 7), ('확대', 7), ('분야', 7), ('두', 7), ('북미', 7), ('민주공화국', 6), ('확실', 6), ('투', 6), ('법', 6), ('주년', 5), ('어려움', 5), ('개선', 5), ('지역', 5), ('시작', 5), ('위', 5), ('조', 5), ('상생', 5), ('남', 5), ('나', 4), ('포용', 4), ('기반', 4), ('기록', 4), ('이상', 4), ('질', 4), ('확산', 4), ('마련', 4), ('중소기업', 4), ('성과', 4), ('천', 4), ('돌파', 4), ('추진', 4), ('대응', 4), ('시대', 4), ('속', 4), ('기업', 4), ('시장', 4), ('배', 4), ('연속', 4), ('때', 4), ('한반', 4), ('북', 4), ('공동', 4), ('번영', 4), ('발전', 4), ('날개', 4), ('존경', 3), ('해', 3), ('개혁', 3), ('길', 3), ('한', 3), ('역대', 3), ('맞춤형', 3), ('결과', 3), ('명', 3), ('일', 3), ('인상', 3), ('비중', 3), ('완성', 3), ('누구', 3), ('활성화', 3), ('모두', 3), ('미세먼지', 3), ('대책', 3), ('개', 3), ('성장', 3), ('신산업', 3), ('반도체', 3), ('리', 3), ('힘', 3)]

 

반응형