Этот репозиторий содержит код и ноутбук для курсовой работы по дисциплине
«Анализ больших текстовых данных и текстовый поиск».
Цель проекта — по тексту поста из социальной сети ВКонтакте определить,
был ли он опубликован в сообществе про железнодорожный транспорт или про водный транспорт. Я взял следующие сообщества:
По водному транспорту – https://vk.com/fleet_history По железнодорожному траспорту – https://vk.com/rzd_official
Во ВКонтакте существует множество транспортных сообществ: про железные дороги, водный транспорт, авиацию, городской транспорт и т.д.
Каждое сообщество формирует свой характерный «лексический профиль»: устойчивые слова и выражения, специфические для тематики.
В этом проекте:
- выбираются два конкретных сообщества: одно про железные дороги, другое про водный транспорт;
- с помощью VK API собираются тексты постов со стен этих групп;
- тексты проходят предобработку: очистка, лемматизация, удаление стоп-слов;
- строится векторное представление документов методом TF-IDF (униграммы и биграммы);
- обучаются и сравниваются две модели:
- Multinomial Naive Bayes
- Logistic Regression
- оценивается качество (accuracy, F1) и интерпретируются наиболее информативные слова/н-граммы для каждой тематики.
Проект реализован в Jupyter Notebook на языке Python 3.
Используемые библиотеки:
- Работа с данными:
pandas,numpy - Визуализация:
matplotlib,seaborn - VK API:
requests,vk_api - Обработка текста:
nltk,razdel,pymorphy2,emoji - Модели и метрики:
scikit-learn
Рекомендуемый набор пакетов:
pandas
numpy
matplotlib
seaborn
requests
vk-api
nltk
razdel
pymorphy2
emoji
scikit-learnУстановка:
pip install pandas numpy matplotlib seaborn requests vk-api nltk razdel pymorphy2 emoji scikit-learn.
├── ВохминАЕ_Курсовая_АнализТекстов.ipynb # основной Jupyter-ноутбук с кодом
└── README.md # описание проекта (этот файл)
- Создать standalone-приложение во ВКонтакте (через https://dev.vk.com).
- Получить
access_tokenс правами чтения стен сообществ. - В корне проекта создать файл
vk_token.txtи записать туда токен одной строкой. - Убедиться, что
vk_token.txtдобавлен в.gitignore.
-
Клонировать репозиторий или скачать архив:
git clone https://github.com/your-username/your-repo-name.git cd your-repo-name -
Установить зависимости (см. раздел выше).
-
Положить рядом с ноутбуком файл
vk_token.txtс вашим токеном VK. -
Запустить Jupyter:
jupyter notebook
и открыть файл
ВохминАЕ_Курсовая_АнализТекстов.ipynb. -
Выполнить ячейки сверху вниз:
- импорт библиотек и настройка окружения;
- чтение токена и задание ID двух групп VK (железные дороги / водный транспорт);
- сбор постов методом
wall.getв два датафрейма; - формирование единого корпуса, удаление пустых, коротких текстов и дубликатов;
- предобработка (
clean_text,normalize_text), формированиеtext_cleanиtext_norm; - разведочный анализ (EDA): баланс классов, длина текстов, топ-леммы;
- разбиение на train/test, TF-IDF-векторизация;
- обучение моделей (Naive Bayes, Logistic Regression), расчёт метрик и матриц ошибок;
- анализ весов логистической регрессии и функция
classify(text).
-
Сбор данных Выгрузка постов из двух сообществ ВКонтакте с помощью VK API (
wall.get) с сохранением текста и базовых метаданных. -
Формирование корпуса Объединение постов в общий
DataFrame, добавление меток классов (rail/water), фильтрация пустых и слишком коротких сообщений, удаление дубликатов. -
Предобработка текста Очистка (
clean_text): ссылки, упоминания, HTML-сущности, эмодзи, лишние символы. Нормализация (normalize_text): токенизация, лемматизация, удаление стоп-слов и коротких токенов. Результат — колонкаtext_norm. -
Разведочный анализ (EDA) Анализ длины сообщений и баланса классов, построение топ-лемм для каждой группы.
-
Векторизация и обучение моделей Построение TF-IDF-признаков (униграммы + биграммы). Обучение
MultinomialNBиLogisticRegressionна обучающей выборке. Оценка на тесте: accuracy, F1, матрицы ошибок. -
Интерпретация и демонстрация Анализ коэффициентов логистической регрессии: слова и н-граммы, характерные для каждой тематики. Функция
classify(text)для интерактивной проверки работы модели.
-
Обе модели (Naive Bayes и Logistic Regression) на тестовой выборке показывают почти идеальное качество (accuracy и F1 близки к 1.0).
-
Матрицы ошибок не содержат неверных классификаций: выбранные сообщества хорошо различимы по лексике.
-
По весам логистической регрессии видно, что:
- для железнодорожной тематики чаще всего встречаются слова, связанные с поездами, станциями, путями, расписанием;
- для водного транспорта — слова, описывающие суда, рейсы, порты, причалы, навигацию.
Возможные направления развития проекта:
- добавить новые классы (авиация, городской транспорт и др.) и перейти к многоклассовой классификации;
- сравнить TF-IDF с более сложными представлениями текста (word2vec, fastText, BERT-модели);
- завернуть модель в простой веб-сервис или Telegram-бота, который по введённому тексту определяет, к какой транспортной тематике он ближе.
Курсовая работа по дисциплине «Анализ больших текстовых данных и текстовый поиск» (РУТ (МИИТ)).
Ноутбук: ВохминАЕ_Курсовая_АнализТекстов.ipynb.