当前位置: 首页 > 编程笔记 >

余弦相似性计算及python代码实现过程解析

濮金鑫
2023-03-14
本文向大家介绍余弦相似性计算及python代码实现过程解析,包括了余弦相似性计算及python代码实现过程解析的使用技巧和注意事项,需要的朋友参考一下

A:西米喜欢健身

B:超超不爱健身,喜欢打游戏

step1:分词

A:西米/喜欢/健身

B:超超/不/喜欢/健身,喜欢/打/游戏

step2:列出两个句子的并集

西米/喜欢/健身/超超/不/打/游戏

step3:计算词频向量

A:[1,1,1,0,0,0,0]

B:[0,1,1,1,1,1,1]

step4:计算余弦值

余弦值越大,证明夹角越小,两个向量越相似。

step5:python代码实现

import jieba
import jieba.analyse
def words2vec(words1=None, words2=None):
 v1 = []
 v2 = []
 tag1 = jieba.analyse.extract_tags(words1, withWeight=True)
 tag2 = jieba.analyse.extract_tags(words2, withWeight=True)
 tag_dict1 = {i[0]: i[1] for i in tag1}
 tag_dict2 = {i[0]: i[1] for i in tag2}
 merged_tag = set(tag_dict1.keys()) | set(tag_dict2.keys())
 for i in merged_tag:
  if i in tag_dict1:
   v1.append(tag_dict1[i])
  else:
   v1.append(0)
  if i in tag_dict2:
   v2.append(tag_dict2[i])
  else:
   v2.append(0)
 return v1, v2
def cosine_similarity(vector1, vector2):
 dot_product = 0.0
 normA = 0.0
 normB = 0.0
 for a, b in zip(vector1, vector2):
  dot_product += a * b
  normA += a ** 2
  normB += b ** 2
 if normA == 0.0 or normB == 0.0:
  return 0
 else:
  return round(dot_product / ((normA**0.5)*(normB**0.5)) * 100, 2)  
def cosine(str1, str2):
 vec1, vec2 = words2vec(str1, str2)
 return cosine_similarity(vec1, vec2)
print(cosine('阿克苏苹果', '阿克苏苹果'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 假设您在数据库中按以下方式构造了一个表: 为了清楚起见,应输出: 请注意,由于向量存储在数据库中,因此我们仅需要存储非零条目。在此示例中,我们只有两个向量$ v_ {99} =(4,3,4,0)$和$ v_ {1234} =(0,5,2,3)$都在$ \ mathbb {R}中^ 4 $。 这些向量的余弦相似度应为$ \ displaystyle \ frac {23} {\ sqrt

  • 问题内容: 我计算了两个文档的tf / idf值。以下是tf / idf值: 这些文件就像: 如何使用这些值来计算余弦相似度? 我知道我应该计算点积,然后找到距离并除以点积。如何使用我的值来计算? 还有一个问题: 两个文档的字数相同是否重要? 问题答案: a * b是点积 一些细节: 是。在某种程度上,a和b必须具有相同的长度。但是a和b通常具有稀疏表示,您只需要存储非零条目,就可以更快地计算范数

  • 本文向大家介绍Python 余弦相似度与皮尔逊相关系数 计算实例,包括了Python 余弦相似度与皮尔逊相关系数 计算实例的使用技巧和注意事项,需要的朋友参考一下 夹角余弦(Cosine) 也可以叫余弦相似度。 几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。 (1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式: (2) 两个n维

  • 问题内容: 如何找到向量之间的余弦相似度? 我需要找到相似性来衡量两行文本之间的相关性。 例如,我有两个句子: 用户界面系统 用户界面机 …及其在tF-idf之后的向量,然后使用LSI进行标准化,例如 和。 如何测量这些向量之间的相似性? 问题答案: 我最近在大学的信息检索部门做了一些tf-idf的工作。我使用了这种余弦相似度方法,该方法使用Jama:Java Matrix Package 。 有

  • 问题内容: 从:查找文档相似度,可以使用余弦计算文档相似度。如果不导入外部库,是否有任何方法可以计算2个字符串之间的余弦相似度? 问题答案: 一个简单的纯Python实现是: 印刷品: 这里所用的余弦公式描述这里。 这不包括通过对单词进行加权,但是为了使用,你需要具有一个相当大的语料库才能从中估计的权重。 你还可以通过使用更复杂的方法从一段文本中提取单词,对其进行词干或词义化等来进一步开发它。

  • 我有一个包含n-用户的Neo4j数据库。每个用户都连接到他们各自的性别节点(M和F)、年龄组节点、种族节点等。我想根据他们的性别、年龄、种族等找到两个用户之间的相似性。 此密码查询仅基于一个属性进行计算 我想根据性别、年龄组、种族等多个属性进行计算