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

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

Linda Hamilton
Linda Hamilton原创
2024-10-31 14:30:02947浏览

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

无需外部库即可计算句子字符串的余弦相似度

无需外部模块即可计算两个文本字符串之间的余弦相似度,一个简单的 Python 实现可以就业。此过程中使用了基本的余弦相似度公式:

cos(θ) = (A · B) / (||A|| · ||B||)

其中:

  • A 和 B 是代表句子的两个向量。
  • A · B是向量 A 和 B 的点积。
  • ||A||和||B||是向量 A 和 B 各自的大小。

实现

以下 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>

要使用此代码,请使用 text_to_vector 函数将句子字符串转换为向量,然后使用 get_cosine 函数计算余弦相似度:

<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>

这将输出两个句子字符串之间的余弦相似度。请注意,此实现中不包含 tf-idf 权重,但如果有合适的语料库,则可以添加。

以上是如何在没有外部库的情况下用Python计算句子字符串之间的余弦相似度?的详细内容。更多信息请关注PHP中文网其他相关文章!

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