识别不能在列表项中拼写的字符串

时间:2014-01-07 10:56:57

标签: python regex parsing

我有一个清单

['mPXSz0qd6j0 youtube ', 'lBz5XJRLHQM youtube ', 'search OpHQOO-DwlQ ', 
'sachin 47427243 ', 'alex smith ', 'birthday JEaM8Lg9oK4 ', 
'nebula  8x41n9thAU8 ', 'chuck norris  ', 
'searcher O6tUtqPcHDw ', 'graham wXqsg59z7m0 ', 'queries K70QnTfGjoM ']

是否有某种方法可以识别列表项中无法拼写的字符串并将其删除?

2 个答案:

答案 0 :(得分:3)

您可以使用,例如PyEnchant用于基本字典检查,NLTK用于解决轻微的拼写问题,如下所示:

import enchant
import nltk

spell_dict = enchant.Dict('en_US')  # or whatever language supported

def get_distance_limit(w):
    ''' 
    The word is considered good 
    if it's no further from a known word than this limit.
    '''
    return len(w)/5 + 2  # just for example, allowing around 1 typo per 5 chars.

def check_word(word):
    if spell_dict.check(word):
        return True  # a known dictionary word

    # try similar words
    max_dist = get_distance_limit(word)
    for suggestion in spell_dict.suggest(word):
        if nltk.edit_distance(suggestion, word) < max_dist:
            return True

    return False

为数字添加案例规范化和过滤器,您将获得非常好的启发式。

答案 1 :(得分:0)

完全可以将您的列表成员与您认为对您的输入无效的单词进行比较。

这可以通过多种方式完成,部分取决于您对“正确拼写”的定义以及最终用于比较列表的内容。如果您认为数字阻止条目有效,或者下划线或混合大小写,您可以测试正则表达式匹配。

发布正则表达式后,您必须决定要拆分的有效字符应该是什么。它是空格(你愿意打破'ad hoc'('ad'是缩写,'hoc'不是一个词))?它是连字符(这会打破带连字符的姓氏吗?)

根据以上标准决定,它只是决定使用什么单词,专有名称和常用俚语列表以及列表理解:

word_list[:] = [term for term in word_list if passes_my_membership_criteria(term)]

其中,pass_my_membership_criteria()是一个函数,其中包含停留在单词列表中的规则,对于您认为无效的内容返回False。