python相关单词搜索和替换列表单词

时间:2014-07-06 15:53:15

标签: python parsing data-conversion error-correction

考虑一下,我有一个清单; list1=['car', 'bike', 'van', 'class'],我正在解析一个文本文件。此文本文件可以包含此列表中不存在的其他任意单词,并且不是此列表中单词的拼写错误。

  • 如果'ca'在文件中,我的算法会将其替换为'car'

  • 如果文件包含'bke',则将其替换为'bike'

  • 如果文件包含'clss',则将其替换为'class'

我的算法基本上是一种纠错算法。如何用列表中的单词替换相关的拼写错误的单词?

对此问题的任何回答都将不胜感激!

1 个答案:

答案 0 :(得分:4)

使用levenshtein算法,您可以这样做:

tgt_list='ca bke clss'.split()    
for word in ['car','bike','van','class']:
    wdist_exp=((w, levenshtein(w, word)) for w in tgt_list)
    closest, dist=min(wdist_exp, key=lambda t: t[1])
    print '{}=>{}   ld={}'.format(closest,word,dist) 

打印:

ca=>car   ld=1
bke=>bike   ld=1
ca=>van   ld=2
clss=>class   ld=1

也可以使用regex module

import regex    

template='{}=>{} with {} substitutions, {} insertions, {} deletions'
tgt='ca bke clss'
for word in ['car','bike','van','class']:
    pat=r'((?:\b{}\b){{e<=2}})'.format(word)
    m=regex.search(pat, tgt, regex.BESTMATCH)     
    if m:
        print template.format(m.group(1),word,*m.fuzzy_counts)

打印:

ca =>car with 1 substitutions, 0 insertions, 0 deletions
bke=>bike with 0 substitutions, 0 insertions, 1 deletions
ca =>van with 2 substitutions, 0 insertions, 0 deletions
clss=>class with 0 substitutions, 0 insertions, 1 deletions

您可能希望使用此处使用的类似方法来研究Python的difflib模块。