Найдите слова с расширенными буквами и просто сохраните первое вхождение этой буквы - PullRequest
0 голосов
/ 30 марта 2019

У меня есть столбец данных, который содержит текстовые данные.В нем мало слов с повторяющимися буквами.Я хочу найти все такие слова, затем сохранить эти слова как ключи в словаре и их правильное написание как значения в словаре, а затем заменить слово в кадре данных его значением в словаре.Например, если в моем фрейме данных есть слова типа -

id   text
1     Hiiiiiii
2     Good morninggggggg
3     See you soooonnnn

1) Мне нужно найти такие слова в столбце фрейма данных 2) сохранить эти слова в словаре {Hiiiiiii: Привет, morninggggggg: утро, soooonnnn: скоро}3) затем замените эти слова в кадре данных их значениями в словаре. 4) Окончательный результат должен выглядеть следующим образом:

id   text
1     Hi
2     Good morning
3     See you soon
.

1 Ответ

0 голосов
/ 30 марта 2019

Следующая функция сообщает слова с повторениями. Имейте в виду, что split() обычно выполняет посредственную работу по определению слов. Вы, вероятно, хотите заменить его на nltk.word_tokenize().

import re
def find_bad(sent):
    return [w for w in sent.split() 
            if re.search(r'(:?\w)\1\1', w, re.I)]

Примените функцию к каждому предложению в кадре данных и соберите результаты:

bad_words = df['text'].apply(find_bad).sum()
# ['Hiiiiiii', 'morninggggggg', 'soooonnnn']

Я пропущу часть построения словаря, поскольку она (а) тривиальна и (б) требует взаимодействия с пользователем. Допустим, имя словаря corrections. Теперь вы можете использовать словарь для восстановления вашего текста:

df['text'] = df['text'].replace(corrections, regex=True)

Опять же, имейте в виду, что replace чувствителен к регистру. Вы можете преобразовать все тексты в нижний регистр перед дальнейшей обработкой.

...