Python - 使用sklearn查找两个文档之间的相似句子
我想找出两个文档中所有相似的句子,我现在的方法可以做到,但速度非常慢。有没有更有效的办法呢?
我打开了两个文档(A和B),然后用NLTK这个工具把每个句子提取出来,放到list_a和list_b里(这个过程很快)。接下来,我对list_a里的每个句子进行循环,逐个和list_b里的所有句子进行比较(这个过程很慢)。如果这两个句子在某个百分比上相似,我就把它们放到一个结果列表results_list里,以便后续查看。
我用来比较两个句子的代码是:
# Compare two sentences
def compare_sentences( sentences_a, sentences_b ):
# Init our vectorizer
vect = TfidfVectorizer( min_df = 1 )
# Create our tfidf
tfidf = vect.fit_transform( [ sentences_a, sentences_b ] )
# Get an array of results
results = ( tfidf * tfidf.T ).A
# Return percentage float
return float( '%.4f' % ( results[0][1] * 100 ) )
# end compare_sentences()
我看到很多有用的回答,讲的是如何一般性地比较两个文档,但我想找一个能列出两个文档中所有相似句子的解决方案。
谢谢你的帮助。
1 个回答
1
你有没有分析过你的代码?这总是优化的第一步。
话说回来,你现在是在每一对句子上都初始化一次TfidfVectorizor。如果你在一个文件里有m个句子,在另一个文件里有n个句子,那你就会进行m*n次初始化。但这个对象其实和句子没有关系——你只需要初始化一次,然后把它传给函数就可以了。这可能是一个很简单就能解决的问题。