句子相似度--余弦相似度算法的实现

  • 1、余弦相似度

余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。

                             

上图两个向量a,b的夹角很小可以说a向量和b向量有很高的的相似性,极端情况下,a和b向量完全重合。如下图:

                               

如上图可以认为a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者说是相等的。如果a和b向量夹角较大,或者反方向,可以说a向量和b向量有很低的的相似性,或者说a和b向量代表的文本基本不相似。

向量a和向量b的夹角 的余弦计算如下:

      

扩展,如果向量a和b不是二维而是n维,上述余弦的计算法仍然正确。假定a和b是两个n维向量,a是  ,b是  ,则a与b的夹角 的余弦等于:

 

  • 2、如下举例说明利用余弦计算句子相似度

句子A:这只皮靴号码大了。那只号码合适
句子B:这只皮靴号码不小,那只更合适

怎样计算上面两句话的相似程度?
基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。

第一步,分词。

句子A:这只/皮靴/号码/大了。那只/号码/合适。

句子B:这只/皮靴/号码/不/小,那只/更/合适。

第二步,列出所有的词。

这只,皮靴,号码,大了。那只,合适,不,小,更

第三步,计算词频。(下面程序用的jieba分词工具所以结果不一样但不影响计算)

句子A:这只1,皮靴1,号码2,大了1。那只1,合适1,不0,小0,更0

句子B:这只1,皮靴1,号码1,大了0。那只1,合适1,不1,小1,更1

第四步,写出词频向量。

句子A:(1,1,2,1,1,1,0,0,0)

句子B:(1,1,1,0,1,1,1,1,1)

第五步,利用上述公式计算

  • 3、python代码实现
 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Mon Jul 30 09:35:54 2018
 4 
 5 @author: Administrator
 6 """
 7 
 8 import jieba
 9 import numpy as np
10 
11 def get_word_vector():
12     """
13     w = np.ones((3,4))
14     q = np.ones((3,4"))
15     print(w)
16     print(np.sum(w * q))
17    """
18    
19     s1 = input("句子1:")
20     s2 = input("句子2:")
21     
22     cut1 = jieba.cut(s1)
23     cut2 = jieba.cut(s2)
24     
25     list_word1 = (','.join(cut1)).split(',')
26     list_word2 = (','.join(cut2)).split(',')
27     print(list_word1)
28     print(list_word2)
29     
30     key_word = list(set(list_word1 + list_word2))#取并集
31     print(key_word)
32     
33     word_vector1 = np.zeros(len(key_word))#给定形状和类型的用0填充的矩阵存储向量
34     word_vector2 = np.zeros(len(key_word))
35   
36     for i in range(len(key_word)):#依次确定向量的每个位置的值
37         for j in range(len(list_word1)):#遍历key_word中每个词在句子中的出现次数
38             if key_word[i] == list_word1[j]:
39                 word_vector1[i] += 1
40         for k in range(len(list_word2)):
41             if key_word[i] == list_word2[k]:
42                 word_vector2[i] += 1
43 
44     print(word_vector1)#输出向量
45     print(word_vector2)
46     return word_vector1, word_vector2
47 
48 def cosine():
49     v1, v2 = get_word_vector()
50     return float(np.sum(v1 * v2))/(np.linalg.norm(v1) * np.linalg.norm(v2)) 
51 
52 print(cosine())
  • 4、运行结果

转载于:https://www.cnblogs.com/Jm-15/p/9406425.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红帽436——HA高可用集群之概念篇

一、集群概念:集群:提高性能,降低成本,提高可扩展性,增强可靠性,任务调度室集群中的核心技术。集群作用:保证业务不断 集群三种网络:业务网络,集群网络,存储网络 二、集群三种类型:…

按季度分类汇总_2019年纯碱行业相关上市公司季报 与半年报情况汇总

2019年纯碱行业相关上市公司季报与半年报情况汇总经百川盈孚统计,目前纯碱行业相关上市公司共计11家(包含三家ST股),已经全部公布2019年一季度报告。2019年上半年度报告仅五家公司公布,其中包含:大连大化、山东海化、华昌化工、湖…

sapmto生产模式配置及操作详解_硬岩制砂线怎么设计?300t/h的生产流程与设备配置详解...

点击上方“蓝字”关注我们说到硬岩,花岗岩、辉绿岩都不陌生,关于花岗岩的生产线配置小编曾介绍过,感兴趣的可直接点阅:《硬质岩破碎很发愁?从原料到成品,看花岗岩的破碎制砂生产线配置》《年产300万t花岗岩…

公交卡软件测试思路,中国移动NFC专用SIM卡测试过程介绍

近期,通讯运营商在NFC的应用领域迈出了一大步,消费者在北京乘坐地铁、公交以及其他支持市政一卡通消费的场所均可进行手机支付。接下来就从办卡开始,为大家详细介绍一下中国移动NFC手机钱包的实测过程。办理手机NFC支付业务想要刷手机消费除了…

青年教师大讲堂 计算机,浙海大青年教师大讲堂之船机学院“知识改变命运”...

原标题:浙海大青年教师大讲堂之船机学院“知识改变命运”10月28日上午,由校团委主办,船舶与机电工程学院团委承办的青年博士教师大讲堂系列活动之“知识改变命运”在长峙校区杨存国一号报告厅举行。本次讲座由船舶与机电工程学院青年博士石学…

深入浅出分布式文件系统MogileFS集群

一,简介 MogileFS是一款开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前MogileFS的日益成熟使用此解决方法的公司越来越多,例如日…

计算机的控制面板打不开,控制面板打不开,教您控制面板打不开怎么办

最近有些不少的小伙伴向小编反映说,控制面板突然出现了打不开的情况,那么遇到这种情况该怎么办呢?其实控制面板打不开很有可能是因为系统文件损坏造成的。今天,小编就来把打不开控制面板的解决方法分享给你们。其实控制面板是我们…

【算法题】Multiples of 3 and 5

Multiples of 3 and 5 原题 题意如下: 找出N以内的3和5的倍数的和。 思路 1、刚看到觉得好弱智,直接遍历一遍不就OK了吗?但是第2和第3个测试用例报了TLE,超时。 2、然后想不出来了,搜了一下,发现有一个类似…

PIL简单图片处理(上)

自己看了下python,本来想照教程上一点一点学的,学了一会发现好没劲(教程本身质量很好),学python就是为了好玩,为什么还这么按部就班勒?果断google下python的爬虫(开始目的是这个&…

方舟服务器制作修改,ARK方舟:生存进化服务器禁止物品制造的修改方法

ARK方舟:生存进化服务器禁止物品制造的修改方法代码对应的文件目录:文件:Game.ini框架:[/script/shootergame.shootergamemode]例如禁用C4遥控器代码为:ConfigOverrideItemCraftingCosts(ItemClassString"PrimalItem_WeaponC4_C",BaseCraftingResourceRequirements((…

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用友情提示,您阅读本篇博文的先决条件如下: 1、本文示例基于Microsoft SQL Server 2008 R2调测。 2、具…

c .net ajax,Asp.net mvc 2中使用Ajax的三种方式

在Asp.net MVC中,我们能非常方便的使用Ajax。这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用、Jquery、Ajax Helper。分别采用这三种方式结合asp.net mvc去实现一个史上最简单的留言板。首先看一下原始的Ajax的调用的:定义CommentController&am…

爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术

本文来自网易云社区。 7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行。本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术、新实践,如AR、区块链、安全、大数据等。 网易AR游戏生态合作负责人杨鹏表示,传统游戏模式…

fastadmin自定义按钮不是ajax,Fastadmin 自定义按钮实现审核功能

功能描述新增自定义审核按钮,点击审核按钮后,按钮变为取消审核按钮,同理点击取消审核按钮后,按钮变为审核按钮实现功能如下图微信图片_20200827112914.png上代码{field: operate, title: __(Operate), table: table, events: Tabl…

函数的命名空间以及作用域

转载于:https://www.cnblogs.com/mpfei/p/9451208.html

使用vs自带的性能诊断工具

visual studio是个强大的集成开发环境,内置了程序性能诊断工具。下面通过两段代码进行介绍。 static void Main( string[] args){Test1();Test2();Console.ReadKey();}protected static void Test1(){Stopwatch sp new Stopwatch();sp.Start();string str "&…

碧蓝航线8.20服务器维护,碧蓝航线半人马来袭 8.20更新公告

半人马来袭!碧蓝航线将于8月20日9:00~11:00对安卓、iOS全港区进行为期2小时的改造建设,维护后将开启限时活动「盛夏的半人马座」,一起来看看吧。一、内容新增1.开启限时活动「盛夏的半人马座」,活动时间8月20日维护后~8月30日&…

1、rbac权限组件-初识, 中间件校验1

1、权限组件rbac 1、什么是权限 1 项目与应用 2 什么是权限? 一个包含正则表达式url就是一个权限 who what how ---------->True or Flase 2、版本1:用户表与权限url表 对应关系 # 版本1UserInforname pwdpermissionmodels.manytomany(Permissi…

实现打印异常日志_老生常谈SpringAop日志收集与处理做的工具包

场景 :使用Spring Aop拦截参数日志目前大部分做法都基本上大同小异,不想日后每个项目工程都写一份这样的Aop拦截处理日志的代码,甚至代码侵入。我想知道一些相对重要的请求方法的请求参数,响应参数,请求头,以及内部耗时,方法是成功还是失败等等信息。发生错误时我也不知道执行到…

服务器128g内存显示64g,64g内存服务器

64g内存服务器 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。接口名称GetCloudPhoneServerModelsGetCloudPhoneServerModels功能描…