4个文本相似度计算基础案例

引言:文本相似度概念与Gensim库简介

文本相似度,简单来说,就是衡量两段文本在内容上的接近程度。它广泛应用于信息检索、文本分类、推荐系统等领域,帮助我们理解文本间的内在关联。今天,我们将借助强大的自然语言处理库——Gensim,结合其提供的TF-IDF(Term Frequency-Inverse Document Frequency)算法,通过四个实战案例来探索文本相似度计算的世界。

案例1:构建TF-IDF模型并分析单篇文档

导入所需库与数据准备

首先,确保已安装gensimpandas库,然后导入它们:

import gensim
import pandas as pd

接下来,我们使用一个简单的文本数据集作为示例:

data = ["This is a sample document about Python programming.",
        "Another document discussing machine learning techniques."]

使用Gensim创建TF-IDF模型

利用Gensim的TfidfModel,我们可以轻松构建TF-IDF模型:

from gensim.corpora import Dictionary
from gensim.models import TfidfModel

# 创建词典(Dictionary),将文本转换为词袋表示
dictionary = Dictionary([doc.split() for doc in data])
corpus = [dictionary.doc2bow(doc.split()) for doc in data]

# 基于词袋表示创建TF-IDF模型
tfidf_model = TfidfModel(corpus)

分析单篇文档TF-IDF权重

现在,让我们选取第一篇文档,计算其各词项的TF-IDF权重:

first_doc_bow = corpus[0]
first_doc_tfidf = tfidf_model[first_doc_bow]

for word_id, tfidf_score in first_doc_tfidf:
    print(f"Word: {dictionary[word_id]}, TF-IDF Score: {tfidf_score}")

这段代码将展示该文档中每个词项的TF-IDF得分,直观反映其在文档中的重要性。

案例2:计算两篇文档间的相似度

准备对比文档对

继续使用上述数据集中的两篇文档进行对比:

doc1 = "This is a sample document about Python programming."
doc2 = "Another document discussing machine learning techniques."

应用TF-IDF模型计算相似度

Gensim提供similarity_matrix方法,可以计算文档间的余弦相似度:

from gensim.similarities import SparseMatrixSimilarity

# 将文档转化为TF-IDF向量
doc1_tfidf_vec = tfidf_model[dictionary.doc2bow(doc1.split())]
doc2_tfidf_vec = tfidf_model[dictionary.doc2bow(doc2.split())]

# 计算两文档的相似度
similarity = gensim.matutils.cossim(doc1_tfidf_vec, doc2_tfidf_vec)
print(f"Document Similarity: {similarity:.4f}")

结果解读与可视化

数值越接近1,说明两文档越相似。可以使用matplotlib等库绘制散点图,直观展示两文档在TF-IDF空间中的相对位置及其余弦相似度。

案例3:批量计算文档集合间相似度矩阵

数据集导入与预处理

此处假设有一个包含多篇文档的数据集,存储在CSV文件中,结构如下:

idtext
1
2
df = pd.read_csv("documents.csv")
texts = df["text"].tolist()

接下来,重复案例1中的步骤构建TF-IDF模型和计算相似度矩阵:

corpus = [dictionary.doc2bow(doc.split()) for doc in texts]
tfidf_model = TfidfModel(corpus)

# 计算相似度矩阵
index = SparseMatrixSimilarity(tfidf_model[corpus], num_features=len(dictionary))

构建TF-IDF模型并计算相似度矩阵

index对象现在包含了所有文档间的相似度矩阵。我们可以提取特定文档对的相似度,或进行聚类分析以识别文本主题。

探索相似度矩阵与聚类分析

使用scipy.sparse库将相似度矩阵转换为稀疏矩阵,便于进一步操作。例如,可以使用scipy.cluster.hierarchy.linkage进行层次聚类,可视化文档间的亲疏关系。

案例4:基于TF-IDF的文档检索系统搭建

设计检索系统架构

系统主要包括三个部分:用户查询处理、文档库匹配、结果展示与评估。

1.用户查询处理 :接收用户输入的查询文本,将其转换为TF-IDF向量。
2.文档库匹配 :计算查询向量与文档库中各文档的相似度,按相似度排序。
3.结果展示与评估 :返回最相关的文档列表,可选地展示相似度分数。定期评估检索系统的查准率、查全率等指标。

实现用户查询与文档库匹配

def retrieve_documents(query, top_n=10):
    query_tfidf_vec = tfidf_model[dictionary.doc2bow(query.split())]
    
    # 计算查询与文档库中各文档的相似度
    sims = index[query_tfidf_vec]
    
    # 按相似度降序排序文档ID
    sorted_indices = sims.argsort()[::-1][:top_n]
    
    return sorted_indices

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/591182.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

理想二极管LM74700QDBVRQ1

LM74700QDBVRQ1 防反接专用芯片 器件手册 应用参考(下图是另外一个理想二极管应用电路图) 这两款芯片的区别主要是工作电压范围不同(实际应用是) 电源远端电压补偿-CSDN博客https://blog.csdn.net/anlog/article/details/1338627…

顶顶顶顶顶顶顶顶顶顶顶顶

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

SVM单类异常值检测

SVM是一种广泛使用的分类器,通常用于二分类或多分类问题。然而,在异常点检测的场景中,我们通常会将数据视为一个类别(即正常数据点),并尝试找到那些与正常数据点显著不同的点(即异常点&#xff…

jQuery的简单使用

jQuery的简单使用 jQuery查找父、子、兄弟节点jQuery查找内容元素筛选遍历元素操作元素width() / height() 设置宽高.css() 设值样式attr() / prop() 设置属性增加、删除、切换class删除和清空 操作元素总结选择表达式链式操作取值和赋值函数 HTML_1 <table id"table_…

利用大模型提升个性化推荐的异构知识融合方法

在推荐系统中&#xff0c;分析和挖掘用户行为是至关重要的&#xff0c;尤其是在美团外卖这样的平台上&#xff0c;用户行为表现出多样性&#xff0c;包括不同的行为主体&#xff08;如商家和产品&#xff09;、内容&#xff08;如曝光、点击和订单&#xff09;和场景&#xff0…

C++奇迹之旅:C++内存管理的机制(终篇)

文章目录 &#x1f4dd;malloc/free和new/delete的区别&#x1f6a8; 内存泄漏&#x1f3af;什么是内存泄漏&#xff0c;内存泄漏的危害 &#x1f3af;内存泄漏分类&#x1f3af;如何检测内存泄漏&#x1f3af;如何避免内存泄漏 &#x1f6a9;总结 &#x1f4dd;malloc/free和n…

[XYCTF新生赛]-PWN:guestbook1解析(程序自带栈迁移,off by one覆盖rbp一字节实现栈迁移)

查看保护 查看ida 这里可以覆盖rbp最后一个字节&#xff0c;而且程序会执行两次leave ret 完整exp&#xff1a; from pwn import* #pprocess(./guestbook) premote(gz.imxbt.cn,20073) backdoor0x00401328for i in range(33):p.sendlineafter(index,str(i))payloadp64(backdo…

多模态大语言模型和 Apple 的 MM1

原文地址&#xff1a;multimodal-large-language-models-apples-mm1 2024 年 4 月 13 日 抽象是计算机科学中最关键的概念之一&#xff0c;具有一些最强大的影响。从简单的角度来看&#xff0c;抽象就是将某一事物应用于多种不同情况的能力。例如&#xff0c;如果你创造了一种…

如何让 PDF 书签从杂乱无序整洁到明丽清新

1、拉取书签&#xff08;详细步骤看文末扩展阅读&#xff09; 原状态 —— 杂乱无序 自动整理后的状态 —— 错落有致&#xff0c;但摩肩接踵 2、开始整理 全选自动整理后的书签&#xff0c;剪切 访问中英混排排版优化 - 油条工具箱 https://utils.fun/cn-en 1 粘贴 → 2 …

R语言数据探索和分析7-使用随机森林模型对中国GDP及其影响因素分析

一、研究背景和意义 国内生产总值&#xff08;GDP&#xff09;是宏观经济领域中最为关注的经济统计数据之一&#xff0c;它反映了一个国家或地区在一定时期内所创造的所有最终商品和服务的总价值。GDP的增长率不仅仅是一个国家经济健康状况的关键指标&#xff0c;还直接关系到…

leetCode68. 文本左右对齐

基本思路&#xff1a; leetCode68. 文本左右对齐 代码 class Solution { public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> res;for(int i 0; i < words.size(); i){ // 枚举有多少个单词int j i 1; //…

【JVM】内存调优——内存泄漏、内存溢出

内存调优 什么是内存泄漏、内存泄漏&#xff1f; 内存泄漏&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收。内存溢出&#xff1a;内存的使用量超过了Java虚拟机可以分配的上限&#xff…

数字孪生不能接入数据,那还叫数字孪生吗?花架子而已

Hi&#xff0c;我是贝格前端工场&#xff0c;经常给大家分享可视化和数字孪生项目&#xff0c;就有一些老铁说这个不能接入真实数据&#xff0c;是个花架子。我就乐啦&#xff0c;不接入数据那还叫数字孪生吗&#xff1f; 数字孪生是指通过数字化技术对实体世界进行建模、仿真和…

[1702]java旅游资源网上填报系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java旅游资源网上填报系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

「 网络安全常用术语解读 」SBOM主流格式SWID详解

国际标准化组织&#xff08;ISO&#xff09;和国际电工委员会&#xff08;International Electrotechnical Commission&#xff0c;IEC&#xff09;发布了ISO/IEC 19770-2软件标识&#xff08;Software Identification&#xff0c;SWID&#xff09;标签标准&#xff0c;该标准定…

数据结构与算法---线性表

线性表 1.顺序表 需求分析 /*创建顺序表具体功能&#xff1a;初始化顺序表销毁顺序表获取顺序表元素个数输出顺序表中的内容自动扩容增 --- 插入数据&#xff08;包含了尾部添加功能&#xff09;删 --- 删除数据&#xff08;包含了尾部删除功能&#xff09;改 --- 修改数据查…

(ARM)ORACLE JDK 22 的下载安装及环境变量的配置

目录 获取JDK 安装JDK 配置JAVA环境变量 其他补充&#xff1a;JDK 22的新特征 1. 语法 2. 库 3. 性能 4. 工具 在今年的3月份&#xff0c;ORACLE 更新了的JDK 发行版 JDK 22&#xff0c;作为了一位ORACLE Primavera系列产品的研究者&#xff0c;其实对JDK的迭代完全不感…

基于.NET WinForms 数据的CURD实现

开发工具 VS 2022 C#&#xff0c;数据库MS SQL SERVER 2019 1.WinForms界面 2.使用SqlDataApater DataSet DataGridView 读取数据 private void ReadData() {//数据库连接串string strConn "Data Source127.0.0.1;Initial CatalogTEST;Persist Security InfoTrue;Us…

Vue 组件通信

组件通信 组件与组件之间的数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据。通过组件通信&#xff0c;可以访问其他组件的数据。 组件关系 父子关系非父子关系 组件通信解决方案 父子关系 父->子 父组件通过props将数据传递给子组件 App.vue …

模式识别作业:颜色算子的三种阈值分割算法

一、引言&#xff1a; 在图像处理中&#xff0c;我们往往需要提取图像的一些关键信息&#xff0c;比如本篇文章的内容——提取颜色&#xff0c;然而当我们需要提取某一种颜色时&#xff0c;无论图像余下的部分如何“丰富多彩”&#xff0c;他们都不再重要&#xff0c;需要被忽…
最新文章