【问题标题】:Python - Find all the similar sentences between two documents using sklearnPython - 使用 sklearn 查找两个文档之间的所有相似句子
【发布时间】:2014-06-04 01:19:22
【问题描述】:

我正在尝试返回两个文档之间的所有相似句子,我的解决方案有效,但速度极慢。有没有更有效的方法来做到这一点?

我打开两个文档(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()

我已经看到许多有用的答案,描述了如何在一般意义上比较两个文档,但我想找到一个解决方案,提供两者之间所有相似句子的列表。

感谢您的帮助。

【问题讨论】:

  • 不将 float-to-string-to-float 转换是第一个明显的优化。

标签: python scikit-learn nltk


【解决方案1】:

您是否分析过您的代码?这始终是优化的第一步。

话虽如此,您当前正在对每对句子初始化 TfidfVectorizo​​r - 如果您在一个文件中有 m 个句子,在另一个文件中有 n 个句子,那就是 m*n 初始化。但是该对象不依赖于句子-您只需执行一次,然后将其传递给函数。这可能是一些容易获得的果实。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2017-09-23
    • 2011-09-09
    • 2021-03-19
    • 2016-08-14
    • 2019-04-27
    • 2016-12-14
    相关资源
    最近更新 更多