{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# TF-IDF" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import re\n", "import string\n", "from collections import defaultdict\n", "from sklearn import metrics\n", "from time import time\n", "from nltk.corpus import stopwords\n", "from nltk.stem import WordNetLemmatizer\n", "from nltk.tokenize import RegexpTokenizer\n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "from sklearn.cluster import KMeans\n", "from sklearn.datasets import fetch_20newsgroups\n", "from sklearn.decomposition import TruncatedSVD\n", "from sklearn.pipeline import make_pipeline\n", "from sklearn.preprocessing import Normalizer\n", "import pymorphy2\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import classification_report, accuracy_score, f1_score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Загрузка данных" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "df = pd.read_json('data/healthcare_facilities_reviews.jsonl', lines=True)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | review_id | \n", "category | \n", "title | \n", "content | \n", "sentiment | \n", "source_url | \n", "
---|---|---|---|---|---|---|
0 | \n", "0 | \n", "Поликлиники стоматологические | \n", "Классный мастер | \n", "Огромное спасибо за чудесное удаление двух зуб... | \n", "positive | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=2727539 | \n", "
1 | \n", "1 | \n", "Поликлиники стоматологические | \n", "Замечательный врач | \n", "Хочу выразить особую благодарность замечательн... | \n", "positive | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=2302877 | \n", "
2 | \n", "2 | \n", "Поликлиники стоматологические | \n", "Благодарность работникам рентгена | \n", "Добрый вечер! Хотелось бы поблагодарить сотруд... | \n", "positive | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=2815031 | \n", "
3 | \n", "3 | \n", "Поликлиники стоматологические | \n", "Доктор Рабинович | \n", "Женщины советского образца в регистратуре не и... | \n", "negative | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=3443161 | \n", "
4 | \n", "4 | \n", "Поликлиники стоматологические | \n", "Есть кому сказать спасибо | \n", "У меня с детства очень плохие зубы (тонкая и х... | \n", "positive | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=2592430 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
70592 | \n", "70592 | \n", "Водительские комиссии | \n", "Хуже районной поликлиники | \n", "Заведение ужасное. Врачи делят 1 кабинет на 2х... | \n", "negative | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=273326 | \n", "
70593 | \n", "70593 | \n", "Водительские комиссии | \n", "Справки | \n", "Люди, не обращайтесь в эту фирму! Муж проходил... | \n", "negative | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=3401583 | \n", "
70594 | \n", "70594 | \n", "Водительские комиссии | \n", "Мед-Альфа - это наше будущее | \n", "Дорогие посетители медицинского центра ООО \"Ме... | \n", "positive | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=326078 | \n", "
70595 | \n", "70595 | \n", "Водительские комиссии | \n", "Хамское поведение | \n", "В регистратуре сидит хамка, такое отношение и ... | \n", "negative | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=3171911 | \n", "
70596 | \n", "70596 | \n", "Водительские комиссии | \n", "Только хорошие впечатления | \n", "Хочу поблагодарить весь персонал \"МедАльфаПроф... | \n", "positive | \n", "http://www.spr.ru/forum_vyvod.php?id_tema=3391562 | \n", "
70597 rows × 6 columns
\n", "\n", " | sentiment | \n", "content | \n", "
---|---|---|
0 | \n", "positive | \n", "Огромное спасибо за чудесное удаление двух зуб... | \n", "
1 | \n", "positive | \n", "Хочу выразить особую благодарность замечательн... | \n", "
2 | \n", "positive | \n", "Добрый вечер! Хотелось бы поблагодарить сотруд... | \n", "
3 | \n", "negative | \n", "Женщины советского образца в регистратуре не и... | \n", "
4 | \n", "positive | \n", "У меня с детства очень плохие зубы (тонкая и х... | \n", "
... | \n", "... | \n", "... | \n", "
70592 | \n", "negative | \n", "Заведение ужасное. Врачи делят 1 кабинет на 2х... | \n", "
70593 | \n", "negative | \n", "Люди, не обращайтесь в эту фирму! Муж проходил... | \n", "
70594 | \n", "positive | \n", "Дорогие посетители медицинского центра ООО \"Ме... | \n", "
70595 | \n", "negative | \n", "В регистратуре сидит хамка, такое отношение и ... | \n", "
70596 | \n", "positive | \n", "Хочу поблагодарить весь персонал \"МедАльфаПроф... | \n", "
70597 rows × 2 columns
\n", "\n", " | sentiment | \n", "content | \n", "cleaned_text | \n", "
---|---|---|---|
0 | \n", "positive | \n", "Огромное спасибо за чудесное удаление двух зуб... | \n", "огромный спасибо чудесный удаление два зуб муд... | \n", "
1 | \n", "positive | \n", "Хочу выразить особую благодарность замечательн... | \n", "хотеть выразить особый благодарность замечател... | \n", "
2 | \n", "positive | \n", "Добрый вечер! Хотелось бы поблагодарить сотруд... | \n", "добрый вечер хотеться поблагодарить сотрудник ... | \n", "
3 | \n", "negative | \n", "Женщины советского образца в регистратуре не и... | \n", "женщина советский образец регистратура иметь п... | \n", "
4 | \n", "positive | \n", "У меня с детства очень плохие зубы (тонкая и х... | \n", "детство очень плохой зуб тонкий хрупкий эмаль ... | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
70592 | \n", "negative | \n", "Заведение ужасное. Врачи делят 1 кабинет на 2х... | \n", "заведение ужасный врач делить 1 кабинет 2х спе... | \n", "
70593 | \n", "negative | \n", "Люди, не обращайтесь в эту фирму! Муж проходил... | \n", "человек обращаться фирма муж проходить анализ ... | \n", "
70594 | \n", "positive | \n", "Дорогие посетители медицинского центра ООО \"Ме... | \n", "дорогой посетитель медицинский центр ооо медал... | \n", "
70595 | \n", "negative | \n", "В регистратуре сидит хамка, такое отношение и ... | \n", "регистратура сидеть хамка такой отношение мане... | \n", "
70596 | \n", "positive | \n", "Хочу поблагодарить весь персонал \"МедАльфаПроф... | \n", "хотеть поблагодарить весь персонал медальфапро... | \n", "
70597 rows × 3 columns
\n", "\n", " | sentiment | \n", "content | \n", "cleaned_text | \n", "
---|---|---|---|
0 | \n", "0 | \n", "Огромное спасибо за чудесное удаление двух зуб... | \n", "огромный спасибо чудесный удаление два зуб муд... | \n", "
1 | \n", "0 | \n", "Хочу выразить особую благодарность замечательн... | \n", "хотеть выразить особый благодарность замечател... | \n", "
2 | \n", "0 | \n", "Добрый вечер! Хотелось бы поблагодарить сотруд... | \n", "добрый вечер хотеться поблагодарить сотрудник ... | \n", "
3 | \n", "1 | \n", "Женщины советского образца в регистратуре не и... | \n", "женщина советский образец регистратура иметь п... | \n", "
4 | \n", "0 | \n", "У меня с детства очень плохие зубы (тонкая и х... | \n", "детство очень плохой зуб тонкий хрупкий эмаль ... | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
70592 | \n", "1 | \n", "Заведение ужасное. Врачи делят 1 кабинет на 2х... | \n", "заведение ужасный врач делить 1 кабинет 2х спе... | \n", "
70593 | \n", "1 | \n", "Люди, не обращайтесь в эту фирму! Муж проходил... | \n", "человек обращаться фирма муж проходить анализ ... | \n", "
70594 | \n", "0 | \n", "Дорогие посетители медицинского центра ООО \"Ме... | \n", "дорогой посетитель медицинский центр ооо медал... | \n", "
70595 | \n", "1 | \n", "В регистратуре сидит хамка, такое отношение и ... | \n", "регистратура сидеть хамка такой отношение мане... | \n", "
70596 | \n", "0 | \n", "Хочу поблагодарить весь персонал \"МедАльфаПроф... | \n", "хотеть поблагодарить весь персонал медальфапро... | \n", "
70597 rows × 3 columns
\n", "Pipeline(steps=[('preprocessor', TextPreprocessor()),\n", " ('vectorizer',\n", " TfidfVectorizer(max_df=0.9, min_df=500,\n", " stop_words=['и', 'в', 'во', 'не', 'что', 'он',\n", " 'на', 'я', 'с', 'со', 'как', 'а',\n", " 'то', 'все', 'она', 'так', 'его',\n", " 'но', 'да', 'ты', 'к', 'у', 'же',\n", " 'вы', 'за', 'бы', 'по', 'только',\n", " 'ее', 'мне', ...])),\n", " ('lsa',\n", " Pipeline(steps=[('truncatedsvd',\n", " TruncatedSVD(n_components=500)),\n", " ('normalizer', Normalizer(copy=False))])),\n", " ('classifier', LogisticRegression())])In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
Pipeline(steps=[('preprocessor', TextPreprocessor()),\n", " ('vectorizer',\n", " TfidfVectorizer(max_df=0.9, min_df=500,\n", " stop_words=['и', 'в', 'во', 'не', 'что', 'он',\n", " 'на', 'я', 'с', 'со', 'как', 'а',\n", " 'то', 'все', 'она', 'так', 'его',\n", " 'но', 'да', 'ты', 'к', 'у', 'же',\n", " 'вы', 'за', 'бы', 'по', 'только',\n", " 'ее', 'мне', ...])),\n", " ('lsa',\n", " Pipeline(steps=[('truncatedsvd',\n", " TruncatedSVD(n_components=500)),\n", " ('normalizer', Normalizer(copy=False))])),\n", " ('classifier', LogisticRegression())])
TextPreprocessor()
TfidfVectorizer(max_df=0.9, min_df=500,\n", " stop_words=['и', 'в', 'во', 'не', 'что', 'он', 'на', 'я', 'с',\n", " 'со', 'как', 'а', 'то', 'все', 'она', 'так', 'его',\n", " 'но', 'да', 'ты', 'к', 'у', 'же', 'вы', 'за', 'бы',\n", " 'по', 'только', 'ее', 'мне', ...])
Pipeline(steps=[('truncatedsvd', TruncatedSVD(n_components=500)),\n", " ('normalizer', Normalizer(copy=False))])
TruncatedSVD(n_components=500)
Normalizer(copy=False)
LogisticRegression()