计算句子字符串之间的余弦相似度
给定两个表示句子的字符串,需要在不使用外部库的情况下计算它们的余弦相似度。让我们探索一个 Python 实现来实现这一点。
余弦相似度测量两个向量之间的角度,通常表示向量空间中的文档或句子。高余弦相似度值表示句子相似,而低值表示句子不同。
第 1 步:标记化和向量化
为了计算余弦相似度,我们必须将句子转换为向量。我们使用一个简单的基于单词的分词器,将句子分成单词并计算它们的出现次数:
<code class="python">import re from collections import Counter WORD = re.compile(r"\w+") def text_to_vector(text): words = WORD.findall(text) return Counter(words)</code>
第 2 步:计算余弦相似度
余弦相似度公式是:
cosine = (Numerator) / (Denominator)
其中:
<code class="python">import math 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</code>
第 3 步:示例用法
使用上述函数,我们可以计算两个句子之间的余弦相似度:
<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>
输出会显示较高的余弦相似度值,表明句子相似。
以上是如何在没有外部库的情况下用Python计算句子之间的余弦相似度?的详细内容。更多信息请关注PHP中文网其他相关文章!