python 文本相似度_Python-给定2个句子字符串,计算余弦相似度

小编典典

一个简单的纯Python实现是:

import re, math

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 vec1.keys()])

sum2 = sum([vec2[x]**2 for x in 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)

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

印刷品:

Cosine: 0.861640436855

这里所用的余弦公式描述这里。

这不包括通过tf-idf对单词进行加权,但是为了使用tf-idf,你需要具有一个相当大的语料库才能从中估计tfidf的权重。

你还可以通过使用更复杂的方法从一段文本中提取单词,对其进行词干或词义化等来进一步开发它。

2020-02-20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值