首页  >  文章  >  后端开发  >  如何在没有外部库的情况下用Python计算句子之间的余弦相似度?

如何在没有外部库的情况下用Python计算句子之间的余弦相似度?

DDD
DDD原创
2024-10-30 07:48:28509浏览

How to Calculate Cosine Similarity Between Sentences in Python Without External Libraries?

计算句子字符串之间的余弦相似度

给定两个表示句子的字符串,需要在不使用外部库的情况下计算它们的余弦相似度。让我们探索一个 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn