字符串预处理

时间:2016-02-05 14:04:29

标签: python string python-2.7

我处理的字符串列表可能包含一些原始拼写的附加字母,例如:

words = ['whyyyyyy', 'heyyyy', 'alrighttttt', 'cool', 'mmmmonday']

我想预先处理这些字符串以便拼写正确,以检索新列表:

cleaned_words = ['why', 'hey', 'alright', 'cool', 'monday']

重复字母的序列长度可能会有所不同,但显然cool应保持其拼写。

我没有意识到任何这样做的python库,我最好还是试着避免硬编码。

我已经尝试了这个:http://norvig.com/spell-correct.html但是你在文本文件中添加的单词越多,它似乎就越有可能提示错误的拼写,所以它永远不会实际上是正确的,即使没有删除额外的字母。例如,eel变为teel ...

提前致谢。

3 个答案:

答案 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']