Python使用gensim计算文档相似性

yizhihongxing

使用gensim计算文档相似性可以比较方便地计算两个文本之间的相似度。以下是详细的攻略:

1.准备工作

首先需要安装gensim库,可以使用pip在命令行中安装:

pip install gensim

2.数据准备

在计算文档的相似性之前,需要准备好待比较的文本数据。可以准备两个文本文件,并将它们以字符串的形式读入python中。下面是示例代码:

with open('file1.txt','r') as f1, open('file2.txt','r') as f2:
    text1 = f1.read()
    text2 = f2.read()

3.文本预处理

在使用gensim库计算文档相似性之前,需要对文本进行预处理,如去除标点符号、停用词等。gensim库中有封装好的函数可以进行文本预处理。

下面是一个示例,其中我们使用gensim自带的简单文本预处理功能:

from gensim.parsing.preprocessing import preprocess_string

def preprocess(text):
    """
    进行简单的文本预处理
    """
    return preprocess_string(text)

processed_text1 = preprocess(text1)
processed_text2 = preprocess(text2)

4.生成gensim字典和向量

在计算文档相似性之前,需要先将文本转换成gensim可以处理的格式。首先需要生成gensim字典,这个字典将把不同的文本单词映射到不同的数字id。然后,可以使用字典生成gensim向量,这个向量将记录相关单词在待比较文本中出现的次数。

下面是一个示例,其中使用gensim中的Dictionary和doc2bow函数进行字典和向量生成:

from gensim.corpora.dictionary import Dictionary
from gensim.matutils import corpus2dense

# 生成字典
dct = Dictionary([processed_text1, processed_text2])

# 将文本转换成gensim向量
vec1 = dct.doc2bow(processed_text1)
vec2 = dct.doc2bow(processed_text2)

# 将gensim向量转换成numpy array
dense1 = corpus2dense([vec1], num_terms=len(dct)).T[0]
dense2 = corpus2dense([vec2], num_terms=len(dct)).T[0]

以上代码中的dense1和dense2就是gensim向量转换后的numpy数组。

5.使用余弦相似度计算文档相似度

在gensim中,可以使用余弦相似度来计算两个文档之间的相似度。具体实现如下:

from numpy import linalg
from numpy import dot

cos_sim = dot(dense1, dense2) / (linalg.norm(dense1) * linalg.norm(dense2))

以上代码中的cos_sim就是两个文档之间的余弦相似度。

示例1:计算两个新闻报道的相似度

假设我们有两篇新闻报道,如下所示:

文本1:中国小汽车总量达到两亿辆

文本2:中国汽车市场产销量持续稳定增长

首先,需要将这两篇报道读入python中:

with open('news1.txt','r') as f1, open('news2.txt','r') as f2:
    text1 = f1.read()
    text2 = f2.read()

然后进行简单的文本预处理:

processed_text1 = preprocess(text1)
processed_text2 = preprocess(text2)

接着生成gensim向量:

# 生成字典
dct = Dictionary([processed_text1, processed_text2])

# 将文本转换成gensim向量
vec1 = dct.doc2bow(processed_text1)
vec2 = dct.doc2bow(processed_text2)

# 将gensim向量转换成numpy array
dense1 = corpus2dense([vec1], num_terms=len(dct)).T[0]
dense2 = corpus2dense([vec2], num_terms=len(dct)).T[0]

最后计算余弦相似度:

cos_sim = dot(dense1, dense2) / (linalg.norm(dense1) * linalg.norm(dense2))
print("文本1和文本2的相似度:", cos_sim)

执行上述代码,可以得到输出结果:

文本1和文本2的相似度: 0.36514837

示例2:计算两篇博客内容的相似度

假设我们有两篇博客,如下所示:

文本1:Python中的匿名函数与lambda表达式

文本2:Python 3.6中新的特性及改进

首先,需要将这两篇博客读入python中:

with open('blog1.txt','r') as f1, open('blog2.txt','r') as f2:
    text1 = f1.read()
    text2 = f2.read()

然后进行简单的文本预处理:

processed_text1 = preprocess(text1)
processed_text2 = preprocess(text2)

接着生成gensim向量:

# 生成字典
dct = Dictionary([processed_text1, processed_text2])

# 将文本转换成gensim向量
vec1 = dct.doc2bow(processed_text1)
vec2 = dct.doc2bow(processed_text2)

# 将gensim向量转换成numpy array
dense1 = corpus2dense([vec1], num_terms=len(dct)).T[0]
dense2 = corpus2dense([vec2], num_terms=len(dct)).T[0]

最后计算余弦相似度:

cos_sim = dot(dense1, dense2) / (linalg.norm(dense1) * linalg.norm(dense2))
print("文本1和文本2的相似度:", cos_sim)

执行上述代码,可以得到输出结果:

文本1和文本2的相似度: 0.53033006

通过上述示例可以看出,在使用gensim计算文档相似性时,需要先进行简单的文本预处理,然后生成gensim字典和向量,最后使用余弦相似度计算两个文档之间的相似度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python使用gensim计算文档相似性 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python 3.7 数据类中的类继承

    【问题标题】:Class inheritance in Python 3.7 dataclassesPython 3.7 数据类中的类继承 【发布时间】:2023-04-05 07:29:02 【问题描述】: 我目前正在尝试 Python 3.7 中引入的新数据类结构。我目前坚持尝试对父类进行一些继承。看起来参数的顺序被我当前的方法搞砸了,因此子类中的 bo…

    Python开发 2023年4月5日
    00
  • Python采集热搜数据实现详解

    本攻略将介绍如何使用Python采集热搜数据,以及如何将数据保存到本地文件中。我们将使用requests库来发送HTTP请求,使用BeautifulSoup库来解析HTML页面,以及使用pandas库来处理数据。 实现Python采集热搜数据 以下是一个示例代码,用于实现Python采集热搜数据: import requests from bs4 impor…

    python 2023年5月15日
    00
  • 使用Numpy和Matplotlib绘制正态分布图

    好的。首先,我们需要简单介绍一下Numpy和Matplotlib这两个库。 Numpy NumPy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时也针对数组运算提供大量的数学函数库。这是 Python 语言的开源软件之一,也是数据分析、数据处理和科学计算等领域最常用的库之一。 Matplotlib…

    python-answer 2023年3月25日
    00
  • windows下安装Python的XlsxWriter模块方法

    下面是”windows下安装Python的XlsxWriter模块方法”的完整实例教程: 确定Python版本 在安装XlsxWriter之前,需要先确定Python版本。可以打开命令行,输入以下代码查看Python版本: python –version 如果Python版本是2.x,就需要安装XlsxWriter的1.x版本;如果Python版本是3.x…

    python 2023年5月13日
    00
  • Python中取整的几种方法小结

    Python中取整的几种方法小结 在Python中,取整是非常常见的操作。在进行数据处理、算法实现等场景中,我们很容易需要对浮点数进行取整操作。本文将介绍Python中取整的几种方法,并对每一种方法进行详细的讲解。 方法一:向下取整 – math.floor() 向下取整即将浮点数向小的方向取整,也就是看作它左侧的最近的整数。在Python中,我们可以使用m…

    python 2023年5月14日
    00
  • Redis 如何实现分布式任务队列?

    以下是 Redis 如何实现分布式任务队列的完整使用攻略。 Redis 分布式任务队列简介 在分布式系统中,为了实现任务的异步处理和解耦,需要使用分布式任务队列Redis 作为一种高能的存储数据库,可以很好地实现分布式任务队列。 Redis 分布式任务队列实现原理利用 Redis 的 List结构,将任务放入队列中,使用 RPOP 命令从队列中取出任务进行处…

    python 2023年5月12日
    00
  • Python里的dict和set的背后小秘密

    当我们在Python中使用dict(字典)和set(集合)这两种数据结构时,它们的背后其实有许多小秘密。在本文中,我们将简要地介绍这些秘密。 Python字典(dict)的小秘密 接受任意类型作为键名 Python的字典是一种哈希表,允许使用任意可哈希(hashable)的数据类型作为键名。哈希表使用键名的哈希值来快速定位键值对,因此键名必须是不可变的(im…

    python 2023年5月13日
    00
  • Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)

    PyCharm是一款流行的Python集成开发环境,可以帮助我们更方便地开发Python应用程序。Pipenv是Python中的虚拟环境管理工具,可以帮助我们更好地管理Python依赖项。本文将详细讲解如何在PyCharm中使用Pipenv新建虚拟环境,包括安装Pipenv、创建虚拟环境、安装依赖项等。 安装Pipenv 要使用Pipenv,我们需要先安装P…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部