<jupyter_start><jupyter_text><jupyter_code>import pandas as pd
import numpy as np
from google.colab import drive
drive.mount('/content/drive')
df_res = pd.read_excel('drive/MyDrive/new_case_dataset.xlsx')
spheres = ['Жилищно-коммунальное хозяйство', 'Здравоохранение', 'Благоустройство населённых пунктов (площади, парки, скверы, улицы, дворовые территории, кладбища)', 'Автомобильные дороги', 'Социальное обеспечение населения', 'Общественный транспорт (ОТ)', 'Образование', 'Неправомерная деятельность органов власти', 'Правопорядок', 'Экология', 'Трудовые отношения', 'Строительство, градостроительная деятельность']
import nltk
nltk.download('punkt')
nltk.download('stopwords')
import string
def remove_punctuation(text):
    return "".join([ch if ch not in string.punctuation else ' ' for ch in text])

def remove_numbers(text):
    return ''.join([i if not i.isdigit() else ' ' for i in text])

import re
def remove_multiple_spaces(text):
	return re.sub(r'\s+', ' ', text, flags=re.I)

from nltk.stem import *
from nltk.corpus import stopwords
from pymystem3 import Mystem
from string import punctuation
mystem = Mystem() 

russian_stopwords = stopwords.words("russian")
russian_stopwords.extend(['…', '«', '»', '...', 'здравствуйте', 'который', 'это', 'пожалуйста', 'спасибо', 'этот', 'наш', 'никто', 'свой'])
!pip install pymorphy2
!pip install catboost
df_res
import warnings
warnings.filterwarnings('ignore')
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics import accuracy_score
from sklearn.metrics import f1_score
from sklearn.metrics import classification_report
from sklearn.model_selection import cross_validate, StratifiedKFold
from catboost import CatBoostClassifier
cbc = CatBoostClassifier(random_state=42, n_estimators=20, max_depth=5)
X, y = [], []
for i, row in df_res.iterrows():
  th = remove_multiple_spaces(remove_numbers(remove_punctuation(str(row.theme).strip().lower())))
  X.append(th + ' ' + row.text_prep)
  y.append(row.sphere)
X, y = np.array(X), np.array(y)
model = Pipeline([('vect', CountVectorizer()),
                ('tfidf', TfidfTransformer()),
                ('clf', cbc),
               ])

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_validate(estimator=model, X=X, y=y, 
                         cv=skf, scoring=['f1_weighted', 'accuracy'], n_jobs=-1)
for i in scores.keys():
  print('{}\n scores = {} \nmean score = {:.5f} +/- {:.5f}'.format(i, scores[i], scores[i].mean(), scores[i].std()))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13960546282245828, 'fraction_numerical': 0.005690440060698027, 'mean_word_length': 5.642317380352645, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '414983', 'license': 'MIT', 'n_tokens_mistral': 965, 'n_tokens_neox': 994, 'n_words': 215, 'path': 'CatBoost.ipynb', 'repo_name': 'arinamur/Classification', 'size': '2636'}