【问题标题】:python related word search and replace with list words [closed]python相关单词搜索并用列表单词替换[关闭]
【发布时间】:2014-07-06 15:53:14
【问题描述】:

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

  • 如果文件中有“ca”,我的算法会将其替换为“car”

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

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

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

任何问题的答案将不胜感激!

【问题讨论】:

  • 我们如何知道哪些拼写错误的单词符合条件?一个字符?
  • 您是否尝试在文本文件中查找简单的印刷错误并将这些单词替换为列表中最接近的单词?您想使用什么指标来纠正这些错误?文本文件中唯一的单词是在您的单词列表中找到的单词吗?还是在输入文件中也找到了其他词?如果可以在文件中找到其他单词,您希望使用什么指标来查找单词是否与列表匹配?
  • 是的,还有其他词,有没有工具可以找到文件中的每个单词,列表中的某个单词至少有 1/2 个字符关闭?
  • '1/2 character off' 到底是什么意思?
  • 意思是eg:python也就是pytho

标签: python parsing data-conversion error-correction


【解决方案1】:

使用 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 模块。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2020-03-27
    • 2015-09-15
    • 2014-07-26
    相关资源
    最近更新 更多