gensim计算gensim中文文档相似性度值度为负数什么意思?

gensim学习(五)--关于《如何计算两个文档的相似度》的小问题
52nlp上有篇文章《如何计算两个文档的相似度》,我也正是从这篇文章开始接触python,但今天发现这篇文章中有说的不准确的地方。
1.如果已经建立好LSI模型,现在找几个关键词进行检索,需要先把这几个关键词放入一个List中,然后使用dictionary.doc2bow(list),绝非文章所说,直接将一个字符串放入dictionary.doc2bow()
2.在将检索词放入dictionary.doc2bow()之前,需要将检索词进行大小写转换、停用词去除、抽取词干等预处理,否则,如果直接将检索词放入,则其各种时态,复数等会导致该词在字典中无法找到,进行在进行检索时被自动忽略,从而降低检索质量
另外,感叹一下开源软件的好,这类软件用起来很放心,因为你能够看到代码是如何实现的,从而查找问题很方便,只要一层一层往下推就行了,总能找到问题的根源,从而彻底解决问题。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。君,已阅读到文档的结尾了呢~~
相似度计算 文本相似度计算 中文词语相似度计算 如何计算文档字数 文档怎么计算字数 语义相似度计算 图形相似度计算 java计算器说明文档 word文档计算 怎样计算文档字数
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何计算两个文档的相似度
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口python(98)
转自:http://rzcoding./blog/static/5/
在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性。
评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和特性,角度更客观。
那么Python 里面有计算文本相似度的程序包吗,恭喜你,不仅有,而且很好很强大。
这是从52nlp大神的里面发现的,其实具体的处理流程和程序和他的基本一致,只要仔细研读他的这几篇博客文章即可。
(竟然还没提到程序包的名字,退票。。退票。。)
其实题目就讲到了这个包的名字啦:
真心好用,谁用谁知道。。。
接下来主要说一下针对商品评论和商品描述之间的相似度,怎么使用gensim来计算。
1、文本相似度计算的需求始于搜索引擎。
搜索引擎需要计算“用户查询”和爬下来的众多”网页“之间的相似度,从而把最相似的排在最前返回给用户。
2、主要使用的算法是tf-idf
tf:term frequency&词频
idf:inverse document frequency&倒文档频率
主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
第一步:把每个网页文本分词,成为词包(bag of words)。
第三步:统计网页(文档)总数M。
第三步:统计第一个网页词数N,计算第一个网页第一个词在该网页中出现的次数n,再找出该词在所有文档中出现的次数m。则该词的tf-idf 为:n/N * 1/(m/M) &(还有其它的归一化公式,这里是最基本最直观的公式)
第四步:重复第三步,计算出一个网页所有词的tf-idf 值。
第五步:重复第四步,计算出所有网页每个词的tf-idf 值。
3、处理用户查询
第一步:对用户查询进行分词。
第二步:根据网页库(文档)的数据,计算用户查询中每个词的tf-idf 值。
4、相似度的计算
使用余弦相似度来计算用户查询和每个网页之间的夹角。夹角越小,越相似。
主要分成三步。
第一步,计算所有评论的tf-idf 值。
第二步,使用所有评论的tf-idf 值算出商品描述的tf-idf 值。
第三步,计算每一个评论和商品描述之间的tf-idf 余弦相似度。
① 商品评论的储存形式(把Excel 中的评论数据分词并去停用词存储在txt 文档中):
txt 文档。每条评论为一行。分词并去除。效果如下图:
② 使用gensim 计算所有评论的tf-idf 值
# 读取txt 文档中的每条评论并用itertools 的yield 方法存储起来(比起把所有数据存在数组中,使用itertools 的内存效率高,具体原理请google)class MyCorpus(object):
def __iter__(self):
for line in open(datapath):
yield line.split()
from gensim import corpora, models, similarities
# 以下是把评论通过gensim 转化为tf-idf 形式,程序具体解释参见52nlp的博客或gensim官方文档
Corp = MyCorpus()
dictionary = corpora.Dictionary(Corp)
corpus = [dictionary.doc2bow(text) for text in Corp] #把所有评论转化为词包(bag of words)
tfidf = models.TfidfModel(corpus) #使用tf-idf 模型得出该评论集的tf-idf 模型
corpus_tfidf = tfidf[corpus]
#此处已经计算得出所有评论的tf-idf 值
① 整个商品描述只有一行,经过分词和去停用词处理,得到与上面相似的txt 文档。只是它只有一行。
② 把商品描述看成是查询,把商品评论看成是网页,即可计算商品描述的tf-idf 值。
#读取商品描述的txt 文档q_file = open(querypath, 'r')
query = q_file.readline()
q_file.close()
vec_bow = dictionary.doc2bow(query.split()) #把商品描述转为词包
vec_tfidf = tfidf[vec_bow]
#直接使用上面得出的tf-idf 模型即可得出商品描述的tf-idf 值
① 计算相似度,然后写入txt 文档中
index = similarities.MatrixSimilarity(corpus_tfidf) #把所有评论做成索引
sims = index[vec_tfidf]
#利用索引计算每一条评论和商品描述之间的相似度
similarity = list(sims)
#把相似度存储成数组,以便写入txt 文档
sim_file = open(storepath, 'w')
for i in similarity:
sim_file.write(str(i)+'\n')
#写入txt 时不要忘了编码
sim_file.close()
② 写入文档后相似度如图:
最后总的程序如下:
#! /usr/bin/env python2.7
#coding=utf-8
import logging
from gensim import corpora, models, similarities
def similarity(datapath, querypath, storepath):
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
class MyCorpus(object):
def __iter__(self):
for line in open(datapath):
yield line.split()
Corp = MyCorpus()
dictionary = corpora.Dictionary(Corp)
corpus = [dictionary.doc2bow(text) for text in Corp]
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
q_file = open(querypath, 'r')
query = q_file.readline()
q_file.close()
vec_bow = dictionary.doc2bow(query.split())
vec_tfidf = tfidf[vec_bow]
index = similarities.MatrixSimilarity(corpus_tfidf)
sims = index[vec_tfidf]
similarity = list(sims)
sim_file = open(storepath, 'w')
for i in similarity:
sim_file.write(str(i)+'\n')
sim_file.close()
包计算文本相似度基本也是这个步骤。而且gensim 除了提供了tf-idf 算法之外,还提供了LDA,LSV等更先进的方法。请各位客官慢慢享用。。。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:95521次
积分:1379
积分:1379
排名:千里之外
原创:25篇
转载:116篇
(1)(5)(5)(5)(11)(22)(11)(16)(5)(16)(5)(13)(4)(12)(5)(6)Python 文本挖掘:使用gensim进行文本相似度计算
Python 文本挖掘:使用gensim进行文本相似度计算
在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性。
评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和特性,角度更客观。
那么Python 里面有计算文本相似度的程序包吗,恭喜你,不仅有,而且很好很强大。
这是从52nlp大神的里面发现的,其实具体的处理流程和程序和他的基本一致,只要仔细研读他的这几篇博客文章即可。
(竟然还没提到程序包的名字,退票。。退票。。)
其实题目就讲到了这个包的名字啦:
真心好用,谁用谁知道。。。
接下来主要说一下针对商品评论和商品描述之间的相似度,怎么使用gensim来计算。
1、文本相似度计算的需求始于搜索引擎。
搜索引擎需要计算“用户查询”和爬下来的众多”网页“之间的相似度,从而把最相似的排在最前返回给用户。
2、主要使用的算法是tf-idf
tf:term frequency&词频
idf:inverse document frequency&倒文档频率
主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
第一步:把每个网页文本分词,成为词包(bag of words)。
第三步:统计网页(文档)总数M。
第三步:统计第一个网页词数N,计算第一个网页第一个词在该网页中出现的次数n,再找出该词在所有文档中出现的次数m。则该词的tf-idf 为:n/N * 1/(m/M) &(还有其它的归一化公式,这里是最基本最直观的公式)
第四步:重复第三步,计算出一个网页所有词的tf-idf 值。
第五步:重复第四步,计算出所有网页每个词的tf-idf 值。
3、处理用户查询
第一步:对用户查询进行分词。
第二步:根据网页库(文档)的数据,计算用户查询中每个词的tf-idf 值。
4、相似度的计算
使用余弦相似度来计算用户查询和每个网页之间的夹角。夹角越小,越相似。
主要分成三步。
第一步,计算所有评论的tf-idf 值。
第二步,使用所有评论的tf-idf 值算出商品描述的tf-idf 值。
第三步,计算每一个评论和商品描述之间的tf-idf 余弦相似度。
① 商品评论的储存形式(把Excel 中的评论数据分词并去停用词存储在txt 文档中):
txt 文档。每条评论为一行。分词并去除。效果如下图:
② 使用gensim 计算所有评论的tf-idf 值
# 读取txt 文档中的每条评论并用itertools 的yield 方法存储起来(比起把所有数据存在数组中,使用itertools 的内存效率高,具体原理请google)class MyCorpus(object):
def __iter__(self):
for line in open(datapath):
yield line.split()
from gensim import corpora, models, similarities
# 以下是把评论通过gensim 转化为tf-idf 形式,程序具体解释参见52nlp的博客或gensim官方文档
Corp = MyCorpus()
dictionary = corpora.Dictionary(Corp)
corpus = [dictionary.doc2bow(text) for text in Corp] #把所有评论转化为词包(bag of words)
tfidf = models.TfidfModel(corpus) #使用tf-idf 模型得出该评论集的tf-idf 模型
corpus_tfidf = tfidf[corpus]
#此处已经计算得出所有评论的tf-idf 值
① 整个商品描述只有一行,经过分词和去停用词处理,得到与上面相似的txt 文档。只是它只有一行。
② 把商品描述看成是查询,把商品评论看成是网页,即可计算商品描述的tf-idf 值。
#读取商品描述的txt 文档q_file = open(querypath, 'r')
query = q_file.readline()
q_file.close()
vec_bow = dictionary.doc2bow(query.split()) #把商品描述转为词包
vec_tfidf = tfidf[vec_bow]
#直接使用上面得出的tf-idf 模型即可得出商品描述的tf-idf 值
① 计算相似度,然后写入txt 文档中
index = similarities.MatrixSimilarity(corpus_tfidf) #把所有评论做成索引
sims = index[vec_tfidf]
#利用索引计算每一条评论和商品描述之间的相似度
similarity = list(sims)
#把相似度存储成数组,以便写入txt 文档
sim_file = open(storepath, 'w')
for i in similarity:
sim_file.write(str(i)+'\n')
#写入txt 时不要忘了编码
sim_file.close()
② 写入文档后相似度如图:
最后总的程序如下:
#! /usr/bin/env python2.7
#coding=utf-8
import logging
from gensim import corpora, models, similarities
def similarity(datapath, querypath, storepath):
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
class MyCorpus(object):
def __iter__(self):
for line in open(datapath):
yield line.split()
Corp = MyCorpus()
dictionary = corpora.Dictionary(Corp)
corpus = [dictionary.doc2bow(text) for text in Corp]
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
q_file = open(querypath, 'r')
query = q_file.readline()
q_file.close()
vec_bow = dictionary.doc2bow(query.split())
vec_tfidf = tfidf[vec_bow]
index = similarities.MatrixSimilarity(corpus_tfidf)
sims = index[vec_tfidf]
similarity = list(sims)
sim_file = open(storepath, 'w')
for i in similarity:
sim_file.write(str(i)+'\n')
sim_file.close()
包计算文本相似度基本也是这个步骤。而且gensim 除了提供了tf-idf 算法之外,还提供了LDA,LSV等更先进的方法。请各位客官慢慢享用。。。
我的热门文章
即使是一小步也想与你分享}

我要回帖

更多关于 gensim 词语相似度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信