프로그래밍

[Python] Text Data Analysis(2)

RainIron 2021. 6. 6. 23:40
반응형

※ 한글 형태소 분석

* Hannanum

* Kkma

* Okt

* KoNLPy

 

1. Hannanum

from konlpy.tag import Hannanum

han = Hannanum()

이 때, " SystemError: java.nio.file.InvalidPathException: Illegal char <*> at index 55: C:\ProgramData\Anaconda3\Lib\site-packages\konlpy\java\* " 라고 에러가 발생하는 경우가 있다.

그럴 때, 아래 단계대로 수행하여 해결하자.

1) JPype를 설치
2) https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype
3) JPype1-1.2.0-cp38-cp38-win_amd64.whl 다운로드
4) 아나콘다 프롬프트 위치에 다운로드한 파일을 위치시키기
5) 아나콘다 프롬프트 관리자 권한으로 실행하여 pip install JPype1-1.2.0-cp38-cp38-win_amd64.whl
6) 설치 완료 후 코드 재실행
(이 때, pip install 할 때, 주피터 노트북은 종료해야한다.)

 

text = '청산도는 대한민국 남해 연안의 섬으로, 전라남도 완도군 청산면의 본섬이다.'

# 품사 tagging
han.pos(text)

# 명사 추출
han.nouns(text)

# 텍스트 전체 분석
han.analyze(text)

han.morphs(text)

 

2. Kkma

* Import 및 명사 추출

from konlpy.tag import Kkma
kkma = Kkma()
kkma.nouns(text)

# 품사 태깅
kkma.pos(text)

# 문장 추출
kkma.sentences(text)

# 품사 중에서 'NNP'는 고유명사를 의미한다. 동사만 찾아서 화면에 출력
[i for i in kkma.pos(text) if i[1] == 'NNP']

3. Okt

from konlpy.tag import Okt
okt = Okt()
print(okt.morphs(text))

4. Kolaw

from konlpy.corpus import kolaw

# 샘플 말뭉치에는 한국법률 말뭉치, 헌법 말뭉치가 있다.
c = kolaw.open('constitution.txt').read()
c

 

5. Komoran

* 헌법 말뭉치를 사용해 진행

from konlpy.tag import Komoran
komoran = Komoran()

word_list = komoran.nouns('%r' % c[:1000]) 
# 특수 문자, 개행 문자 때문에 안되는 경우가 있기 때문에 '%r' 사용.
word_list

기타 등등

# 출력된 전체 리스트 확인
text = ' '.join(word_list)
text

 

6. Visualization(시각화)

* kolaw에서 가져온 헌법 말뭉치를 사용해 시각화를 진행

import matplotlib.pyplot as plt
from wordcloud import WordCloud

# 한글을 지원하는 글꼴로 경로를 등록(C:/Windows/Fonts)
wordc = WordCloud(font_path = 'C:/Windows/Fonts/malgun.ttf', max_words = 2000,
                stopwords = {'대통령', '국가'})
wordc.generate(text)
plt.figure(figsize=(15, 10)) # 단위 inch
plt.imshow(wordc, interpolation = 'bilinear')
# interpolation: 보간법, 빈 공간에 어떤 색으로 채울 것일지, 'bilinear' / 'nearest'
plt.axis('off')
plt.show()

# 대한민국 지도 형태로 워드 클라우드 출력
from PIL import Image # PIL: Python Image Library
import numpy as np

img = Image.open('South_Korea.png').convert('RGBA')
plt.imshow(img)
plt.axis('off')
plt.show()

mask = Image.new('RGB', img.size, (255, 255, 255))
mask.paste(img, img)
mask = np.array(mask)

wordc = WordCloud(background_color = 'white', font_path = 'C:/Windows/Fonts/malgun.ttf', mask = mask)
wordc.generate(text)
wordc.to_file('wcresult.jpg')

plt.imshow(wordc)
plt.axis('off')
plt.show()

독도는 우리땅

# 단어 빈도수를 차트로 표현
import nltk
import matplotlib.font_manager as fm

plt.figure(figsize=(12, 6))

font_path = 'C:/Windows/Fonts/malgun.ttf'

# 한글 폰트 속성 객체 생성 후 이름을 구해 차트 설정에 반영
plt.rc('font', family = fm.FontProperties(fname = font_path).get_name())
nltk.Text(word_list).plot(50)

반응형