word2vec_文本相似度


#提取關鍵詞
#關鍵詞向量化
#相似度計算

from jieba import analyse
import numpy
import gensim


# 實現給出任意字符串,獲取字符串中某字符的位置以及出現的總次數
def get_char_pos(string,char):
chPos=[]
try:
chPos=list(((pos,char) for pos,val in enumerate(string) if(val == char)))
except:
pass
return chPos
#提取關鍵詞
def keyword_extract(data,filename):
tfidf=analyse.extract_tags
keywords=tfidf(data)
return keywords
#將文檔的每句話進行關鍵詞提取,並將結果保存在txt文件中
def getKeywords(docpath,savepath):
with open(docpath,'r',encoding='utf-8') as docf,open(savepath,'w',encoding='utf-8') as outf:
for data in docf:#每句話
data=data[:len(data)-1]
keywords=keyword_extract(data,savepath)
for word in keywords:
outf.write(word+'/')
outf.write('\n ')
#利用訓練好的詞向量獲取關鍵詞的詞向量
import codecs
def word2vec(file_name,model):


DataFile = codecs.open(file_name, "r",encoding='utf-8')
DataSet = DataFile.readlines()[:-1]

wordvec_size =100
word_vec_all = numpy.zeros(wordvec_size)


for data in DataSet:#

space_pos=get_char_pos(data,'/')
first_word=data[0:space_pos[0][0]]
if first_word in model:


word_vec_all=word_vec_all+model[first_word]


for i in range(len(space_pos)-2):
word=data[space_pos[i][0]:space_pos[i+1][0]]

try:
c=model[word]

except KeyError:
c=0
word_vec_all=word_vec_all+c


return word_vec_all
#詞向量相似度計算代碼:余弦
def simlarityCalu(vector1,vector2):
vector1Mod=numpy.sqrt(vector1.dot(vector1))
vector2Mod=numpy.sqrt(vector2.dot(vector2))
if vector2Mod!=0 and vector1Mod!=0:
simlarity=(vector1.dot(vector2))/(vector1Mod*vector2Mod)
else:
simlarity=0
return simlarity


if __name__=='__main__':
#下載模型
model=gensim.models.Word2Vec.load('zhiwiki_news.word2vec')
p1='P1.txt'
p2='P2.txt'
p1_keywords='P1_keyword.txt'
p2_keywords = 'P2_keyword.txt'
#獲取關鍵詞
getKeywords(p1,p1_keywords)
getKeywords(p2,p2_keywords)
p1_vec=word2vec(p1_keywords,model)
p2_vec=word2vec(p2_keywords,model)
#計算相似度
print(simlarityCalu(p1_vec,p2_vec))






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM