使用基于词频和余弦相似度的算法可行。该算法将每个文档表示为一个向量,向量中每个元素表示一个单词在文档中出现的次数,然后使用余弦相似度计算两个文档向量之间的相似度。
示例代码如下:
import math
def term_frequency(term, document):
"""
计算词项在文档中的词频
"""
words = document.split()
return words.count(term) / len(words)
def cosine_similarity(doc1, doc2):
"""
计算两个文档之间的余弦相似度
"""
# 获取文档中所有出现过的单词
words = set(doc1.split() + doc2.split())
# 计算向量
v1 = [term_frequency(word, doc1) for word in words]
v2 = [term_frequency(word, doc2) for word in words]
# 计算余弦相似度
dot_product = sum(x * y for x, y in zip(v1, v2))
magnitude1 = math.sqrt(sum(x ** 2 for x in v1))
magnitude2 = math.sqrt(sum(x ** 2 for x in v2))
return dot_product / (magnitude1 * magnitude2)
# 示例
doc1 = 'This is a test document.'
doc2 = 'This is another test document.'
similarity = cosine_similarity(doc1, doc2)
print(similarity)
输出结果为 0.7906。