我处理的字符串列表可能包含一些原始拼写的附加字母,例如:
words = ['whyyyyyy', 'heyyyy', 'alrighttttt', 'cool', 'mmmmonday']
我想预先处理这些字符串以便拼写正确,以检索新列表:
cleaned_words = ['why', 'hey', 'alright', 'cool', 'monday']
重复字母的序列长度可能会有所不同,但显然cool
应保持其拼写。
我没有意识到任何这样做的python库,我最好还是试着避免硬编码。
我已经尝试了这个:http://norvig.com/spell-correct.html但是你在文本文件中添加的单词越多,它似乎就越有可能提示错误的拼写,所以它永远不会实际上是正确的,即使没有删除额外的字母。例如,eel
变为teel
...
提前致谢。
答案 0 :(得分:1)
如果您只想重复删除字母,那么使用正则表达式模块re
可能有所帮助:
>>> import re
>>> re.sub(r'(.)\1+$', r'\1', 'cool')
'cool'
>>> re.sub(r'(.)\1+$', r'\1', 'coolllll')
'cool'
(它保持凉爽'未触动过。)
对于引导重复的字符,正确的替换将是:
>>> re.sub(r'^(.)\1+', r'\1', 'mmmmonday')
'monday'
当然,对于以重复的字母合法地开始或结束的词语,这会失败......
答案 1 :(得分:1)
如果您要下载所有英语单词的文本文件以进行检查,这是另一种可行的方法。
我没有测试过,但你明白了。它遍历字母,如果当前字母与最后一个字母匹配,它将从该字母中删除该字母。如果它将这些字母缩小为1,并且仍然没有有效的单词,它会将该单词重置为正常并继续,直到找到下一个重复的字符。
words = ['whyyyyyy', 'heyyyy', 'alrighttttt', 'cool', 'mmmmonday']
import urllib2
word_list = set(i.lower() for i in urllib2.urlopen('https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt').read().split('\n'))
found_words = []
for word in (i.lower() for i in words):
#Check word doesn't exist already
if word in word_list:
found_words.append(word)
continue
last_char = None
i = 0
current_word = word
while i < len(current_word):
#Check if it's a duplicate character
if current_word[i] == last_char:
current_word = current_word[:i] + current_word[i + 1:]
#Reset word if no more duplicate characters
else:
current_word = word
i += 1
last_char = current_word[i]
#Word has been found
if current_word in word_list:
found_words.append(current_word)
break
print found_words
#['why', 'hey', 'alright', 'cool', 'monday']
答案 2 :(得分:0)
嗯,粗鲁的方式:
words = ['whyyyyyy', 'heyyyy', 'alrighttttt', 'cool', 'mmmmonday']
res = []
for word in words:
while word[-2]==word[-1]:
word = word[:-1]
while word[0]==word[1]:
word = word[1:]
res.append(word)
print(res)
结果:
['why', 'hey', 'alright', 'cool', 'monday']