如何在没有外部库的情况下计算两个文本字符串的余弦相似度
在文本分析中,余弦相似度是两个文本之间相似度的度量基于他们共享词汇的文本。虽然可以使用外部库来计算此度量,但也可以实现一个简单的纯 Python 函数:
<code class="python">import math import re from collections import Counter WORD = re.compile(r"\w+") def get_cosine(vec1, vec2): intersection = set(vec1.keys()) & set(vec2.keys()) numerator = sum([vec1[x] * vec2[x] for x in intersection]) sum1 = sum([vec1[x] ** 2 for x in list(vec1.keys())]) sum2 = sum([vec2[x] ** 2 for x in list(vec2.keys())]) denominator = math.sqrt(sum1) * math.sqrt(sum2) if not denominator: return 0.0 else: return float(numerator) / denominator def text_to_vector(text): words = WORD.findall(text) return Counter(words)</code>
此函数采用两个向量 vec1 和 vec2 作为输入,并计算它们的余弦相似度。以下是如何使用它来比较两个文本字符串text1和text2:
<code class="python">text1 = "This is a foo bar sentence ." text2 = "This sentence is similar to a foo bar sentence ." vector1 = text_to_vector(text1) vector2 = text_to_vector(text2) cosine = get_cosine(vector1, vector2) print("Cosine:", cosine)</code>
输出:
Cosine: 0.861640436855
这表明两个文本字符串高度相似。
以上是如何在纯Python中计算两个文本字符串的余弦相似度?的详细内容。更多信息请关注PHP中文网其他相关文章!