删除由重复字母组成的单词

时间:2019-03-30 18:11:55

标签: python regex nlp text-processing

我有一个dataframe列,其中包含文本数据。它很少有完全由重复字母组成的词,而很少有部分由重复字母组成的词。我想删除完全由重复字母组成的单词,而在其他情况下(如果重复字母的计数大于2)将其保留在dataframe列中。这该怎么做?例如,如果我的数据框中包含-

id   text
1     aaaa
2     bb
3     wwwwwwww
4     helloooo
5     see youuuu 

输出应为-

id   text
1     
2     
3    
4    hello
5    see you 

1 个答案:

答案 0 :(得分:1)

这可能不是特别优雅,并且可能不会很快,但是可以工作。我希望它足以满足您的需求。

您将生成一个根据需要对字符串进行排序的函数,然后使用pandas映射将其应用于所有元素,因此:

def clean(string):
    if (len(string)==0):
        return ''
    if (set(string) == set(string[0])):
        return ''    
    prev = None
    letters = [l for l in string]
    counter = 1
    new = []
    for l in letters:
        if l==prev:
            counter+=1
        else:
            if (counter==2):
                new.append(prev)
            counter=1
            new.append(l)
            prev = l
    return ''.join(new)

然后您可以执行以下操作:

df['text'] = df['text'].fillna('').map(clean)

简而言之,您首先要检查整个字符串是否在一个字母中(集合将仅保留唯一元素)。然后,您开始遍历所有字母,跳过重复的单词,但保留重复字母的数量。最后,当重复序列完成后,仅当重复数正好为2时,您才添加一个副本。

我对此进行了测试,并获得了预期的结果,但是如果您确实遇到某种情况下我没有想到要检查的问题,请告诉我,我会予以解决。