Sobes.tech
Назад к вопросам
Middle
7

Как предобрабатывать текст: какие стоп-слова и пунктуацию убирать, использовать стемминг или лемматизацию?

Компании, где спрашивали
ПлатформаОФД

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Нужно понимать, что предобработка текста зависит от задачи и языка, а не делается “всегда по максимуму”. Обычно удаляют шум: лишнюю пунктуацию, служебные символы, часть стоп-слов, приводят слова к нормальной форме. Для русского языка чаще полезнее лемматизация, а стемминг — более грубый и быстрый вариант, который подходит не для всех задач.

Определение:

Предобработка текста — это набор шагов, который делает текст более удобным для анализа и обучения моделей.
Стоп-слова — это часто встречающиеся слова с небольшой смысловой нагрузкой, например «и», «в», «на», «это».
Пунктуацию обычно убирают, если она не несёт важного сигнала для задачи.
Стемминг обрезает слова до корня механически, а лемматизация приводит слово к словарной форме с учётом морфологии.

Пример использования:

Для классификации отзывов можно удалить лишнюю пунктуацию, привести текст к нижнему регистру, убрать часть стоп-слов и лемматизировать слова, чтобы «купил», «покупка», «покупать» стали ближе по смыслу.
Это уменьшает размер словаря и помогает модели лучше обобщать.

import re
from pymorphy2 import MorphAnalyzer

morph = MorphAnalyzer()
stop_words = {"и", "в", "на", "это", "как", "а", "но"}

text = "Я купил новый телефон, и это было отличное решение!"

# 1. Нормализация
text = text.lower()

# 2. Удаление пунктуации
text = re.sub(r"[^\w\s]", "", text)

# 3. Токенизация
tokens = text.split()

# 4. Удаление стоп-слов
tokens = [t for t in tokens if t not in stop_words]

# 5. Лемматизация
lemmas = [morph.parse(t)[0].normal_form for t in tokens]

print(lemmas)
# ['я', 'купить', 'новый', 'телефон', 'было', 'отличный', 'решение']

Пояснение кода:

Сначала текст переводится в нижний регистр, чтобы не считать Телефон и телефон разными токенами.
Затем регулярным выражением удаляется пунктуация.
После этого строка разбивается на слова, из них выкидываются стоп-слова, и оставшиеся токены лемматизируются.
В результате слова приводятся к базовой форме, что снижает разреженность признаков.

Ключевые моменты:

  • Стоп-слова удаляют не всегда: в задачах вроде sentiment analysis они могут быть полезны, если важны отрицания и служебные конструкции.
  • Пунктуацию обычно убирают, но иногда сохраняют !, ?, эмодзи и многоточия, если они несут эмоциональный сигнал.
  • Лемматизация точнее стемминга, но медленнее и обычно предпочтительнее для русского языка.
  • Стемминг быстрее, но может давать некорректные основы слов и хуже работает на морфологически богатых языках.
  • Для bag-of-words и TF-IDF часто полезны удаление шума и лемматизация; для современных трансформеров агрессивная предобработка обычно не нужна.
  • Лучший набор шагов зависит от цели: классификация, поиск, тематическое моделирование, извлечение сущностей требуют разной обработки.