#!/usr/bin/env python
# coding: utf-8
#
# # **Project4 | word2vec**
#
# ## **1 데이터 전처리**
# In[1]:
# 살인의 추억 텍스트 불러오기
filename = '../data/movie_memories_of_murder_2003.txt'
with open(filename, 'r') as f:
texts = f.read()
texts[:500]
# In[2]:
from txtutil import txtnoun
skips = {'두만':'박두만', '태윤':'서태윤', '용구':'조용구', '귀옥':'권귀옥',
'희봉':'구희봉', '동철':'신동철', '광호':'백광호', '병순':'조병순',
'해일':'박해일', '광호의':'백광호', '백광호의':'백광호'}
get_ipython().run_line_magic('time', "texts = txtnoun(filename, skip=skips, tags=['Noun'])")
texts[:500]
# In[3]:
# 명사 Token 작업된 자료를 ssResport.txt 로 저장
texts_file = '../data/mom_noun_script.txt'
with open(texts_file, 'w', encoding='utf-8') as file:
file.write(texts)
# In[4]:
# ! cat ./data/ssResport.txt | head -n 10
#
# ## **2 Word 2 vec 객체 만들기**
# gensim
# In[5]:
# ! pip3 install gensim
# In[6]:
get_ipython().run_cell_magic('time', '', 'texts_file = \'../data/mom_noun_script.txt\'\n\nfrom gensim.models import word2vec\ndata = word2vec.LineSentence(texts_file)\nmodel = word2vec.Word2Vec(data, size=30, window=2, min_count=10, hs=1,\n workers=4, iter=100, sg=1)\nmodel.save("../data/mom_script.model")\nprint("model saved.")\n')
#
# ## **3 저장된 모델 불러오기 및 확인**
# gensim
# In[7]:
get_ipython().run_line_magic('reset', '')
# In[8]:
get_ipython().run_line_magic('who', '')
# In[9]:
from gensim.models import word2vec
model = word2vec.Word2Vec.load('../data/mom_script.model')
len(model.wv.vocab.keys())
# In[10]:
list(model.wv.index2word)
#
# ## **4 Word2Vec 모델 내용 확인**
# gensim
# In[11]:
model.wv.most_similar(positive=['범인'])
# In[12]:
model.wv.most_similar(negative=['범인'])
# In[13]:
model.wv.most_similar(positive=['피해자'])
# In[14]:
model.wv.most_similar(negative=['피해자'])
# In[15]:
model.wv.most_similar(positive=['박두만'])
# In[16]:
model.wv.most_similar(positive=['서태윤'])
# In[17]:
model.wv.most_similar(positive=['조용구'])
# In[18]:
model.wv.most_similar(positive=['박두만','서태윤'])
# In[19]:
model.wv.most_similar(positive=['박두만','서태윤'],
negative=['피해자'])
# In[20]:
model.wv.most_similar(positive=['박두만','서태윤'],
negative=['박해일'])
# In[21]:
model.wv.most_similar(positive=['박두만','서태윤'],
negative=['범인'])
#
# ## **5 Visulaization**
# gensim
# In[22]:
list(model.wv.vocab.keys())[:10]
# In[23]:
# model.wv.vocab : { word: object of numeric vector }
vocab = list(model.wv.vocab)
X = model[vocab]
X.shape
# In[24]:
get_ipython().run_cell_magic('time', '', 'from sklearn.manifold import TSNE\ntsne = TSNE(n_components= 2)\nX_tsne = tsne.fit_transform(X)\n')
# In[25]:
import pandas as pd
df = pd.DataFrame(X_tsne,
index = vocab,
columns=['x', 'y'])
df.head()
# In[26]:
get_ipython().run_line_magic('matplotlib', 'inline')
from matplotlib import rc
rc('font', family=['NanumGothic','Malgun Gothic'])
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(1, 1, 1)
ax.scatter(df['x'], df['y'])
for word, pos in df.iterrows():
ax.annotate(word, pos, fontsize=15)
plt.grid(True)