Удалить слова, состоящие из повторяющихся букв - PullRequest
0 голосов
/ 30 марта 2019

У меня есть столбец данных, который содержит текстовые данные. В нем мало слов, полностью состоящих из повторяющихся букв, а несколько других имеют частично повторяющиеся буквы. Я хочу удалить слова, состоящие из полностью повторяющихся букв, и просто сохранить первое вхождение буквы в другом случае (если число повторяющихся букв больше 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 Ответ

1 голос
/ 31 марта 2019

Это может быть не очень элегантно и не очень быстро, но это работает.Я надеюсь, что это достаточно хорошо для ваших нужд.

Вы генерируете функцию, которая сортирует строку в соответствии с вашими потребностями, а затем используете отображение панд, чтобы применить ее ко всем вашим элементам, так:

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.

Я проверил это и получил ожидаемые результаты, но если вы столкнулись с проблемой в каком-то случае, я не сделал 'Не подумайте о проверке, пожалуйста, дайте мне знать, и я все исправлю.

...