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_句子相似度的更多相关文章

  1. NLP入门(一)词袋模型及句子相似度

      本文作为笔者NLP入门系列文章第一篇,以后我们就要步入NLP时代.   本文将会介绍NLP中常见的词袋模型(Bag of Words)以及如何利用词袋模型来计算句子间的相似度(余弦相似度,cosi ...

  2. [LeetCode] 737. Sentence Similarity II 句子相似度 II

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  3. [LeetCode] 734. Sentence Similarity 句子相似度

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  4. 使用 TF-IDF 加权的空间向量模型实现句子相似度计算

    使用 TF-IDF 加权的空间向量模型实现句子相似度计算 字符匹配层次计算句子相似度 计算两个句子相似度的算法有很多种,但是对于从未了解过这方面算法的人来说,可能最容易想到的就是使用字符串匹配相关的算 ...

  5. LSTM 句子相似度分析

    使用句子中出现单词的Vector加权平均进行文本相似度分析虽然简单,但也有比较明显的缺点:没有考虑词序且词向量区别不明确.如下面两个句子: "北京的首都是中国"与"中国的 ...

  6. [LeetCode] Sentence Similarity 句子相似度

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  7. [LeetCode] Sentence Similarity II 句子相似度之二

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  8. 句子相似度_tf/idf

    import mathfrom math import isnanimport pandas as pd#结巴分词,切开之后,有分隔符def jieba_function(sent): import ...

  9. [LeetCode] 737. Sentence Similarity II 句子相似度之二

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

随机推荐

  1. Displacement Mapping

    [Displacement Mapping] Displacement Mapping(移位贴图). Normal maps的另一个应用是displacement mapping,在这个应用中,细节的 ...

  2. SimpleAdapter & BaseAdapter

    [SimpleAdapter & BaseAdapter] 参考:http://blog.csdn.net/shakespeare001/article/details/7926783

  3. ss源码学习--事件处理

    为了方便区分,以下分别使用local,server,remote代表ss客户端,ss服务端,以及ss客户端请求访问的远程主机. 在shadowsocks中,无论对于local还是server,都需要建 ...

  4. 如何向 Windows 7 镜像中添加 USB3.0 驱动

    如何向 Windows 7 镜像中添加 USB3.0 驱动 1. Microsoft 在 Windows 7 的安装光盘并没有集成各个厂商的 USB3.0 驱动,可 以使用下面方法添加 USB3.0 ...

  5. Javascript之基本类型和引用类型

    ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值,基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基本 ...

  6. 跳台阶(python)

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). # -*- coding:utf-8 -*- class Soluti ...

  7. MYSQL 插入数据乱码

    1.最近在写电商项目 遇见过向数据库中加入数据乱码问题 最开始以为是,数据库的问题但是一看 没问题啊 于是又看了项目的默认编码,也没问题啊 那么问题来了,在哪出现了问题呢 于是 博主 在 tomact ...

  8. Delphi: RTTI与ini配置文件

    项目以Rtti特性做文件参数配置,简化每项读写ini操作,记录以做备忘,代码如下: unit uGlobal; interface uses Windows, Messages, SysUtils, ...

  9. 阿里云视频直播API签名机制源码

    阿里云视频直播API签名机制源码 本文展示:通过代码实现下阿里视频直播签名处理规则 阿里云视频直播签名机制,官方文档链接:https://help.aliyun.com/document_detail ...

  10. swift - 加速器/摇一摇功能

    import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...