[将小白进行到底] 如何比较两篇文章的相似度

article/2025/5/17 0:58:08

  其实这个题目已经有很多人写过了,数学之美里就有,最近阮一峰的博客里也写了,本文基本上遵循的就是他的思路,只是让其看起来再小白一点点。其实说白了就是用自己的话,再把同样一件事描述一下,顺便扩扩句,把其中跳跃比较大的部分再补充补充。 阮一峰的原文:http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html 

  当然虽然题目是比较两篇文章的相似性,但我们也不会傻到真拿两篇篇文章来说明,为了简单起见,我们从句子着手。

句子A:周杰伦是一个歌手,也是一个叉叉

句子B:周杰伦不是一个叉叉,但是是一个歌手

  如何比较相似性呢 ? 

  第一步 分词 

句子A : 周杰伦/是/一个/歌手,也/是/一个/叉叉 (注:假设分词也是个牛叉叉,可以识别叉叉这个词)          
句子B: 周杰伦/不/是/一个/叉叉 ,但是/是/一个/歌手 

  第二步 去重复,列出识别的所有单词

周杰伦、是 、不、一个、叉叉 、歌手、但是、也

  第三步 计算词频(这里表示某个词在一个句子里出现的次数)    

句子A: 周杰伦1、是2 、不 0 、一个2、叉叉1、歌手1、但是0、也1
句子B: 周杰伦1、是2 、不 1 、一个2、叉叉1、歌手1、但是1、也0 

  第四步 构造词频向量

句子A  [1 , 2 , 0 , 2 , 1 , 1 , 0 , 1]     
句子B  [1 , 2 , 1 , 2 , 1 , 1 , 0 , 1]   

  上面构造的是两个多维的向量,其中每个维度的值就是词频。 

   OKAY,构造出了上面的二个多维向量后,比较两句话的相似度就 变成了比较这两个向量的相似度了。任何问题只要一变成数学问题,基本上就好解决了  :)  ... ...      

 

  那么如何比较两个向量的相似度呢 。先来点高中数学知识 。    

 

  上图是一个二维向量的几何表示。其中有2个二维向量a。 θ 就是这2个二维向量的夹角;如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似 

   再复习一个初中的知识:余弦定理 (应该是初中吧)    

  假定a向量是[x1,y1] b向量是 [x2,y2] 

 

  那么可以将余弦定理改成下面的形式。   

 

  在原文中直接给了这个结果,这着实有点跳跃,给人以突兀感,主要是因为其中的推导过程给省略了,虽然推导过程确实有点小白,但我们的题目,就是将小白进行到底,所以还是在下面补出来这个过程。因为我不会画图所以直接使用计算机的表示法了。可能不太直观

Cosθ  =  (a^2+b^2-c^2)/2abc 
a^2  =  (x1^2+y1^2) 
b^2  =  (x2^2+y2^2)  
c^2  =  (x2-x1)^2 + (y2-y1)^2  (这个不难理解吧)    
=> 
Cosθ  =  ((x1^2+y1^2) + (x2^2+y2^2) + ((x2-x1)^2 + (y2-y1)^2))/(2sqrt(x1^2+y1^2)*sqrt(x2^2+y2^2))  
=> 
Cosθ  = (x1^2+y1^2+x2^2+y2^2-x2^2-x1^2+2x1x2-y2^2-y1^2+2y1y2/(2sqrt(x1^2+y1^2)*sqrt(x2^2+y2^2))  
=> 
Cosθ  = (2x1x2+y1y2 )/(2sqrt(x1^2+y1^2)*sqrt(x2^2+y2^2))   
=>
Cosθ  = (x1x2+y1y2 )/(sqrt(x1^2+y1^2)*sqrt(x2^2+y2^2)) 

  这样结果就推出来了。 

   我们现在再来总结一下二维向量情况下余弦定理的规律 

  2个二维向量  [x1,y1] [x2,y2] 那么有  

Cosθ  = (x1x2+y1y2 )/(sqrt(x1^2+y1^2)*sqrt(x2^2+y2^2) )

  我们把[x1,y1][x2,y2] 换成  [a1,a2] [b1,b2] 那么

  有2个二维向量 [a1,a2] [b1,b2] 有  

Cosθ  = (a1b1+a2b2 )/(sqrt(a1^2+a2^2)*sqrt(b1^2+b2^2)) 

  数学已经证明,余弦的这种计算扩展到多维向量也是成立的。

  那么 现在我们多一个维度,假设有23维向量,例如 [a1,a2,a3][b1,b2,b3] 会是什么样呢

Cosθ  = (a1b1+a2b2 +a3b3)/(sqrt(a1^2+a2^2+a3^2)*sqrt(b1^2+b2^2+b3^2))   

  那么 n维是什么情况呢 

Cosθ  = (a1b1+a2b2 +a3b3 + .. anbn)/(sqrt(a1^2+a2^2+a3^2 + ... + an^2)*sqrt(b1^2+b2^2+b3^2 + .. + bn^2))  

  下图的表示可能更直观和简洁一些                    

  

  有了这个公式就好办了。我们的两个句子 

句子A  [1 , 2 , 0 , 2 , 1 , 1 , 0 , 1]  
句子B  [1 , 2 , 1 , 2 , 1 , 1 , 0 , 1] 

  那么他们夹角的余弦是多少呢 

Cosθ = (1*1 + 2*2 + 0*1 + 2*2 + 1*1 + 1*1 + 0*0 + 1*1 )/(sqrt(1^2+2^2+0^2+2^2+1^2+1^2+0^2+1^2)*sqrt(1^2+2^2+1^2+2^2+1^2+1^2+1^2+0^2+1^2)) 
=>
Cosθ ≈0.961   

  这个还算是比较高的      

 

转载于:https://www.cnblogs.com/jivi/archive/2013/04/02/2995571.html


http://chatgpt.dhexx.cn/article/1j9lKPWP.shtml

相关文章

文本相似度的检测

项目原理 基于词频:统计文章中词频,构建词频特征向量,利用特征向量夹角的余弦值表示文本的相似度。两篇文章最大相似度为1,特征向量夹角为0。 基于词频的文本相似度检测步骤: 文本1和文本2分词—去停用词统计两篇文章的词频词频向量1和词频向量2相似度的计算分词:例:“…

网页抓取:PHP实现网页爬虫方式小结

抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程有点繁琐。LZ总结了几种常用的、易于实现的网页抓取方式,如果熟悉JQuery选择器,这几种框架会相当简单。 一、Ganon …

php中取页面的值_php如何抓取网页上的数据

php中抓取网页内容的实例详解 方法一:使用file_get_contents方法实现$url "http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml"; $html file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent iconv("gb2312…

关于如何使用PHP抓取网页数据并进行处理的经验

在网络时代,数据是无处不在的。很多时候,我们需要从网页上获取特定的数据,以便进行进一步的处理和分析。而PHP作为一种强大的编程语言,提供了丰富的函数和库来帮助我们实现这个目标。本文将分享一些关于如何使用PHP抓取网页数据并…

php根据URL获得网页内容

php 中根据url来获得网页内容非常的方便&#xff0c;可以通过系统内置函数file_get_contents(),传入url,即可返回网页的内容&#xff0c;比如获得百度首页的内容代码为&#xff1a; <?php $html file_get_contents(http://www.baidu.com/);echo $html; 就可以显示出百度首…

php抓取网页内容,获取网页数据

php通过simple_html_dom实现抓取网页内容&#xff0c;获取核心网页数据&#xff0c;将网页数据写入本地 xxx.json 文件 其代码实现逻辑&#xff1a; 1. 引入simple_html_dom.php文件 require_once simple_html_dom-master/simple_html_dom.php; 2. 获取远程或者本地html文件…

PS Adobe软件使用 快捷键

两年前学的&#xff0c;为了考一个高新 怕自己忘了 仅为防止以后自己忘记而做的备忘笔记&#xff0c;请勿吐槽 图片类型 JPEG 有损压缩格式(能够将图像压缩在很小的储存空间&#xff0c;图像中重复或不重要的资料会被丢失&#xff0c;因此容易造成图像数据的损伤。尤其是…

html选区控制怎么用,ps载入选区的快捷键是什么?

ps载入选区的快捷键是&#xff1a;ALTSO。在ps中&#xff0c;使用“ALTSO”快捷键&#xff0c;会弹出“载入选区”对话框&#xff0c;然后选择相应的通道&#xff0c;点击“确定”&#xff0c;即可载入选区。 ps载入选区有三种方法&#xff1a;右键菜单、ps载入选区快捷键、以及…

计算机中的PS颜色填充快捷键,ps颜色填充快捷键【设置办法】

喜欢使用电脑的小伙伴们一般都会遇到win7系统ps颜色填充快捷键的问题&#xff0c;突然遇到win7系统ps颜色填充快捷键的问题就不知道该怎么办了&#xff0c;其实win7系统ps颜色填充快捷键的解决方法非常简单&#xff0c;按照 1&#xff1a;首先我们先打开打开ps软件&#xff0c;…

html自由变换图形,ps自由变换的快捷键是什么?

在当前图层中&#xff0c;执行“编辑”——“自由变换”&#xff0c;或者使用ps自由变换快捷键ctrlT&#xff0c;周围会出现变换控件定界框。 当我们使用ps自由变换快捷键ctrlT&#xff0c;开启自由变换之后&#xff0c;然后再配合Ctrl、Shift、Alt&#xff0c;可以对图像进行缩…

计算机中的PS颜色填充快捷键,ps颜色填充快捷键【解决技巧】

很多小伙伴都遇到过ps颜色填充快捷键的困惑吧&#xff0c;一些朋友看过网上零散的ps颜色填充快捷键的处理方法&#xff0c;并没有完完全全明白ps颜色填充快捷键是如何解决的&#xff0c;今天小编准备了简单的解决办法&#xff0c;只需要按照 1&#xff1a;首先我们先打开打开ps…

计算机中的PS颜色填充快捷键,ps中填充颜色的快捷键是什么(填充Shift+F5)

很多小伙伴都遇到过ps颜色填充快捷键的困惑吧&#xff0c;一些朋友看过网上零散的ps颜色填充快捷键的处理方法&#xff0c;并没有完完全全明白ps颜色填充快捷键是如何解决的&#xff0c;今天小编准备了简单的解决办法&#xff0c;只需要按照下面方法操作就行。 PS填充快捷键是S…

PS常用快捷键

PS常用快捷键 1. PS工具快捷键2. 常用的通用快捷键2.1 文档操作2.2 画面显示操作2.3 其他操作 3. 图层操作的快捷键4. 图像调整操作快捷键5. 移动工具模式快捷键6. 选区类工具模式快捷键6.1 选框工具模式6.2 套索工具模式6.3 快速选择工具模式 7. 画笔工具模式快捷键 声明&…

html5如何快速选择工具,PS快速选择工具怎么使用?快捷键是什么?

快速选择工具是创建选区时使用频率相当高的一个工具&#xff0c;不但使用起来十分方便&#xff0c;创建的选区精度也十分高。下面我们就一起来看看PS快速选择工具怎么使用&#xff1f;快捷键是什么吧&#xff01; 1、快速选择工具 快速选择工具使用一个可以调节大小的原型笔尖来…

Ps怎么进行反选

Ps怎么进行反选&#xff0c;ps是我们日常生活中也会经常用到的一款强大的图像处理软件&#xff0c;不论是美工还是平面设计师、插画设计师等等&#xff0c;都会用到ps软件&#xff0c;那么在ps软件里面&#xff0c;怎么样对图像进行反选&#xff1f;其实也很简单哦&#xff01;…

应用商店的ASO和搜索引擎的SEO的区别

ASO和SEO&#xff0c;目标相似&#xff0c;有着异曲同工之妙&#xff0c;两者都是提高搜索排名的方式&#xff0c;具体有什么区别呢&#xff1f;今天柚鸥ASO给大家做一下总结。 SEO是指搜索引擎优化&#xff0c;利用搜索引擎的规则来提高网站&#xff08;例如&#xff1a;百度…

关于ASO优化和ASM投放

ASO是指应用商店搜索优化&#xff0c;有助于提高应用商店中产品的访问量和下载转化率。ASM是指官方应用市场提供的竞价广告位。无论进行的是ASO优化还是ASM投放&#xff0c;我们都要给应用进行标题、副标题、关键词、详情描述、截图预览、视频预览进行具体设置和初步优化。 应…

aso是做什么的_ASOer的目标

ASO是“应用商店优化”的简称。ASO(App store Optimization)就是提升你APP在各类APP应用商店/市场排行榜和搜索结果排名的过程。类似普通网站针对搜索引擎的优化,即SEO(Search Engine Optimization)优化。 ASO优化就是利用App Store的搜索规则和排名规则让APP更容易被用户搜…

ASO优化之应用商店关键词的实现

投放正确的合适的关键词&#xff0c;能够确保我们的应用获得更高的相关性和知名度。如果我们已经完成研究并想要竞争目标关键词&#xff0c;就需要在商品详情中去实施投放它们。 要在 Google Play Store 中投放——我们要打开 Google Play 控制台并点击“主要应用详情”选项卡…

海外ASO优化之如何给应用选择正确的类别

将我们的应用程序放在Apple App Store和Google Play正确的类别中&#xff0c;不仅对按类别浏览应用的用户有帮助&#xff0c;而且能够帮助我们的应用程序获得良好排名。 1、应用程序属于多个类别的解决方案。 需要选择最能描述我们应用程序的类别&#xff0c;检查一下每个类别…