Python 检查单词之间的编辑次数

Python 检查单词之间的编辑次数,python,python-3.x,Python,Python 3.x,我的剧本遇到了一个完全的障碍。我有一个HTML文档,它有几对单词。我必须从HTML文档中提取单词,然后检查单词的相似性。如果单词在一次编辑中,则它们是可接受的,如果它们有多个不同的编辑,则它们将失败 (ex: abc – ab; abc – bc; abc – ac = pass, abc – Abc; abc – acc; abc – abD = pass, abc – acb = fail, abc – abc = fail) 我将单词提取到列表中一个元组中的元组中。然后,我的问题是

我的剧本遇到了一个完全的障碍。我有一个HTML文档,它有几对单词。我必须从HTML文档中提取单词,然后检查单词的相似性。如果单词在一次编辑中,则它们是可接受的,如果它们有多个不同的编辑,则它们将失败

(ex: abc – ab; abc – bc; abc – ac = pass, 
abc – Abc; abc – acc; abc – abD = pass, 
abc – acb = fail, 
abc – abc = fail)
我将单词提取到列表中一个元组中的元组中。然后,我的问题是访问该列表并实际检查单词的相似性

[(('Bild', 'mild'), ('bitte', 'Bitte'), ('bitte', 'bitten'), ('Bitte', 
'Mitte'), ('Fahne', 'ahne'), ('Schlange', 'Schlangen'), ('windet', 
'wendet'), ('sprich', 'sprach'), ('ob', 'Bob'), ('weiße', 'weise'), 
('Heidi', 'Hilde'), ('aktiv', 'aktiv'), ('wild', 'Wind'), ('schlagen', 
'Schlangen'), ('Küche', 'Mücke'), ('Rücken', 'Küken'), ('Eleonore', 
'Elefant'))]
多亏了Rakesh,这个问题已经解决了:

    pass_score = 0
    fail_score = 0
    for i in new_pairs[0]:
        diff = difflib.ndiff(i[0], i[1])
        a, s = 0, 0
        for j in diff:
            if j.startswith('-'):
                s += 1
            if j.startswith('+'):
                a += 1
        if a > 1 or s > 1:
            print("FAIL, more than one edit.", i)
            fail_score += 1
        elif a == 0 and s == 0:
            print("FAIL, these are the same word", i)
            fail_score += 1
        else:
            print("PASS, only one edit required.", i)
            pass_score += 1

    print("Number of PASSING word-pairs:", pass_score)
    print("Number of FAILING word-pairs:", fail_score)

我认为您可以使用库来完成您的尝试

示例代码

import difflib

n = [(('Bild', 'mild'), ('bitte', 'Bitte'), ('bitte', 'bitten'), ('Bitte', 'Mitte'), ('Fahne', 'ahne'), ('Schlange', 'Schlangen'), ('windet','wendet'), ('sprich', 'sprach'), ('ob', 'Bob'), ('weiße', 'weise'), ('Heidi', 'Hilde'), ('aktiv', 'aktiv'), ('wild', 'Wind'), ('schlagen', 'Schlangen'), ('Küche', 'Mücke'), ('Rücken', 'Küken'), ('Eleonore', 'Elefant'))]

for i in n[0]:
    diff = difflib.ndiff(i[0], i[1])
    a, s = 0, 0
    for j in diff:
        if j.startswith('-'):
            s += 1
        if j.startswith('+'):
            a += 1
    if a > 1 or s > 1:
       print "Edit more that 1", i
    else:
       print "Only One Edit", i

您将遇到的主要问题是用于获取编辑次数的算法。为此,请查看。对于上面的python代码,您可以尝试使用我以前编写的。@KaushikNP计算距离似乎有些过分,因为他们显然只需要知道距离是否为1。@StefanPochmann:当然,您不需要完全计算距离。但该算法的一部分将构成OP要求的基础。因为编辑甚至意味着添加/删除字符。Python中已经有了编辑距离的实现。甚至是一个纯Python版本,在Python2和Python3中都可用。您可以直接使用它,也可以将其作为示例。这意味着
只有一个编辑('abc','acb')
。这实际上非常有效,我已经对其进行了调整,以适应我的数据结构。非常感谢。我必须添加一个elif表达式,如果a==0和s==0:那么打印(“相同的单词”,I)