通过与最近的单词比较进行拼写更正

Spelling correction by comparison with nearest words

我有两个列表(列表 A 和列表 B)。 List A 包含拼写错误的单词列表(几个字符),List B 包含所有拼写正确的单词列表。

  1. List A 的大小小于 List B
  2. 任务是纠正 list A 中单词的拼写,将其替换为 List B 中最相似的单词。例如:如果List A包含单词[kodarma,belgaum,ysr]并且List B包含[...,Koderma,Belagavi,y.s.r. kadapa,....],那么这些List A的单词应该替换为List B单词。

策略是什么?或者唯一的方法是手动完成:(

您可以使用模块 Levenshtein 来查找列表中单词之间的相似度,如果 word_similarity_factor 超出您定义的值(例如:0.50),您可以将其附加到新列表即 list_containing_similar_words.

示例代码已重新创建并生成了所需的结果。

from Levenshtein import ratio

list1=['kodarma','belgaum','ysr', 'kedapa']
words=['Koderma','Belagavi','y.s.r', 'kadapa']
word_similarity_factor=0.5

for i in words:
    for j in list1:
        if ratio(i,j)>word_similarity_factor:
            list1[list1.index(j)]=i

我们还可以计算最长公共子序列(LCS),比较List A和List B中的每一个元素。这里可以使用“pylcs”模块。请参阅此 link 以获取文档 - https://github.com/Meteorix/pylcs

import pylcs

wrong=['kodarma','belgaum','ysr', 'kedapa']
correct=['Koderma','Belagavi','y.s.r', 'kadapa']
replaced = []

for w in wrong:
    lcs = 0
    s = ""
    for c in correct:
        temp = pylcs.lcs(w, c)
        if temp>lcs:
            lcs = temp
            s = c
    replaced.append(s)
        
print(replaced)