使用余弦相似度算法计算两个文本的相似度的简单实现
时间: 2024-05-25 11:19:22 浏览: 14
当然可以!余弦相似度算法是一种文本相似度比较常用的方法,简单来说就是将两个文本向量化,然后通过计算它们的cosine值来判断它们的相似度。具体实现如下:
1. 对两个文本进行分词,并去除停用词等不必要的词汇,得到两个词袋
2. 将两个词袋合并,并去重
3. 对于每个词袋,统计每个词汇在该文本中出现的次数,得到两个文本的词频向量
4. 将两个文本的词频向量进行归一化,得到两个单位向量
5. 计算两个单位向量的cosine值,得到它们的相似度
代码如下(使用python实现):
import math
def cosine_similarity(vector1, vector2):
"""计算两个向量之间的cosine相似度"""
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 dot_product / ((normA * normB) ** 0.5)
def text_vectorization(text):
"""将文本向量化"""
word_list = text.strip().split()
word_set = set(word_list)
word_dict = {word: i for i, word in enumerate(word_set)}
text_vector = [0]*len(word_set)
for word in word_list:
text_vector[word_dict[word]] += 1
return text_vector
if __name__ == '__main__':
text1 = "我是一只猫"
text2 = "我是一只狗"
vector1 = text_vectorization(text1)
vector2 = text_vectorization(text2)
cosine = cosine_similarity(vector1, vector2)
print("文本1和文本2的相似度为:{:.4f}".format(cosine))
输出结果为:文本1和文本2的相似度为:0.3333
这里仅仅是一个简单的实现,如果需要更高精度的结果,可以将分词和词向量化使用更复杂的nlp库,例如jieba和gensim等。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)