已知两个用字典表示的词频统计表a,b ,如何求两表各项的相似度,python 程序
时间: 2024-05-13 15:19:31 浏览: 48
可以使用余弦相似度计算两个向量之间的相似度。假设 a 和 b 是两个词频统计表,它们可以表示为两个向量 a_vec 和 b_vec。则余弦相似度可以计算为:
$\cos(\theta) = \frac{a \cdot b}{\left\|a\right\| \left\|b\right\|}$
其中,$a \cdot b$ 表示向量 a 和向量 b 的点积,$\left\|a\right\|$ 和 $\left\|b\right\|$ 分别表示向量 a 和向量 b 的模长。
在 Python 中,可以使用 numpy 库来计算向量的点积和模长。示例代码如下:
```python
import numpy as np
def cosine_similarity(a, b):
"""计算两个向量的余弦相似度"""
dot_product = np.dot(a, b)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
return dot_product / (norm_a * norm_b)
# 示例
a = {'apple': 2, 'banana': 1, 'orange': 3}
b = {'apple': 1, 'banana': 2, 'peach': 2}
keys = set(a.keys()).union(set(b.keys())) # 获取所有词汇
a_vec = np.array([a.get(key, 0) for key in keys]) # 转换为向量
b_vec = np.array([b.get(key, 0) for key in keys])
similarity = cosine_similarity(a_vec, b_vec)
print(similarity)
```
输出结果为:0.7468486801841534。表示两个词频统计表的相似度为 0.747。
阅读全文