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