#python #regex #nlp #text-processing
#python #регулярное выражение #nlp #обработка текста
Вопрос:
У меня есть столбец 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. Необходимо составить новый список со стоп-словами? Я не понимаю, что вы хотите сделать с фреймом данных.
2. @JacobFuchs…..It нет необходимости создавать новый список со стоп-словами. Я просто подумал, что один из способов сделать это может быть таким. Я хочу удалить все «слова», которые полностью состоят из одной и той же повторяющейся «буквы», из столбца dataframe
Ответ №1:
Это может быть не особенно элегантно и не очень быстро, но это работает. Я надеюсь, что это достаточно хорошо для ваших нужд.
Вы генерируете функцию, которая сортирует строку в соответствии с вашими потребностями, а затем используете pandas mapping, чтобы применить ее ко всем вашим элементам, так:
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)
Вкратце, сначала вы проверяете, состоит ли вся строка из одной буквы (set сохранит только уникальные элементы). Затем вы начинаете перебирать все буквы, пропуская повторы, но ведя подсчет повторяющихся букв. Наконец, когда последовательность повторов выполнена, вы добавляете еще одну копию, только если количество повторов было ровно 2.
Я протестировал это и получил ожидаемые результаты, но если вы столкнетесь с проблемой в каком-то случае, который я не подумал проверить, пожалуйста, дайте мне знать, и я это исправлю.
Комментарии:
1. У вас, вероятно, есть пустые ячейки, я добавлю условие, которое проверяет это, дайте мне знать, если вы все еще получаете предупреждение