Python - 使用sklearn查找两个文档之间的相似句子

1 投票
1 回答
1704 浏览
提问于 2025-04-18 08:30

我想找出两个文档中所有相似的句子,我现在的方法可以做到,但速度非常慢。有没有更有效的办法呢?

我打开了两个文档(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次初始化。但这个对象其实和句子没有关系——你只需要初始化一次,然后把它传给函数就可以了。这可能是一个很简单就能解决的问题。

撰写回答