You are on page 1of 5

NLP Assignment-3

Program (To find minimum edit distance):


def min_edit_distance(str1, str2):

m = len(str1)

n = len(str2)

# Create a table to store results of subproblems

dp = [[0] * (n + 1) for _ in range(m + 1)]

# Fill dp[][] in bottom-up manner

for i in range(m + 1):

for j in range(n + 1):

# If first string is empty, only option is to

# insert all characters of second string

if i == 0:

dp[i][j] = j # Min. operations = j

# If second string is empty, only option is to

# remove all characters of second string

elif j == 0:

dp[i][j] = i # Min. operations = i

# If last characters are same, ignore last char

# and recur for remaining string

elif str1[i - 1] == str2[j - 1]:

dp[i][j] = dp[i - 1][j - 1]

# If last character are different, consider all

# possibilities and find minimum

else:
dp[i][j] = 1 + min(dp[i][j - 1], # Insert

dp[i - 1][j], # Remove

dp[i - 1][j - 1]) # Replace

return dp[m][n]

# Take input from user for str1 and str2

str1 = input("Enter the first string: ")

str2 = input("Enter the second string: ")

print("Minimum Edit Distance between '{}' and '{}' is: {}".format(str1, str2, min_edit_distance(str1,
str2)))

Output:

Program (Spelling checker and corrector):


import numpy as np

def min_edit_distance(source, target):

m = len(source)

n = len(target)

dp = np.zeros((m + 1, n + 1))

for i in range(m + 1):

dp[i][0] = i

for j in range(n + 1):

dp[0][j] = j
for i in range(1, m + 1):

for j in range(1, n + 1):

if source[i - 1] == target[j - 1]:

dp[i][j] = dp[i - 1][j - 1]

else:

dp[i][j] = 1 + min(dp[i - 1][j], # Deletion

dp[i][j - 1], # Insertion

dp[i - 1][j - 1]) # Substitution

return dp[m][n]

def spelling_checker(word, dictionary):

min_distance = float('inf')

suggested_word = None

for dict_word in dictionary:

distance = min_edit_distance(word, dict_word)

if distance < min_distance:

min_distance = distance

suggested_word = dict_word

if min_distance <= 3: # Threshold for suggesting a word

print(f"Entered word: {word}")

print(f"Suggested correction: {suggested_word}")

else:

print(f"Entered word: {word}")

print("No suggestion found in the dictionary.")

def main():

dictionary = ['hello', 'world', 'python', 'programming', 'language']

word = input("Enter a word to check its spelling: ")


spelling_checker(word, dictionary)

if __name__ == "__main__":

main()

Output:
3) Levenshtein Distance Code:

def min_edit_distance(str1, str2):

m = len(str1)

n = len(str2)

# Create a table to store results of subproblems

dp = [[0] * (n + 1) for _ in range(m + 1)]

# Fill dp[][] in bottom up manner

for i in range(m + 1):

for j in range(n + 1):

# If first string is empty, only option is to

# insert all characters of second string

if i == 0:

dp[i][j] = j

# If second string is empty, only option is to

# remove all characters of first string

elif j == 0:

dp[i][j] = i

# If last characters are different, consider all

# possibilities and find minimum

elif str1[i - 1] != str2[j - 1]:

dp[i][j] = min(dp[i - 1][j] + 1, # Remove

dp[i][j - 1] + 1, # Insert

dp[i - 1][j - 1] + 2) # Replace

# If last characters are same, no operation needed

else:

dp[i][j] = dp[i - 1][j - 1]

return dp[m][n]

str1 = input("Enter string 1: ")

str2 = input("Enter string 2: ")

print("Minimum Edit distance between",str1,"and",str2,"is",min_edit_distance(str1,str2))

You might also like