首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何计算两个文本文档之间的相似度?

如何计算两个文本文档之间的相似度?
EN

Stack Overflow用户
提问于 2012-01-17 23:51:09
回答 8查看 226.2K关注 0票数 246

我正在考虑在一个NLP项目上工作,使用任何编程语言(尽管Python将是我的首选)。

我想要获取两个文档,并确定它们有多相似。

EN

回答 8

Stack Overflow用户

发布于 2014-06-10 05:14:23

与@larsman相同,但经过了一些预处理

代码语言:javascript
复制
import nltk, string
from sklearn.feature_extraction.text import TfidfVectorizer

nltk.download('punkt') # if necessary...


stemmer = nltk.stem.porter.PorterStemmer()
remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)

def stem_tokens(tokens):
    return [stemmer.stem(item) for item in tokens]

'''remove punctuation, lowercase, stem'''
def normalize(text):
    return stem_tokens(nltk.word_tokenize(text.lower().translate(remove_punctuation_map)))

vectorizer = TfidfVectorizer(tokenizer=normalize, stop_words='english')

def cosine_sim(text1, text2):
    tfidf = vectorizer.fit_transform([text1, text2])
    return ((tfidf * tfidf.T).A)[0,1]


print cosine_sim('a little bird', 'a little bird')
print cosine_sim('a little bird', 'a little bird chirps')
print cosine_sim('a little bird', 'a big dog barks')
票数 98
EN

Stack Overflow用户

发布于 2017-05-22 06:35:00

这是一个老问题,但我发现使用Spacy可以很容易地做到这一点。一旦读取了文档,就可以使用简单的similarity接口来查找文档向量之间的余弦相似度。

首先安装软件包并下载模型:

代码语言:javascript
复制
pip install spacy
python -m spacy download en_core_web_sm

然后像这样使用:

代码语言:javascript
复制
import spacy
nlp = spacy.load('en_core_web_sm')
doc1 = nlp(u'Hello hi there!')
doc2 = nlp(u'Hello hi there!')
doc3 = nlp(u'Hey whatsup?')

print (doc1.similarity(doc2)) # 0.999999954642
print (doc2.similarity(doc3)) # 0.699032527716
print (doc1.similarity(doc3)) # 0.699032527716
票数 61
EN

Stack Overflow用户

发布于 2012-01-17 23:59:17

通常,两个文档之间的余弦相似度被用作文档的相似性度量。在Java语言中,您可以使用Lucene (如果您的集合非常大)或LingPipe来完成此任务。基本概念是计算每个文档中的术语,并计算术语向量的点积。与这种通用方法相比,这些库确实提供了几个改进,例如使用反向文档频率和计算tf-idf向量。如果你想做一些copmlex的事情,LingPipe还提供了计算文档之间的LSA相似度的方法,这比余弦相似度提供了更好的结果。对于Python,您可以使用NLTK

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8897593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档