반응형
※ 한글 형태소 분석
* 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)
반응형
'프로그래밍' 카테고리의 다른 글
[Sqoop] Ubuntu 20.04 Sqoop 활용(2) - 예시 (0) | 2021.06.08 |
---|---|
[Sqoop] Ubuntu 20.04 Sqoop 활용 (0) | 2021.06.07 |
[Python] Text Data Analysis(1) (0) | 2021.06.06 |
[Big Data] 빅데이터 모델 운영시스템 및 생명 주기 (0) | 2021.06.06 |
[R] 내부 평가를 이용한 분류 모델 성능 평가 (0) | 2021.06.05 |