Python+gensim实现文本相似度分析详解

 更新时间:2023年07月28日 10:26:29   作者:小基基o_O  
这篇文章主要介绍了Python+gensim实现文本相似度分析详解,在开发中我们会遇到进行文本相似度分析的需求,计算文本相似度,用于鉴别文章是否存在抄袭,需要的朋友可以参考下

1、gensim使用流程

在这里插入图片描述

2、代码实现

from jieba import lcut
from gensim.similarities import SparseMatrixSimilarity
from gensim.corpora import Dictionary
from gensim.models import TfidfModel
# 文本集和搜索词
texts = ['吃鸡这里所谓的吃鸡并不是真的吃鸡,也不是谐音词刺激的意思',
         '而是出自策略射击游戏《绝地求生:大逃杀》里的台词',
         '我吃鸡翅,你吃鸡腿']
keyword = '玩过吃鸡?今晚一起吃鸡'
# 1、将【文本集】生成【分词列表】
texts = [lcut(text) for text in texts]
# 2、基于文本集建立【词典】,并获得词典特征数
dictionary = Dictionary(texts)
num_features = len(dictionary.token2id)
# 3.1、基于词典,将【分词列表集】转换成【稀疏向量集】,称作【语料库】
corpus = [dictionary.doc2bow(text) for text in texts]
# 3.2、同理,用【词典】把【搜索词】也转换为【稀疏向量】
kw_vector = dictionary.doc2bow(lcut(keyword))
# 4、创建【TF-IDF模型】,传入【语料库】来训练
tfidf = TfidfModel(corpus)
# 5、用训练好的【TF-IDF模型】处理【被检索文本】和【搜索词】
tf_texts = tfidf[corpus]  # 此处将【语料库】用作【被检索文本】
tf_kw = tfidf[kw_vector]
# 6、相似度计算
sparse_matrix = SparseMatrixSimilarity(tf_texts, num_features)
similarities = sparse_matrix.get_similarities(tf_kw)
for e, s in enumerate(similarities, 1):
    print('kw 与 text%d 相似度为:%.2f' % (e, s))

打印结果

keyword 与 text1 相似度为:0.65
keyword 与 text2 相似度为:0.00
keyword 与 text3 相似度为:0.12

3、过程拆解

3.1、生成分词列表

对文本集中的文本进行 中文分词,返回分词列表

格式如下:

[‘word1’, ‘word2’, ‘word3’, …]

import jieba
text = '七月七日长生殿,夜半无人私语时。'
words = jieba.lcut(text)
print(words)

[‘七月’, ‘七日’, ‘长生殿’, ‘,’, ‘夜半’, ‘无人’, ‘私语’, ‘时’, ‘。’]

3.2、基于文本集建立词典,获取特征数

  • corpora.Dictionary:建立词典
  • len(dictionary.token2id):词典中词的个数
from gensim import corpora
import jieba
# 文本集
text1 = '坚果果实'
text2 = '坚果实在好吃'
texts = [text1, text2]
# 将文本集生成分词列表
texts = [jieba.lcut(text) for text in texts]
print('文本集:', texts)
# 基于文本集建立词典
dictionary = corpora.Dictionary(texts)
print('词典:', dictionary)
# 提取词典特征数
feature_cnt = len(dictionary.token2id)
print('词典特征数:%d' % feature_cnt)

打印结果

文本集: [[‘坚果’, ‘果实’], [‘坚果’, ‘实在’, ‘好吃’]]

词典: Dictionary(4 unique tokens: [‘坚果’, ‘果实’, ‘好吃’, ‘实在’])

词典特征数:4

3.3、基于词典建立语料库

语料库即存放稀疏向量的列表

from gensim import corpora
import jieba
text1 = '来东京吃东京菜'
text2 = '东京啊东京啊东京'
texts = [text1, text2]
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
print('词典(字典):', dictionary.token2id)
# 基于词典建立新的【语料库】
corpus = [dictionary.doc2bow(text) for text in texts]
print('语料库:', corpus)

打印结果

词典(字典): {‘东京’: 0, ‘吃’: 1, ‘来’: 2, ‘菜’: 3, ‘啊’: 4}
语料库: [[(0, 2), (1, 1), (2, 1), (3, 1)], [(0, 3), (4, 2)]]

3.3.1、doc2bow函数

1、将所有单词取【集合】,并对每个单词分配一个ID号

['东京', '啊', '东京', '啊', '东京']为例

对单词分配ID: 东京04

变成: [0, 4, 0, 4, 0]

2、转换成 稀疏向量

03个,即表示为( 0, 3)

42个,即表示为( 4, 2)

最终结果:[( 0, 3), ( 4, 2)]

3.3.2、搜索词也转成稀疏向量

from gensim import corpora
import jieba
text1 = '南方医院无痛人流'
text2 = '北方人流落南方'
texts = [text1, text2]
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
# 用【词典】把【搜索词】也转换为【稀疏向量】
keyword = '无痛人流'
kw_vector = dictionary.doc2bow(jieba.lcut(keyword))
print(kw_vector)

[(0, 1), (3, 1)]

3.4、用语料库训练TF-IDF模型

  • TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
from gensim import corpora, models, similarities
import jieba
text1 = '南方医院无痛人流'
text2 = '北方人流浪到南方'
texts = [text1, text2]
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
feature_cnt = len(dictionary.token2id.keys())
corpus = [dictionary.doc2bow(text) for text in texts]
# 用语料库来训练TF-IDF模型
tfidf = models.TfidfModel(corpus)
print(tfidf) 
TfidfModel(num_docs=2, num_nnz=9)

3.5、相似度计算

from gensim import corpora, models, similarities
import jieba
text1 = '无痛人流并非无痛'
text2 = '北方人流浪到南方'
texts = [text1, text2]
keyword = '无痛人流'
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
num_features = len(dictionary.token2id)
corpus = [dictionary.doc2bow(text) for text in texts]
tfidf = models.TfidfModel(corpus)
new_vec = dictionary.doc2bow(jieba.lcut(keyword))
# 相似度计算
index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features)
print('\nTF-IDF模型的稀疏向量集:')
for i in tfidf[corpus]:
    print(i)
print('\nTF-IDF模型的keyword稀疏向量:')
print(tfidf[new_vec])
print('\n相似度计算:')
sim = index[tfidf[new_vec]]
for i in range(len(sim)):
    print('第', i+1, '句话的相似度为:', sim[i])

  • 注释

到此这篇关于Python+gensim实现文本相似度分析详解的文章就介绍到这了,更多相关Python文本相似度分析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pycharm中如何编写Bash批处理命令

    Pycharm中如何编写Bash批处理命令

    这篇文章主要介绍了Pycharm中如何编写Bash批处理命令,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python使用future处理并发问题方案详解

    Python使用future处理并发问题方案详解

    从Python3.2引入的concurrent.futures模块,Python2.5以上需要在pypi中安装futures包。future指一种对象,表示异步执行的操作。这个概念的作用很大,是concurrent.futures模块和asyncio包的基础
    2023-02-02
  • 打包Python代码的常用方法小结

    打包Python代码的常用方法小结

    Python是一门强大的编程语言,但在将Python代码分享给其他人时,让他们安装Python解释器并运行脚本可能有点繁琐,这时,将Python代码打包成可执行的应用程序(.exe)可以大大简化这个过程,本文将介绍几种常用的方法,轻松地将Python代码变成独立的可执行文件
    2023-11-11
  • TensorFlow-gpu和opencv安装详细教程

    TensorFlow-gpu和opencv安装详细教程

    这篇文章主要介绍了TensorFlow-gpu和opencv安装过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 一文教你掌握Python中Lambda表达式的5种实用技巧

    一文教你掌握Python中Lambda表达式的5种实用技巧

    在Python编程的宇宙里,有一个强大而灵活的工具经常被高效的程序员所利用——那就是Lambda表达式,下面就让我们深入了解Lambda表达式的妙用吧
    2024-01-01
  • Python Django的安装配置教程图文详解

    Python Django的安装配置教程图文详解

    Django是一个开放源代码的Web应用框架,由Python写成,Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。这篇文章主要介绍了Python Django的安装配置,需要的朋友可以参考下
    2019-07-07
  • Python的pandas类库结构参数

    Python的pandas类库结构参数

    pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具,需要的朋友可以参考下
    2023-07-07
  • python中实现定制类的特殊方法总结

    python中实现定制类的特殊方法总结

    这篇文章主要介绍了python中实现定制类的特殊方法总结,本文讲解了__str__、__iter__、__getitem__、__getattr__、__call__等特殊方法,需要的朋友可以参考下
    2014-09-09
  • Python ConfigParser库轻松读写INI文件实例探究

    Python ConfigParser库轻松读写INI文件实例探究

    这篇文章主要为大家介绍了Python ConfigParser库轻松读写INI文件实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python tcp传输代码实例解析

    Python tcp传输代码实例解析

    这篇文章主要介绍了Python tcp传输代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论