Wordvec_句子相似度
import jieba
from jieba import analyse
import numpy
import gensim
import codecs
import pandas as pd
import jieba.posseg as pog
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
#获取训练语料
def data_handle(data):
n = data.shape[0]
data_str = ''
for i in numpy.arange(n):
data_str += str(data.ix[i, 'comment'])
return data_str
def fenci(data_str,stop_property,stopfile):
# 停用词
stop_word = [word.strip() for word in open(stopfile, encoding='utf-8').readlines()]
# 分词
word_cut = pog.cut(data_str) with open('weibo.txt','w',encoding='utf-8') as f:
for word, flag in word_cut:
if flag not in stop_property:
if word not in stop_word:
f.write(word+'\n') # 原始的训练语料转化成一个sentence的迭代器,每一次迭代返回的sentence是一个word(utf8格式)的列表
def vctor_word():
wiki_news = open('weibo.txt', 'r',encoding='utf-8')
sentences=LineSentence(wiki_news)
model=Word2Vec(sentences,sg=0,size=100,window=5,min_count=5,workers=9)
model.save('weibo.word2vec') # 实现给出任意字符串,获取字符串中某字符的位置以及出现的总次数
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 cut_data(data,stopfile):
data.fillna(0,inplace=True)
stop_word = [word.strip() for word in open(stopfile, encoding='utf-8').readlines()]
charater=['a', 'nr', 'ns', 'nt', 'ng', 'vn', 'vi', 'l', 'n', 'v']
m=data.shape[0]
with open('seg_word.txt', 'w', encoding='utf-8') as f: for i in range(m):
str_cut = ''
str=data.ix[i,'comment']
if str!=0:
segs=jieba.posseg.cut(str)
for word,flag in segs:
if flag in charater:
if word not in stop_word:
str_cut+=word+'/'
f.write(str_cut )
else:
str_cut=''
f.write('\n ') def get_vector(data,model):#str
wordvec_size = 100
word_vec_all = numpy.zeros(wordvec_size)
space_pos = get_char_pos(data, '/')
first_word = data[0:space_pos[0][0]]
print('first_word', first_word)
if first_word in model:
print('yes')
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]]
print('word',word)
if word in model:
print('yes')
word_vec_all = word_vec_all + model[first_word] print('word_vec_all',word_vec_all)
return word_vec_all def word2vec(file_name, model,str): DataFile = codecs.open(file_name, "r", encoding='utf-8')
DataSet = DataFile.readlines()[:-1] score_list=[] str_vector=get_vector(str,model)
for data in DataSet: #
if data.strip()!='':
word_vec_all=get_vector(data,model)
score=simlarityCalu(word_vec_all, str_vector)
else:
score=0
score_list.append(score)
print('score_list',score_list)
return score_list # 词向量相似度计算代码:余弦
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__': stop_property = ['b', 'c', 'd', 'e', 'f', 'm', 'o', 'p', 'q', 'r', 't', 'u', 'x', 'y', 'z', 'uj', 'nrt', 'eng',
'zg', 'ul']
stop_file='stop.txt' # 读取数据
data = pd.read_excel('C:/E/weibo.xlsx')
data.rename(columns={'粉丝ID': 'fans_id', '粉丝': 'fans_name', '微博账户id': 'weibo_user_id', '微博名': 'weibo_name',
'微博id': 'weibo_id', '评论id': 'comment_id', '评论': 'comment'}, inplace=True) # 获取评论字符串
comment_str=data_handle(data) #获取语料
fenci(comment_str, stop_property, stop_file)
#训练模型
vctor_word()
#获取关键词
cut_data(data, stop_file) p1_keywords = 'seg_word.txt'
str1 = '农农/陈利农/宝贝'
# model = gensim.models.Word2Vec.load('weibo.word2vec')
model = gensim.models.Word2Vec.load('zhiwiki_news.word2vec')
p1_vec = word2vec(p1_keywords, model,str1) str2='舒蔻 尤妮佳 买'
Wordvec_句子相似度的更多相关文章
- NLP入门(一)词袋模型及句子相似度
本文作为笔者NLP入门系列文章第一篇,以后我们就要步入NLP时代. 本文将会介绍NLP中常见的词袋模型(Bag of Words)以及如何利用词袋模型来计算句子间的相似度(余弦相似度,cosi ...
- [LeetCode] 737. Sentence Similarity II 句子相似度 II
Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...
- [LeetCode] 734. Sentence Similarity 句子相似度
Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...
- 使用 TF-IDF 加权的空间向量模型实现句子相似度计算
使用 TF-IDF 加权的空间向量模型实现句子相似度计算 字符匹配层次计算句子相似度 计算两个句子相似度的算法有很多种,但是对于从未了解过这方面算法的人来说,可能最容易想到的就是使用字符串匹配相关的算 ...
- LSTM 句子相似度分析
使用句子中出现单词的Vector加权平均进行文本相似度分析虽然简单,但也有比较明显的缺点:没有考虑词序且词向量区别不明确.如下面两个句子: "北京的首都是中国"与"中国的 ...
- [LeetCode] Sentence Similarity 句子相似度
Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...
- [LeetCode] Sentence Similarity II 句子相似度之二
Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...
- 句子相似度_tf/idf
import mathfrom math import isnanimport pandas as pd#结巴分词,切开之后,有分隔符def jieba_function(sent): import ...
- [LeetCode] 737. Sentence Similarity II 句子相似度之二
Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...
随机推荐
- springboot jpa 审计
@SpringBootApplication @EnableJpaAuditing public class Application {...} @Component public class Aud ...
- VIM常见命令
1.删除所有数据 进入到第1行按下d,然后输入G回车,此时内容被全部清除 2.替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所 ...
- NumPy 统计函数
NumPy 统计函数 NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等. 函数说明如下: numpy.amin() 和 numpy.amax() numpy.a ...
- 【转】Spring、Spring MVC、MyBatis整合文件配置详解
见:http://www.tuicool.com/articles/eyINveF web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式 ...
- Jmeter 录制脚本(二)
1)选择WorkBench,右键 Add -> Non-Test Elements -> HTTP(S) Test Script Recorder 2)在HTTP(S) Test Scri ...
- 成对使用new和delete,传值传引用
首先: delete []p;是用来删除对象数组的,特别是你声明的是对象数组!!! 如果new中用了[],delete一定要用[]:在new中没有使用,在delete中一定不要使用. 其次: 当你使用 ...
- stark组件之搜索【模仿Django的admin】
一.先看下django的admin是如何做搜索功能的 配置一个search_fields的列表就可以实现搜索的功能 class testbook(admin.ModelAdmin): # 第一步,定义 ...
- AngularJS——第3章 指令
第3章 指令 所谓指令就是AngularJS自定义的HTML属性或标签,这些指令都是以ng-做为前缀的,例如ng-app.ng-controller.ng-repeat等. 3.1 内置指令 ng-a ...
- Swift 小技巧 || 老偏方
自己平时用的时候,或者看别人有一些好用的技巧分享一下,希望大家能get到 1.关于颜色 2.关于标记 // TODO:这样的标记XCode8才有的 // FIXME:这个也是XCode8有的
- golang语言中os/signal包的学习与使用
package main; import ( "os" "os/signal" "fmt" ) //signal包中提供了两个函数 //No ...