我试图在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)
...
性能显着提升,但我仍然无法提供帮助,但感觉算法效率低下
注意:这不是一个重复的问题,另一个问题是如何判断两个句子是否相似,我已经可以做到这一点,我需要知道的是如何有效地做到这一点,很多次/ p>
答案 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: