Классификация текстовых документов с помощью nltk

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

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

Мне просто интересно, как я могу применить этот подход к моему проекту? Могу ли я создать несколько классов, таких как спорт, технологии, политика, развлечения и т. д.? Я столкнулся с препятствием здесь и ищу толчок в правильном направлении.

Если это не подходящий вопрос для SO, я с радостью удалю его.

Редактировать: Всем привет, я вижу, что этот пост стал немного популярнее, я успешно завершил этот проект, вот ссылка на код в GitHub Repo проектов: https://github.com/codyreandeau/Email-Categorizer/blob/master/Email_Categorizer.py


person Cody    schedule 27.11.2016    source источник
comment
Вы смотрели библиотеку gensim python?   -  person amirouche    schedule 27.11.2016
comment
Чтобы начать классификацию, вам нужно сначала пометить набор данных. Это может быть аннотация вручную или на основе правил. Конечно, вы можете создать мультикласс для своего набора данных. Для вашего случая типа электронной почты наверняка у вас есть мультикласс. Затем вы можете начать обучение и классифицировать свои данные. Либо с помощью теста cv, либо с разделением поезда. Как вы сделали для обзоров фильмов.   -  person Suhairi Suhaimin    schedule 29.11.2016
comment
Как уже упоминалось, gensim занимается моделированием тем. Ссылка: radimrehurek.com/gensim/tutorial.html Gensim находит семантическое сходство между документами и группирует их. . Вы можете идентифицировать сегменты как спорт, политика, технологии и т. д., просматривая документы в определенном кластере.   -  person timekeeper    schedule 29.11.2016


Ответы (2)


Чтобы создать классификатор, вам нужен набор обучающих данных с классами, которые вы ищете. В вашем случае вам может понадобиться:

  1. создать свой собственный набор данных
  2. использовать уже существующий набор данных

коричневый корпус — это исходный текст со многими категориями, о которых вы говорите. Это может быть отправной точкой для классификации ваших электронных писем с помощью некоторого пакета, такого как gensim, для поиска семантически похожих текстов.

Как только вы классифицируете свои электронные письма, вы можете обучить систему предсказывать метку для каждого непросмотренного электронного письма.

person Nathan McCoy    schedule 29.11.2016
comment
Спасибо за это, супер полезно! - person Cody; 29.11.2016

Задача классификации текста — это задача Supervised Machine Learning. Это означает, что вам нужно иметь помеченные данные. Когда вы подошли к проблеме movie_review, вы использовали метки +1/-1 для обучения вашей системы анализа настроений.

Возвращаясь к вашей проблеме:

  1. Если у вас есть метки для ваших данных, подойдите к проблеме таким же образом. Я предлагаю вам использовать библиотеку scikit-learn. Здесь вы можете почерпнуть вдохновение: Scikit-Learn for Text Classification

  2. Если у вас нет ярлыков, вы можете попробовать неконтролируемый подход к обучению. Если вы знаете, сколько категорий (назовите номер K) у вас есть, вы можете попробовать подход KMeans. Это означает группировку писем в K категорий в зависимости от того, насколько они похожи. Похожие письма попадут в похожие корзины. Затем осмотрите грозди вручную и придумайте этикетку. Назначьте новые электронные письма наиболее похожему кластеру. Если вам нужна помощь с KMeans, воспользуйтесь этим быстрым рецептом: Рецепт кластеризации текста

Предложение: получить ярлыки для электронных писем может быть проще, чем вы думаете. Например, Gmail позволяет экспортировать электронные письма с информацией о папке. Если вы классифицировали свою электронную почту, вы можете воспользоваться этим.

person bogs    schedule 29.11.2016