def EditDistance(source, target):
D = [[0]*(len(target)+1) for _ in range(len(source)+1)]
for i in range(len(source) + 1):
D[i][0] = i
for j in range(len(target) + 1):
D[0][j] = j
for i in range(1, len(source) + 1):
for j in range(1, len(target) + 1):
if source[i-1] == target[j-1]:
a = 0
else:
a = 1
D[i][j] = min(D[i][j-1] + 1, D[i-1][j] + 1, D[i-1][j-1] + a)
return D[len(source)][len(target)]
def TextTolist(Text):
f = open(Text, 'r', encoding='UTF8')
text = f.read()
f.close()
text = text.replace("\n", " ")
text = text.replace(".", "")
TextToList = text.split(" ")
return TextToList
def ListToDic(Text_List, ED_List):
dic = dict()
for i in range(len(Text_List)):
dic[Text_List[i]] = ED_List[i]
return dic
Target = input("단어를 입력하세요 : ")
TextList = TextTolist("text.txt")
E_D_list = []
for k in range(len(TextList)):
E_D = EditDistance(TextList[k], Target)
E_D_list.append(E_D)
E_D_Dic = ListToDic(TextList, E_D_list)
E_D_Dic = sorted(E_D_Dic.items(), key=lambda x: x[1])
for i in range(5):
print("{0}번째로 유사한 단어는 {1}이고 편집횟수는 {2}회".format(i+1, E_D_Dic[i][0], E_D_Dic[i][1]))