转自:http://rzcoding.blog.163.com/blog/static/2222810172013101895642665/

在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性。

评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和特性,角度更客观。
那么Python 里面有计算文本相似度的程序包吗,恭喜你,不仅有,而且很好很强大。
这是从52nlp大神的博客里面发现的,其实具体的处理流程和程序和他的基本一致,只要仔细研读他的这几篇博客文章即可。
(竟然还没提到程序包的名字,退票。。退票。。)
其实题目就讲到了这个包的名字啦:gensim
真心好用,谁用谁知道。。。
接下来主要说一下针对商品评论和商品描述之间的相似度,怎么使用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()

Python 文本挖掘:使用gensim进行文本相似度计算相关推荐

  1. 文本相似度计算python lda_如何识别“答非所问”?使用gensim进行文本相似度计算...

    在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性. 评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和 ...

  2. 如何识别“答非所问”?使用gensim进行文本相似度计算

    在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性. 评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和 ...

  3. 文本相似度计算——Simhash算法(python实现)

    互联网网页存在着大量重复内容,必须有一套高效的去重算法,否则爬虫将做非常多的无用功,工作时效性无法得到保证,更重要的是用户体验也不好.业界关于文本指纹去重的算法众多,如 k-shingle 算法.go ...

  4. python余弦定理_余弦定理与文本相似度

    什么是余弦定理 学过向量代数的人都知道,向量实际上是多维空间中有方向的线段.如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近.而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角了 ...

  5. 最准的中文文本相似度计算工具

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx text2vec, chinese text to vetor.(文本向量化表示工具,包括词向 ...

  6. sklearn tfidf求余弦相似度_【基础算法 】文本相似度计算

    在自然语言处理中,文本相似度是一种老生常谈而又应用广泛的基础算法模块,可用于地址标准化中计算与标准地址库中最相似的地址,也可用于问答系统中计算与用户输入问题最相近的问题及其答案,还可用于搜索中计算与输 ...

  7. 中文文本相似度计算工具集

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 一.基本工具集 1.分词工具 a.jieba 结巴中文分词 htt ...

  8. 使用BERT做中文文本相似度计算与文本分类

    转载请注明出处,原文地址: https://terrifyzhao.github.io/2018/11/29/使用BERT做中文文本相似度计算.html 简介 最近Google推出了NLP大杀器BER ...

  9. 结巴分词关键词相似度_中文文本相似度计算工具集

    [磐创AI导读]:前两篇文章中我们介绍了一些机器学习不错的项目合集和深度学习入门资源合集,本篇文章将对中文文本相似度计算工具做一次汇总.喜欢我们文章的小伙伴,欢迎大家点击上方蓝字关注我们的公众号:磐创 ...

  10. 词向量 文本相似度计算

     一.abstract 为把人们所理解的自然语言让计算机也能够认识并且操作,需要将人的语言(即文字)转换成计算机的语言(即数字) 二 .词的两种表示方法 1.1离散表示(one-hot represe ...

最新文章

  1. laravel blade模板
  2. c++协程4 (boost::coroutine)
  3. wifi 小米pro 驱动 黑苹果_搞定小米黑苹果自带WIF,又可省一个USB接口了
  4. pythoncookie自动模拟登录_用Python模拟技巧带你实现自动抽屉登录自动点赞
  5. RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN模板
  6. c++ python opencv_从C++到Python的OpenCV垫
  7. python 文件函数_python文件操作及函数学习
  8. WEB开发中常用的正则表达式
  9. docker学习系列11 多阶段镜像构建
  10. 阿里云ECS+Nginx+nginx_rtmp_module+FFMPEG服务器搭建过程
  11. 声控报警器c语言程序,声控报警器(声控电路)
  12. PyQt5 -- 安装与发布
  13. 微信小程序静态页面的实现
  14. PTA 求链式线性表的倒数第K项 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
  15. 聊聊flink的consecutive windowed operations 1
  16. C++ 16进制日志输出 每行右侧ASII输出
  17. Greenplum初始化数据库时出现gpadmin-[ERROR]:-gpstart error: Do not have enough valid segments to start the arr
  18. 2021年区域赛ICPC沈阳站J-Luggage Lock(代码简洁)
  19. DDR是什么,干什么用
  20. AR vs VR:哪种技术更有潜力改变未来?

热门文章

  1. 用DIB位图显示图像
  2. laravel-echo-server 不接收失败_6所高校公布报名不合格名单!这些问题最容易出错...
  3. 300多分学计算机去哪个学校,300分能上什么大学 2021年300分左右的学校
  4. python闭包有什么作用_闭包在实际开发中有什么用?
  5. python如何输入n个数字_python如何一次性输入多个数
  6. 如何成为Emacs高手,像神一样使用编辑器
  7. 谷歌研发开源协议,助听器有望原生支安卓系统
  8. 【Java 8实战】Extension Methods
  9. 【Asp.Net】GridView控件中Datakeys和DataKeyNames的说明
  10. VS2010 TFS 如何把一个项目添加到源代码管理中及其他管理