-
Notifications
You must be signed in to change notification settings - Fork 3
/
my_word2vec.py
147 lines (124 loc) · 4.3 KB
/
my_word2vec.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- coding: utf-8 -*-
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
import numpy
import pprint, pickle
def train_model():
"""训练一个词向量模型"""
model = Word2Vec(LineSentence('temp/data.txt'), size=300, window=5, min_count=1, workers=4)
model.save('temp/temp.bin')
model.save_word2vec_format('temp/temp.txt', binary=False)
# train_model() #执行这个函数
def used_model_m():
"""测试一个词的词向量"""
model =Word2Vec.load_word2vec_format('data/GoogleNews-vectors-negative300.bin',binary=True)
# model =Word2Vec.load('temp/temp.bin')
b=model['spilt']
print b
# used_model_m() #执行这个函数
def used_model():
"""使用Word2Vec模块自带的函数,计算两个句子之间的相似度"""
model =Word2Vec.load_word2vec_format('data/GoogleNews-vectors-negative300.bin',binary=True)
b=model.similarity(u'the',u'to')
print (b)
# return (b)
# used_model() #执行这个函数
def used_model():
"""使用Word2Vec模块自带的函数,计算两个句子之间的相似度"""
model =Word2Vec.load_word2vec_format('data/GoogleNews-vectors-negative300.bin',binary=True)
fouts =open('data/model_Dict.txt', 'w')#以写得方式打开文件
for word in model.vocab:
fouts.write(word)
fouts.close()
# return (b)
# used_model() #执行这个函数
def read_model():
"""将语料里面的词的词向量都读出来,另存在data/user_vec.pkl文件里面,方便读取"""
model =Word2Vec.load_word2vec_format('data/GoogleNews-vectors-negative300.bin',binary=True)
outVec=dict()
fouts =open('data/user_Dict_Error.txt', 'w')#以写得方式打开文件
with open('data/user_Dict.txt', 'r') as fin:#以读的方式打开文件
for line in fin:
s=line.split(' ')[0]
if s in model.vocab:
b=model[s]
outVec[s]=b
print s
else:
print "这个单词有问题",s
fouts.write(s+'\n')
outVec[s]=[0]*300
fout= open('data/user_vec.pkl', 'w')#以写得方式打开文件
pickle.dump(outVec,fout)
fout.close()
fin.close()
fouts.close()
# read_model() #执行这个函数
def read_model():
"""将语料里面的词的词向量都读出来,另存在data/user_vec.pkl文件里面,方便读取"""
outVec=[]
pkl_file=open('data/user_vec.pkl', 'r')
data=pickle.load(pkl_file)
with open('data/user_Dict.txt', 'r') as fin:#以读的方式打开文件
for line in fin:
s=line.split(' ')[:-1][0]
vec=data[s]
outVec.append(vec)
fout= open('data/user_vec_D.pkl', 'w')#以写得方式打开文件
pickle.dump(numpy.array(outVec),fout)
pkl_file.close()
fout.close()
fin.close()
#用于显示数据
print('read pkl...')
# read_model() #执行这个函数
import re
r='[’ !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~]+'
def merge_two():
"""将文件里面句子的词向量两个两个的合并在一起
e.g 123456 合并成12 23 34 45 56"""
pkl_file=open('data/user_vec.pkl', 'r')
data=pickle.load(pkl_file)
datafile=open('data/English_data.txt','r')
fout= open('data/user_merge.pkl', 'w')#以写得方式打开文件
for dataitem in datafile:
#去除句子里面的标点符号
item_remove=re.sub(r," ",dataitem)
dataSent=item_remove.split(' ')[:-1]
print dataSent
for i in range(0,len(dataSent)-1):
c=list(data[dataSent[i]])+list(data[dataSent[i+1]])
pickle.dump(numpy.array(c),fout)
fout.close()
# merge_two() #执行这个函数
def merge_sent():
"""将文件里面句子的词向量合并在一起"""
pkl_file=open('data/user_vec.pkl', 'r')
data=pickle.load(pkl_file)
datafile=open('data/English_data.txt','r')
fout= open('data/user_merge_sent.pkl', 'w')#以写得方式打开文件
for dataitem in datafile:
#去除句子里面的标点符号
item_remove=re.sub(r," ",dataitem)
dataSent=item_remove.split(' ')[:-1]
print dataSent
c=list()
for word in dataSent:
c.append(list(data[word]))
pickle.dump(numpy.array(c,dtype=numpy.float32),fout)
fout.close()
# merge_sent() #执行这个函数
def split_sent():
"""将文件里面的一部分抽取出来"""
outVec=[]
pkl_file=open('data/user_merge_sent.pkl', 'r')
for i in range(100):
data=pickle.load(pkl_file)
outVec.append(data)
pkl_file.close()
fout= open('data/user_merge_sent_100.pkl', 'w')#以写得方式打开文件
pickle.dump(numpy.array(outVec),fout)
fout.close()
#用于显示数据
print('read pkl...')
split_sent() #执行这个函数