我有一个清单
['mPXSz0qd6j0 youtube ', 'lBz5XJRLHQM youtube ', 'search OpHQOO-DwlQ ',
'sachin 47427243 ', 'alex smith ', 'birthday JEaM8Lg9oK4 ',
'nebula 8x41n9thAU8 ', 'chuck norris ',
'searcher O6tUtqPcHDw ', 'graham wXqsg59z7m0 ', 'queries K70QnTfGjoM ']
是否有某种方法可以识别列表项中无法拼写的字符串并将其删除?
答案 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。