from IPython.display import display, Image
# display(Image(filename='MyImage.png'))
display(Image(filename='img/today_weather.png'))
한나눔(Hannanum) : 카이스트에서 개발한 형태소 분석기. 형태소 분석 및 품사 태깅 기능
꼬꼬마(Kkma) : 서울 대학교에서 개발한 형태소 분석기. 자바 기반 개발. 문장 분리기 제공.
코모란(Komoran) : 샤인웨어(Shinware)에서 개발한 자바 기반 형태소 분석기. 아파치 라이선스 2.0
은전한잎(mecab-ko) : 일본어 형태소 분석기. 한글 지원, C++언어로 개발됨. 처리 성능이나 속도에서 좋음.
트위터(Twitter) : 트위터에서 소셜 분석을 위해 개발한 형태소 분석기. 소셜 분석 대상이므로 비형식어나 신조등을 잘 찾아냄. 처리 속도가 빨라 실시간 처리 등에 활용. 2017년 이후 Open-Korean-Text라는 이름으로 운영.
여러개의 형태소 분석기를 모아둔 하나의 인터페이스가 없을까?
import nltk
import matplotlib.pyplot as plt
import platform
import numpy as np
from konlpy.tag import Kkma
kkma = Kkma()
kkma.sentences("안녕하세요! 오늘은 한글 분석을 시작합니다.")
kkma.nouns("안녕하세요! 오늘은 한글 분석을 시작합니다.")
kkma.pos("안녕하세요! 오늘은 한글 분석을 시작합니다.")
from konlpy.tag import Hannanum
hannanum = Hannanum()
hannanum.nouns("안녕하세요! 오늘은 한글어 분석을 시작합니다")
# from konlpy.tag import Kkma
# kkma = Kkma()
from konlpy.tag import Okt
import nltk
okt = Okt()
print(okt.morphs(u'단독입찰보다 복수입찰의 경우'))
print(okt.nouns(u'유일하게 항공기 체계 종합개발 경험을 갖고 있는 KAI는'))
print(okt.phrases(u'오늘은 좋은날이다. 날씨도 좋고, 좋은 일도 생기고, 감사하다'))
print(okt.pos(u'이런것도 될까요?'))
from wordcloud import WordCloud, STOPWORDS
import numpy as np
from PIL import Image
text = open('data/alice.txt').read()
alice_mask = np.array(Image.open("img/alice_color.png"))
stopwords =set(STOPWORDS) # 불용어 처리
stopwords.add("said") # 불용어 추가
콜랩 환경
%matplotlib inline
import matplotlib as mpl # 기본 설정 만지는 용도
import matplotlib.pyplot as plt # 그래프 그리는 용도
import matplotlib.font_manager as fm # 폰트 관련 용도
### 나눔 고딕 설치
!apt-get update -qq # 설치를 업데이트 -qq : 로그를 최소한으로
!apt-get install fonts-nanum* -qq # 설치한다. fonts-nanum* => ttf-nanum, ttf-nanum-coding, ttf-nanum-extra ]
path = '/usr/share/fonts/truetype/nanum/NanumGothicEco.ttf' # 설치된 나눔글꼴중 원하는 녀석의 전체
font_name = fm.FontProperties(fname=path, size=10).get_name()
print(font_name)
plt.rc('font', family=font_name)
# 우선 fm._rebuild() 를 해주고 # 폰트 매니저 재빌드가 필요하다.
fm._rebuild()
### 한글 폰트 설정
from matplotlib import font_manager, rc
import matplotlib.pyplot as plt
import platform
path = "C:/Windows/Fonts/malgun.ttf"
if platform.system() == "Windows":
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
elif platform.system()=="Darwin":
rc('font', family='AppleGothic')
else:
print("Unknown System")
wc = WordCloud(background_color="white", max_words=2000, mask=alice_mask,
stopwords=stopwords, contour_width=3, contour_color='steelblue')
# generate word cloud
wc.generate(text)
wc.words_
plt.figure(figsize=(15,8))
plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis('off')
plt.show()
plt.figure(figsize=(15,8))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
doc_ko = open("data/15_TheExtreme.txt").read()
doc_ko[1:1000]
# t = Twitter()
# Twitter() has changed to Okt() since v0.5.0.
t = Okt()
tokens_ko = t.nouns(doc_ko)
tokens_ko
ko = nltk.Text(tokens_ko, name="분노의 질주")
print(len(ko.tokens)) # tokens의 수
print(len(set(ko.tokens))) # 유일한 tokens의 수
print(type(ko)) # ko의 자료형
ko.vocab() # 단어 빈도 # ko 자료 단어 및 빈도
plt.figure(figsize=(12,6))
ko.plot(50)
plt.show()
### 불용어 처리
stop_words = ['더', '말', '때', '눈', '또', '이', '그', '좀', '점', '것', '돈', '이제', '분노', '질주' ]
#ko = [each_word for each_word in ko if each_word not in stop_words]
# 만약 단어가 불용어 있지 않다면 추가, 있다면 추가하지 않음.
new_ko = []
for one_word in ko:
if one_word not in stop_words:
new_ko.append(one_word)
new_ko = nltk.Text(new_ko, name="분노의 질주")
plt.figure(figsize=(12,6))
new_ko.plot(50)
plt.show()
new_ko
# 몇번이나 문서에서 언급이 되었을까?
new_ko.count("자동차")
### 원하는 단어의 문서내 위치를 알 수 있음.
plt.figure(figsize=(15,8))
new_ko.dispersion_plot(["영화", "액션", "시리즈", "대박"])
from wordcloud import WordCloud, STOPWORDS
import numpy as np
from PIL import Image
stopwords = set(stop_words) # 불용어 처리
Car_mask = np.array(Image.open("img/Draw_car1.png"))
data = new_ko.vocab().most_common(150)
# path = "C:/Windows/Fonts/malgun.ttf"
wc = WordCloud(font_path=path, relative_scaling=0.2,
background_color="white", mask=Car_mask).generate_from_frequencies(dict(data))
plt.figure(figsize=(12,8))
plt.imshow(wc)
plt.axis("off")
plt.show()
Konlpy 공식 페이지 : http://konlpy.org/ko/latest/api/konlpy.tag/
lucypark 텍스트 마이닝 코스 : https://www.lucypark.kr/courses/2015-dm/text-mining.html
텍스트 마이닝 기본 정리: https://www.slideshare.net/dongjolim7/tf-idf-123609543
워드 클라우드 생성기 : http://wordcloud.kr/