一个简单的纯Python实现是:
import re, mathfrom collections import CounterWORD = 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) / denominatordef 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的权重。
你还可以通过使用更复杂的方法从一段文本中提取单词,对其进行词干或词义化等来进一步开发它。



