Предварительная обработка текстовых данных: ключевые этапы и методы
Текстовые данные — один из самых сложных типов данных для анализа из-за их неструктурированной природы и высокой вариативности. Чтобы превратить "сырой" текст в информацию, пригодную для машинного обучения или лингвистического анализа, требуется предварительная обработка. Этот процесс включает стандартизацию, очистку и преобразование текста, что повышает качество моделей NLP (Natural Language Processing). Рассмотрим основные этапы и методы.
# создание функции очистки текстовых данных
def clean_text(text):
# Приведение текста к нижнему регистру
text = text.lower()
# Замена всех не-словесных символов на пробел (кроме букв и знаков препинания)
text = re.sub(r'\W+', ' ', text)
# Удаление URL-адресов
text = re.sub(r"http\S+", "", text)
# Создание шаблона для HTML-тегов
html = re.compile(r'<.*?>')
# Удаление HTML-тегов из текста
text = html.sub(r'', text)
# Список пунктуаций для удаления
punctuations = '@#!?+&*[]-%.:/();$=><|{}^' + "'`" + '_'
for p in punctuations:
text = text.replace(p, '') # Удаление пунктуации
# Удаление стоп-слов и приведение слов к нижнему регистру
text = [word.lower() for word in text.split() if word.lower() not in sw]
# Объединение слов обратно в текст
text = " ".join(text)
# Создание шаблона для поиска эмодзи
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # эмоции
u"\U0001F300-\U0001F5FF" # символы и пиктограммы
u"\U0001F680-\U0001F6FF" # транспорт и карты
u"\U0001F1E0-\U0001F1FF" # флаги
u"\U00002702-\U000027B0"
u"\U000024C2-\U0001F251"
"]+", flags=re.UNICODE)
# Удаление эмодзи из текста
text = emoji_pattern.sub(r'', text)
return textФункция выполняет следующие действия:
Приведение к нижнему регистру
Удаление всех спецсимволов
Удаление URL адресов
Удаление HTML-тегов
Удаление пунктуации
Очистка от стоп-слов
Удаление эмодзи
Приведение к нижнему регистру стандартизирует текстовые данные и позволяет воспринимать разные формы слова как одну. Спецсимволы не несут никакой смысловой нагрузки и путают алгоритмы кластеризации. При рассмотрении жалоб, нам не приносят никакой информации URL адреса и HTML-теги. Убирая пунктуацию, мы убираем лишние шумы в данных и сокращаем размер словаря. Удаление стоп-слов для обучения модели помогает уменьшить объём текста и сосредоточиться на важных и значимых словах. Эмодзи создают шумы в данных и не несут смысловой нагрузки при рассмотрение нашей проблемы.
# инициализация анализатора(лемматизатора)
morph = pymorphy3.MorphAnalyzer()
# инициализация функции лемматизации текстовых данных
def lemmatize(text: str) -> str:
# создание списка лемматизированных слов
lemmas = [morph.parse(token)[0].normal_form for token in text.split()]
# объединение слов в текст
processed_text = " ".join(lemmas)
return processed_textЗагрузка и нормализация текста
Первый шаг — приведение текста к единому формату. Это включает:
Удаление лишних символов: HTML-тегов, спецсимволов (например, \n, \t), эмодзи или URL-ссылок.
Нормализация кодировки (например, UTF-8) для корректного отображения символов.
Приведение к нижнему регистру для устранения различий между словами в разном регистре (например, "Текст" → "текст").
Пример:
Исходный текст: "ПРИвет! Посетите наш сайт: https://example.com
