[Python] Calculating Minimum Edit Distance for unequal strings python

Discussão em 'Python' iniciado por Stack, Fevereiro 14, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to implement Minimum Edit Distance with the substitution cost of 2. Following is the code I've so far. It works well for strings of equal length but generates error for the unequal strings. Kindly correct me where i am wrong

    def med(source, target):
    # if len(x) > len(y):
    # print("insode if")
    # source, target = y, x
    print(len(source), len(target))
    cost = [[0 for inner in range(len(source)+1)] for outer in
    range(len(target)+1)]

    global backtrace
    backtrace = [[0 for inner in range(len(source)+1)] for outer in
    range(len(target)+1)]
    global SUB
    global INS
    global DEL

    for i in range(0,len(target)+1):
    cost[0] = i

    for j in range(0,len(source)+1):
    cost[0][j] = j

    for i in range(1,len(target)+1):
    for j in range(1,len(source)+1):
    if source[i-1]==target[j-1]:
    cost[j] = cost[i-1][j-1]
    else:
    deletion = cost[i-1][j]+1
    insertion = cost[j-1]+1
    substitution = cost[i-1][j-1]+2
    cost[j] = min(insertion,deletion,substitution)

    if cost[j] == substitution:
    backtrace[j] = SUB
    elif cost[j] == insertion:
    backtrace[j] = INS
    else:
    backtrace[j] = DEL


    return cost[j]

    med("levenshtein","levels")


    The error i get is:

    ---------------------------------------------------------------------------
    IndexError Traceback (most recent call last)
    <ipython-input-26-86bf20ea27c7> in <module>()
    49 return cost[j]
    50
    ---> 51 med("levenshtein","levels")

    <ipython-input-26-86bf20ea27c7> in med(source, target)
    31 for i in range(1,len(target)+1):
    32 for j in range(1,len(source)+1):
    ---> 33 if source[i-1]==target[j-1]:
    34 cost[j] = cost[i-1][j-1]
    35 else:

    IndexError: string index out of range

    Continue reading...

Compartilhe esta Página