有效地模糊匹配文档集合中的每个句子

时间:2015-09-01 18:38:01

标签: python algorithm fuzzy-comparison

我试图在10个左右的文档集合中建立一个类似句子的列表。我在Python中使用FuzzyWuzzy库来确定相似性,虽然我当前的算法有效,但效率并不高,需要永远运行。

for doc in docs:
        for sentence in doc.sentences:
            if len(sentence) > 8:
                for document in docs:
                    if similarity(document,doc)["ratio"] < 100:
                        for sentn in document.sentences:
                            if len(sentn) > 8:
                                simil = similarity(sentence,sentn)
                                if simil["ratio"] > 60:
                                    count+=1
                                    print count
                                    pairs.append([sentence,sentn,simil])

如果您不想阅读那些混乱的代码,它会将每个文档放入列表中,然后迭代其中的每个句子,然后将该句子与其他句子中的每个句子进行比较文件,意味着它正在处理数十亿种可能的组合,其中许多具有小于5%的相似性,这非常低效且浪费处理能力,是否有更有效的算法或处理文件的方式?

编辑:

在斯塔克斯的建议下,我添加了这行代码

if abs(len(sentence)-len(sentn))<10:
    simil = similarity(sentence,sentn)
    ...

性能显着提升,但我仍然无法提供帮助,但感觉算法效率低下

注意:这不是一个重复的问题,另一个问题是如何判断两个句子是否相似,我已经可以做到这一点,我需要知道的是如何有效地做到这一点,很多次

1 个答案:

答案 0 :(得分:0)

该循环至少存在两个导致严重瓶颈的问题。

首先,您将从第一个文档中获取第一个句子,并针对每个文档的每个句子(包括其自身)进行检查。而不是

 for doc in docs:
     for sentence in doc.sentences:
         if len(sentence) > 8:
             for document in docs:

for doc in docs:
        for document in docs:
                for sentence in doc.sentences:
                     if len(sentence) > 8:

第二,

if similarity(document,doc)["ratio"] < 100:

效率不高,你不需要使用模糊匹配来判断两个文件是否相同,你可以使用

if document.text == doc.text: