{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "051c5726", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "import numpy as np\n", "from wordcloud import WordCloud\n", "\n", "from sklearn.feature_extraction.text import CountVectorizer\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix\n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.model_selection import KFold, StratifiedShuffleSplit\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.metrics import ConfusionMatrixDisplay\n", "\n", "import re\n", "import string\n", "from stop_words import get_stop_words\n", "\n", "from imblearn.over_sampling import RandomOverSampler\n", "\n", "import spacy\n", "\n", "from nltk import ngrams\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "310c031d", "metadata": {}, "outputs": [], "source": [ "pd.set_option(\"display.max_colwidth\", 255)\n", "pd.set_option('display.max_rows', 255)" ] }, { "cell_type": "code", "execution_count": 3, "id": "cc6821d0", "metadata": {}, "outputs": [], "source": [ "df = pd.read_excel(\"training-nltk-mapping3.xlsx\")\n", "cnt = df.groupby(\"CASISTICA_MOTIVAZIONE\").count() \\\n", ".rename(columns={\"Unnamed: 0\": \"count\"})[\"count\"]" ] }, { "cell_type": "code", "execution_count": null, "id": "4b8cbd26", "metadata": {}, "outputs": [], "source": [ "def prune_infrequent_classes(input_df: pd.DataFrame):\n", " card_thresh = 10\n", " cnt = input_df[[\"CASISTICA_MOTIVAZIONE\",\"NOTE_OPERATORE\"]].groupby([\"CASISTICA_MOTIVAZIONE\"]).count().rename({\"NOTE_OPERATORE\":\"count\"},axis=1)\n", " res = input_df.merge(cnt, on=\"CASISTICA_MOTIVAZIONE\")\n", " res = res[res[\"count\"] >= card_thresh]\n", " res = res.drop(\"count\", axis=1)\n", " return res\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "3903d9da", "metadata": {}, "outputs": [], "source": [ "def unique_str(l:list[str]):\n", " return list(set(l))\n", "\n", "def apply_ngram(l:list[str], n:int):\n", " return list(ngrams(l, n))\n", "\n", "def join_string_list(l:list[tuple[str]]):\n", " return [\" \".join(list(i)) for i in l]" ] }, { "cell_type": "code", "execution_count": null, "id": "c0d08201", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\a.torchi\\AppData\\Local\\Temp\\ipykernel_31116\\2333237563.py:5: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " df_cp[\"NOTE_OPERATORE_lower\"] = df_cp[\"NOTE_OPERATORE\"].str.lower()\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CASISTICA_MOTIVAZIONENOTE_OPERATORE_2gram_unique_wordsngram_occurrenciesrecord_per_class
0Periodo diversoallega vers28831
1Genericaveicolo intestato152763
2Genericaessere mai142763
3Periodo diversoperiodi tributari14831
4Periodo diversoscansiona versamento14831
5Furto non annotatofurto trascritto12116
6Periodo diversorelativa vers.12831
7Periodo diversoversamento periodo12831
8Periodo diversorelativa anno11831
9Genericadichiara vendita102763
10Genericaintestato società102763
11Genericamodalità pagamento102763
12Genericascrive essere102763
13Periodo diversodiverso periodo10831
14Vendita tardivalombardo mese9257
15Periodo diversosuccessivo versamento9831
16Genericaannotazione carta92763
17Genericademolizione annotata92763
18Genericadichiara demolizione92763
19Genericadocumentazione carente92763
20Genericanessun atto92763
21Genericarisulta intestatario92763
22Genericadocumento didentità82763
23Genericaon line82763
24Vendita tardivavenduta dopo8257
\n", "
" ], "text/plain": [ " CASISTICA_MOTIVAZIONE NOTE_OPERATORE_2gram_unique_words \\\n", "0 Periodo diverso allega vers \n", "1 Generica veicolo intestato \n", "2 Generica essere mai \n", "3 Periodo diverso periodi tributari \n", "4 Periodo diverso scansiona versamento \n", "5 Furto non annotato furto trascritto \n", "6 Periodo diverso relativa vers. \n", "7 Periodo diverso versamento periodo \n", "8 Periodo diverso relativa anno \n", "9 Generica dichiara vendita \n", "10 Generica intestato società \n", "11 Generica modalità pagamento \n", "12 Generica scrive essere \n", "13 Periodo diverso diverso periodo \n", "14 Vendita tardiva lombardo mese \n", "15 Periodo diverso successivo versamento \n", "16 Generica annotazione carta \n", "17 Generica demolizione annotata \n", "18 Generica dichiara demolizione \n", "19 Generica documentazione carente \n", "20 Generica nessun atto \n", "21 Generica risulta intestatario \n", "22 Generica documento didentità \n", "23 Generica on line \n", "24 Vendita tardiva venduta dopo \n", "\n", " ngram_occurrencies record_per_class \n", "0 28 831 \n", "1 15 2763 \n", "2 14 2763 \n", "3 14 831 \n", "4 14 831 \n", "5 12 116 \n", "6 12 831 \n", "7 12 831 \n", "8 11 831 \n", "9 10 2763 \n", "10 10 2763 \n", "11 10 2763 \n", "12 10 2763 \n", "13 10 831 \n", "14 9 257 \n", "15 9 831 \n", "16 9 2763 \n", "17 9 2763 \n", "18 9 2763 \n", "19 9 2763 \n", "20 9 2763 \n", "21 9 2763 \n", "22 8 2763 \n", "23 8 2763 \n", "24 8 257 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def get_unique_ngrams(df: pd.DataFrame, n:int):\n", " df_cp = df[[\"CASISTICA_LAVORAZIONE\",\"NOTE_OPERATORE\",\"CASISTICA_MOTIVAZIONE\"]]\n", "\n", " #make all strings lowercase\n", " df_cp[\"NOTE_OPERATORE_lower\"] = df_cp[\"NOTE_OPERATORE\"].str.lower()\n", "\n", " #make column as a list of words (1-gram)\n", " splitted_col_name = \"NOTE_OPERATORE_split_{}gram\".format(str(n))\n", " df_cp[\"NOTE_OPERATORE_split_1gram\"] = df_cp[\"NOTE_OPERATORE_lower\"].str.split(\" \")\n", "\n", " #if n!=1 make a column as a list of n-grams\n", " if(n!=1):\n", " df_cp[splitted_col_name] = df_cp[\"NOTE_OPERATORE_split_1gram\"].apply(lambda x: apply_ngram(x, n))\n", "\n", " ngram_col_name = \"NOTE_OPERATORE_{}gram_unique_words\".format(str(n))\n", "\n", " #make sure every n-gram in every row is not repeated\n", " df_cp[ngram_col_name] = df_cp[splitted_col_name].apply(lambda x: unique_str(x))\n", "\n", " #concat every word composing a n-gram, transforming the column from a list[tuple[str]] to list[str]\n", " if(n!=1):\n", " df_cp[ngram_col_name] = df_cp[ngram_col_name].apply(lambda x: join_string_list(x))\n", "\n", "\n", " #explode the df, to make a row for every n-gram - then groupBy [class, n-gram] to find how many records contain every n-gram\n", " df_cp_ngram = df_cp[[ngram_col_name, \"CASISTICA_MOTIVAZIONE\", \"CASISTICA_LAVORAZIONE\"]].explode(ngram_col_name) \\\n", " .groupby([\"CASISTICA_MOTIVAZIONE\",ngram_col_name]).count()\\\n", " .sort_values(by=[\"CASISTICA_MOTIVAZIONE\", \"CASISTICA_LAVORAZIONE\"], ascending=[True,False])\\\n", " .reset_index() \\\n", " .rename(columns={\"CASISTICA_LAVORAZIONE\":\"count\"})\n", "\n", "\n", " #self-join the df to find every n-gram occurring in just one class\n", " df_cp_ngram_mrg = df_cp_ngram.merge(df_cp_ngram, how=\"left\", on=ngram_col_name)\n", " df_cp_ngram_mrg = df_cp_ngram_mrg.rename(columns={\"count_x\":\"ngram_occurrencies\"})\n", "\n", " df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE = df_cp_ngram_mrg.groupby([\"CASISTICA_MOTIVAZIONE_x\", ngram_col_name]).count()\n", " \n", " df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE = df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE.reset_index()\n", " df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE = df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE[[\"CASISTICA_MOTIVAZIONE_x\", ngram_col_name, \"count_y\"]] \\\n", " .rename(columns={\"count_y\":\"ngram_occurrencies_in_CASISTICA_MOTIVAZIONE\", \"CASISTICA_MOTIVAZIONE_x\": \"CASISTICA_MOTIVAZIONE\"})\n", " \n", " # find every n-gram occurring in just one class (it was groupedBy + count by [class,n-gram])\n", " df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE = df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE[df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE[\"ngram_occurrencies_in_CASISTICA_MOTIVAZIONE\"] == 1]\n", "\n", " #merge the new DF to produce the final result\n", " res = df_cp_ngram_mrg.merge(df_cp_ngram_mrg_uniqueCASISTICAMOTIVAZIONE, on=ngram_col_name)\n", "\n", " res = res[[\"CASISTICA_MOTIVAZIONE_x\", ngram_col_name, \"ngram_occurrencies\"]] #\"ngram_occurrencies_in_CASISTICA_MOTIVAZIONE\"\n", " res = res.rename(columns={\"CASISTICA_MOTIVAZIONE_x\":\"CASISTICA_MOTIVAZIONE\"})\n", "\n", " res = res.sort_values(by = \"ngram_occurrencies\", ascending=False)\n", "\n", " #groupBy and merge the original DF to create the column \"record_per_class\", indicating how many record occurr in every class\n", " df_grp_class = df.groupby(\"CASISTICA_MOTIVAZIONE\").count().reset_index()\n", " df_grp_class = df_grp_class.rename(columns={\"Unnamed: 0\":\"record_per_class\"})\n", " df_grp_class = df_grp_class[[\"CASISTICA_MOTIVAZIONE\", \"record_per_class\"]]\n", "\n", " res = res.merge(df_grp_class, on=\"CASISTICA_MOTIVAZIONE\")\n", "\n", " return res\n", "\n", "\n", "gram_dim = 2\n", "res= get_unique_ngrams(df, gram_dim)\n", "\n", "res.iloc[:25]\n" ] }, { "cell_type": "code", "execution_count": null, "id": "f05a5897", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CASISTICA_MOTIVAZIONENOTE_OPERATORE_split_3gramcount_placeholderCASISTICA_MOTIVAZIONE_selfjoincount_selfjoinsum_selfjointf_idf
2627Generica(mai, stato, proprietario)11Periodo diverso233.666667
2626Generica(mai, stato, proprietario)11No esenzione PH133.666667
2625Periodo diverso(manca, vers, allega)11Generica333.666667
2587Furto non annotato(annotata, pra, già)8Esportazione non annotata124.000000
2588Furto non annotato(annotata, pra, già)8Generica124.000000
2386Periodo diverso(periodo, tributario, versamento)4Generica114.000000
2335Regione diversa(versamento, favore, regione)4Periodo diverso114.000000
2347Furto non annotato(furto, allega, denuncia)4Generica114.000000
2356Vendita tardiva(vendita, bollo, dovuto)4Generica114.000000
2384Periodo diverso(versamento, allegato, relativo)4Vendita tardiva114.000000
2379Vendita tardiva(periodo, tributario, già)4Periodo diverso114.000000
2345Furto non annotato(denuncia, furto, mai)4Generica114.000000
2302Periodo diverso(allega, bollo, pagato)4Generica114.000000
2340Generica(presa, carico, demolitore)4Fermo114.000000
2315No esenzione PH(invalidità, idoneo, rilascio)4Generica114.000000
2295Periodo diverso(non, presente, bollo)4Vendita tardiva114.000000
2296Generica(altra, regione, periodo)4Acquisto nel mese di rinnovo; concessionario114.000000
2317Generica(nessun, versamento, presente)4Periodo diverso114.000000
2316Esenzione PH senza istanza(presente, cliente, avvisato)4Generica114.000000
2336Periodo diverso(non, presente, ricevuta)4Ricevuta non valida114.000000
2355Generica(domiciliazione, bancaria, attiva)4Domiciliazione tardiva114.000000
2282Generica(visura, pra, risulta)4Vendita tardiva114.000000
2280Vendita tardiva(veicolo, venduto, mese)4Generica114.000000
2273Generica(bollo, dovuto, cliente)4Demolizione114.000000
2277Generica(perdita, possesso, trascritta)4Sequestro non annotato114.000000
2330Regione diversa(versamento, effettuato, favore)4Periodo diverso114.000000
2383Vendita tardiva(utile, atto, di)4Acquisto nel mese di rinnovo; privato114.000000
2272Periodo diverso(non, congruo, versamento)4Veicolo diverso114.000000
2270Generica(pratica, lavorata, nuovo)4Periodo diverso114.000000
2309Generica(veicolo, demolito, periodo)4Demolizione114.000000
2279Generica(targa, errata, targa)4Regione diversa114.000000
2304Periodo diverso(presente, allega, versamenti)4Veicolo diverso114.000000
2645Vendita tardiva(vendita, tardivo, veicolo)13Acquisto nel mese di rinnovo; concessionario134.333333
2646Vendita tardiva(vendita, tardivo, veicolo)13Acquisto nel mese di rinnovo; privato234.333333
2607Generica(veicolo, targato, targa)9No esenzione PH124.500000
2608Generica(veicolo, targato, targa)9Veicolo diverso124.500000
2463Periodo diverso(regione, versamento, non)5Regione diversa115.000000
2616Periodo diverso(versamento, riferito, altra)10Veicolo diverso125.000000
2615Periodo diverso(versamento, riferito, altra)10Generica125.000000
2467Periodo diverso(richiesta, versamento, non)5Esenzione PH senza istanza115.000000
2462Generica(atto, altra, regione)5Acquisto nel mese di rinnovo; privato115.000000
2390Vendita tardiva(bollo, dovuto, vendita)5Generica 2_non allegata documentazione115.000000
2612Furto non annotato(perdita, possesso, furto)10Rientro in possesso125.000000
2395Generica(rientro, possesso, data)5Rientro in possesso115.000000
2394Periodo diverso(presente, aci/tabaccaio/agenzia, versamento)5Ricevuta non valida115.000000
2476Periodo diverso(allega, ricevuta, pagamento)5Generica115.000000
2448Generica(dichiara, aver, pagato)5Vendita tardiva115.000000
2446Generica(disabile, fiscalmente, carico)5No esenzione PH115.000000
2420Esenzione PH senza istanza(disabile, respinta, manca)5No esenzione PH115.000000
2611Furto non annotato(perdita, possesso, furto)10Generica125.000000
2662Generica(cliente, dichiara, aver)16Vendita tardiva135.333333
2664Generica(allega, carta, circolazione)16Esenzione PH senza istanza135.333333
2665Generica(allega, carta, circolazione)16Esportazione non annotata135.333333
2666Generica(allega, carta, circolazione)16Vendita tardiva135.333333
2663Generica(cliente, dichiara, aver)16Esportazione non annotata235.333333
2635Periodo diverso(non, presente, versamento)11Regione diversa125.500000
2636Periodo diverso(non, presente, versamento)11Veicolo diverso125.500000
2483Generica(documentazione, allegata, targa)6Periodo diverso116.000000
2639Generica(allega, certificato, storico)12Esenzione PH senza istanza226.000000
2534Periodo diverso(x, periodo, tributario)6Generica116.000000
2512Periodo diverso(versamento, allegato, anno)6Generica116.000000
2533Generica(carta, circolazione, annotazione)6Esenzione PH senza istanza116.000000
2518Vendita tardiva(pagamento, atto, di)6Acquisto nel mese di rinnovo; privato116.000000
2482Periodo diverso(non, presente, allegato)6Esenzione PH senza istanza116.000000
2642Periodo diverso(bollo, allegato, corrisponde)12Generica226.000000
2644Periodo diverso(bollo, pagato, x)12Regione diversa126.000000
2643Periodo diverso(bollo, pagato, x)12Generica126.000000
2479Periodo diverso(allegato, anno, manca)6Generica116.000000
2652Generica(atto, data, certa)13Furto non annotato126.500000
2651Generica(atto, data, certa)13Esportazione non annotata126.500000
2683Periodo diverso(presente, non, congruo)27Veicolo diverso346.750000
2680Periodo diverso(versam, presente, non)27Versamento annullato146.750000
2682Periodo diverso(presente, non, congruo)27Versamento annullato146.750000
2681Periodo diverso(versam, presente, non)27Veicolo diverso346.750000
2737Vendita tardiva(atto, di, vendita)152Domiciliazione tardiva1226.909091
2740Vendita tardiva(atto, di, vendita)152No minivoltura1226.909091
2745Vendita tardiva(atto, di, vendita)152Acquisto nel mese di rinnovo; privato7226.909091
2744Vendita tardiva(atto, di, vendita)152Periodo diverso6226.909091
2743Vendita tardiva(atto, di, vendita)152Demolizione2226.909091
2739Vendita tardiva(atto, di, vendita)152Generica 2_non allegata documentazione1226.909091
2738Vendita tardiva(atto, di, vendita)152Esportazione non annotata1226.909091
2742Vendita tardiva(atto, di, vendita)152Acquisto nel mese di rinnovo; concessionario2226.909091
2741Vendita tardiva(atto, di, vendita)152Veicolo diverso1226.909091
2654Vendita tardiva(dovuto, versamento, non)14Perdita possesso con DS successiva127.000000
2653Vendita tardiva(dovuto, versamento, non)14Esportazione non annotata127.000000
2579Generica(allega, presa, carico)7Fermo117.000000
2572Periodo diverso(presente, allega, versamento)7Veicolo diverso117.000000
2576Periodo diverso(corrisponde, periodo, richiesto)7Regione diversa117.000000
2578Periodo diverso(pagato, x, periodo)7Generica117.000000
2566Periodo diverso(ricevuta, allegata, riferita)7Veicolo diverso117.000000
2731Vendita tardiva(di, vendita, tardivo)147Domiciliazione tardiva1197.736842
2733Vendita tardiva(di, vendita, tardivo)147Veicolo diverso1197.736842
2732Vendita tardiva(di, vendita, tardivo)147No minivoltura1197.736842
2735Vendita tardiva(di, vendita, tardivo)147Periodo diverso6197.736842
2734Vendita tardiva(di, vendita, tardivo)147Acquisto nel mese di rinnovo; concessionario2197.736842
2736Vendita tardiva(di, vendita, tardivo)147Acquisto nel mese di rinnovo; privato7197.736842
2730Vendita tardiva(di, vendita, tardivo)147Demolizione1197.736842
2591Periodo diverso(riferito, periodo, tributario)8Generica118.000000
2589Fermo(fermo, amministrativo, fermo)8Generica118.000000
2583Furto non annotato(furto, mai, trascritto)8Generica118.000000
2586Vendita tardiva(atto, vendita, atto)8Generica 2_non allegata documentazione118.000000
2590Generica(manca, carta, circolazione)8Esportazione non annotata118.000000
2602Periodo diverso(ricevuta, relativa, diverso)9Veicolo diverso119.000000
2610Regione diversa(regione, bollo, pagato)9Generica119.000000
2609Generica(dichiara, aver, venduto)9Vendita tardiva119.000000
2614Vendita tardiva(tardivo, veicolo, venduto)10Generica1110.000000
2621Periodo diverso(allegato, corrisponde, periodo)10Regione diversa1110.000000
2613Vendita tardiva(dovuto, atto, di)10Periodo diverso1110.000000
2620Periodo diverso(non, congruo, allega)10Veicolo diverso1110.000000
2637Periodo diverso(allega, versamento, anno)11Veicolo diverso1111.000000
2624Periodo diverso(allegata, ricevuta, relativa)11Veicolo diverso1111.000000
2650Periodo diverso(versamento, riferito, periodo)13Generica1113.000000
2661Periodo diverso(versamento, allegato, riferito)15Veicolo diverso1115.000000
2671Vendita tardiva(vendita, atto, di)17Generica 2_non allegata documentazione1117.000000
2693Vendita tardiva(vendita, tardivo, atto)29Acquisto nel mese di rinnovo; privato1129.000000
\n", "
" ], "text/plain": [ " CASISTICA_MOTIVAZIONE \\\n", "2627 Generica \n", "2626 Generica \n", "2625 Periodo diverso \n", "2587 Furto non annotato \n", "2588 Furto non annotato \n", "2386 Periodo diverso \n", "2335 Regione diversa \n", "2347 Furto non annotato \n", "2356 Vendita tardiva \n", "2384 Periodo diverso \n", "2379 Vendita tardiva \n", "2345 Furto non annotato \n", "2302 Periodo diverso \n", "2340 Generica \n", "2315 No esenzione PH \n", "2295 Periodo diverso \n", "2296 Generica \n", "2317 Generica \n", "2316 Esenzione PH senza istanza \n", "2336 Periodo diverso \n", "2355 Generica \n", "2282 Generica \n", "2280 Vendita tardiva \n", "2273 Generica \n", "2277 Generica \n", "2330 Regione diversa \n", "2383 Vendita tardiva \n", "2272 Periodo diverso \n", "2270 Generica \n", "2309 Generica \n", "2279 Generica \n", "2304 Periodo diverso \n", "2645 Vendita tardiva \n", "2646 Vendita tardiva \n", "2607 Generica \n", "2608 Generica \n", "2463 Periodo diverso \n", "2616 Periodo diverso \n", "2615 Periodo diverso \n", "2467 Periodo diverso \n", "2462 Generica \n", "2390 Vendita tardiva \n", "2612 Furto non annotato \n", "2395 Generica \n", "2394 Periodo diverso \n", "2476 Periodo diverso \n", "2448 Generica \n", "2446 Generica \n", "2420 Esenzione PH senza istanza \n", "2611 Furto non annotato \n", "2662 Generica \n", "2664 Generica \n", "2665 Generica \n", "2666 Generica \n", "2663 Generica \n", "2635 Periodo diverso \n", "2636 Periodo diverso \n", "2483 Generica \n", "2639 Generica \n", "2534 Periodo diverso \n", "2512 Periodo diverso \n", "2533 Generica \n", "2518 Vendita tardiva \n", "2482 Periodo diverso \n", "2642 Periodo diverso \n", "2644 Periodo diverso \n", "2643 Periodo diverso \n", "2479 Periodo diverso \n", "2652 Generica \n", "2651 Generica \n", "2683 Periodo diverso \n", "2680 Periodo diverso \n", "2682 Periodo diverso \n", "2681 Periodo diverso \n", "2737 Vendita tardiva \n", "2740 Vendita tardiva \n", "2745 Vendita tardiva \n", "2744 Vendita tardiva \n", "2743 Vendita tardiva \n", "2739 Vendita tardiva \n", "2738 Vendita tardiva \n", "2742 Vendita tardiva \n", "2741 Vendita tardiva \n", "2654 Vendita tardiva \n", "2653 Vendita tardiva \n", "2579 Generica \n", "2572 Periodo diverso \n", "2576 Periodo diverso \n", "2578 Periodo diverso \n", "2566 Periodo diverso \n", "2731 Vendita tardiva \n", "2733 Vendita tardiva \n", "2732 Vendita tardiva \n", "2735 Vendita tardiva \n", "2734 Vendita tardiva \n", "2736 Vendita tardiva \n", "2730 Vendita tardiva \n", "2591 Periodo diverso \n", "2589 Fermo \n", "2583 Furto non annotato \n", "2586 Vendita tardiva \n", "2590 Generica \n", "2602 Periodo diverso \n", "2610 Regione diversa \n", "2609 Generica \n", "2614 Vendita tardiva \n", "2621 Periodo diverso \n", "2613 Vendita tardiva \n", "2620 Periodo diverso \n", "2637 Periodo diverso \n", "2624 Periodo diverso \n", "2650 Periodo diverso \n", "2661 Periodo diverso \n", "2671 Vendita tardiva \n", "2693 Vendita tardiva \n", "\n", " NOTE_OPERATORE_split_3gram count_placeholder \\\n", "2627 (mai, stato, proprietario) 11 \n", "2626 (mai, stato, proprietario) 11 \n", "2625 (manca, vers, allega) 11 \n", "2587 (annotata, pra, già) 8 \n", "2588 (annotata, pra, già) 8 \n", "2386 (periodo, tributario, versamento) 4 \n", "2335 (versamento, favore, regione) 4 \n", "2347 (furto, allega, denuncia) 4 \n", "2356 (vendita, bollo, dovuto) 4 \n", "2384 (versamento, allegato, relativo) 4 \n", "2379 (periodo, tributario, già) 4 \n", "2345 (denuncia, furto, mai) 4 \n", "2302 (allega, bollo, pagato) 4 \n", "2340 (presa, carico, demolitore) 4 \n", "2315 (invalidità, idoneo, rilascio) 4 \n", "2295 (non, presente, bollo) 4 \n", "2296 (altra, regione, periodo) 4 \n", "2317 (nessun, versamento, presente) 4 \n", "2316 (presente, cliente, avvisato) 4 \n", "2336 (non, presente, ricevuta) 4 \n", "2355 (domiciliazione, bancaria, attiva) 4 \n", "2282 (visura, pra, risulta) 4 \n", "2280 (veicolo, venduto, mese) 4 \n", "2273 (bollo, dovuto, cliente) 4 \n", "2277 (perdita, possesso, trascritta) 4 \n", "2330 (versamento, effettuato, favore) 4 \n", "2383 (utile, atto, di) 4 \n", "2272 (non, congruo, versamento) 4 \n", "2270 (pratica, lavorata, nuovo) 4 \n", "2309 (veicolo, demolito, periodo) 4 \n", "2279 (targa, errata, targa) 4 \n", "2304 (presente, allega, versamenti) 4 \n", "2645 (vendita, tardivo, veicolo) 13 \n", "2646 (vendita, tardivo, veicolo) 13 \n", "2607 (veicolo, targato, targa) 9 \n", "2608 (veicolo, targato, targa) 9 \n", "2463 (regione, versamento, non) 5 \n", "2616 (versamento, riferito, altra) 10 \n", "2615 (versamento, riferito, altra) 10 \n", "2467 (richiesta, versamento, non) 5 \n", "2462 (atto, altra, regione) 5 \n", "2390 (bollo, dovuto, vendita) 5 \n", "2612 (perdita, possesso, furto) 10 \n", "2395 (rientro, possesso, data) 5 \n", "2394 (presente, aci/tabaccaio/agenzia, versamento) 5 \n", "2476 (allega, ricevuta, pagamento) 5 \n", "2448 (dichiara, aver, pagato) 5 \n", "2446 (disabile, fiscalmente, carico) 5 \n", "2420 (disabile, respinta, manca) 5 \n", "2611 (perdita, possesso, furto) 10 \n", "2662 (cliente, dichiara, aver) 16 \n", "2664 (allega, carta, circolazione) 16 \n", "2665 (allega, carta, circolazione) 16 \n", "2666 (allega, carta, circolazione) 16 \n", "2663 (cliente, dichiara, aver) 16 \n", "2635 (non, presente, versamento) 11 \n", "2636 (non, presente, versamento) 11 \n", "2483 (documentazione, allegata, targa) 6 \n", "2639 (allega, certificato, storico) 12 \n", "2534 (x, periodo, tributario) 6 \n", "2512 (versamento, allegato, anno) 6 \n", "2533 (carta, circolazione, annotazione) 6 \n", "2518 (pagamento, atto, di) 6 \n", "2482 (non, presente, allegato) 6 \n", "2642 (bollo, allegato, corrisponde) 12 \n", "2644 (bollo, pagato, x) 12 \n", "2643 (bollo, pagato, x) 12 \n", "2479 (allegato, anno, manca) 6 \n", "2652 (atto, data, certa) 13 \n", "2651 (atto, data, certa) 13 \n", "2683 (presente, non, congruo) 27 \n", "2680 (versam, presente, non) 27 \n", "2682 (presente, non, congruo) 27 \n", "2681 (versam, presente, non) 27 \n", "2737 (atto, di, vendita) 152 \n", "2740 (atto, di, vendita) 152 \n", "2745 (atto, di, vendita) 152 \n", "2744 (atto, di, vendita) 152 \n", "2743 (atto, di, vendita) 152 \n", "2739 (atto, di, vendita) 152 \n", "2738 (atto, di, vendita) 152 \n", "2742 (atto, di, vendita) 152 \n", "2741 (atto, di, vendita) 152 \n", "2654 (dovuto, versamento, non) 14 \n", "2653 (dovuto, versamento, non) 14 \n", "2579 (allega, presa, carico) 7 \n", "2572 (presente, allega, versamento) 7 \n", "2576 (corrisponde, periodo, richiesto) 7 \n", "2578 (pagato, x, periodo) 7 \n", "2566 (ricevuta, allegata, riferita) 7 \n", "2731 (di, vendita, tardivo) 147 \n", "2733 (di, vendita, tardivo) 147 \n", "2732 (di, vendita, tardivo) 147 \n", "2735 (di, vendita, tardivo) 147 \n", "2734 (di, vendita, tardivo) 147 \n", "2736 (di, vendita, tardivo) 147 \n", "2730 (di, vendita, tardivo) 147 \n", "2591 (riferito, periodo, tributario) 8 \n", "2589 (fermo, amministrativo, fermo) 8 \n", "2583 (furto, mai, trascritto) 8 \n", "2586 (atto, vendita, atto) 8 \n", "2590 (manca, carta, circolazione) 8 \n", "2602 (ricevuta, relativa, diverso) 9 \n", "2610 (regione, bollo, pagato) 9 \n", "2609 (dichiara, aver, venduto) 9 \n", "2614 (tardivo, veicolo, venduto) 10 \n", "2621 (allegato, corrisponde, periodo) 10 \n", "2613 (dovuto, atto, di) 10 \n", "2620 (non, congruo, allega) 10 \n", "2637 (allega, versamento, anno) 11 \n", "2624 (allegata, ricevuta, relativa) 11 \n", "2650 (versamento, riferito, periodo) 13 \n", "2661 (versamento, allegato, riferito) 15 \n", "2671 (vendita, atto, di) 17 \n", "2693 (vendita, tardivo, atto) 29 \n", "\n", " CASISTICA_MOTIVAZIONE_selfjoin count_selfjoin \\\n", "2627 Periodo diverso 2 \n", "2626 No esenzione PH 1 \n", "2625 Generica 3 \n", "2587 Esportazione non annotata 1 \n", "2588 Generica 1 \n", "2386 Generica 1 \n", "2335 Periodo diverso 1 \n", "2347 Generica 1 \n", "2356 Generica 1 \n", "2384 Vendita tardiva 1 \n", "2379 Periodo diverso 1 \n", "2345 Generica 1 \n", "2302 Generica 1 \n", "2340 Fermo 1 \n", "2315 Generica 1 \n", "2295 Vendita tardiva 1 \n", "2296 Acquisto nel mese di rinnovo; concessionario 1 \n", "2317 Periodo diverso 1 \n", "2316 Generica 1 \n", "2336 Ricevuta non valida 1 \n", "2355 Domiciliazione tardiva 1 \n", "2282 Vendita tardiva 1 \n", "2280 Generica 1 \n", "2273 Demolizione 1 \n", "2277 Sequestro non annotato 1 \n", "2330 Periodo diverso 1 \n", "2383 Acquisto nel mese di rinnovo; privato 1 \n", "2272 Veicolo diverso 1 \n", "2270 Periodo diverso 1 \n", "2309 Demolizione 1 \n", "2279 Regione diversa 1 \n", "2304 Veicolo diverso 1 \n", "2645 Acquisto nel mese di rinnovo; concessionario 1 \n", "2646 Acquisto nel mese di rinnovo; privato 2 \n", "2607 No esenzione PH 1 \n", "2608 Veicolo diverso 1 \n", "2463 Regione diversa 1 \n", "2616 Veicolo diverso 1 \n", "2615 Generica 1 \n", "2467 Esenzione PH senza istanza 1 \n", "2462 Acquisto nel mese di rinnovo; privato 1 \n", "2390 Generica 2_non allegata documentazione 1 \n", "2612 Rientro in possesso 1 \n", "2395 Rientro in possesso 1 \n", "2394 Ricevuta non valida 1 \n", "2476 Generica 1 \n", "2448 Vendita tardiva 1 \n", "2446 No esenzione PH 1 \n", "2420 No esenzione PH 1 \n", "2611 Generica 1 \n", "2662 Vendita tardiva 1 \n", "2664 Esenzione PH senza istanza 1 \n", "2665 Esportazione non annotata 1 \n", "2666 Vendita tardiva 1 \n", "2663 Esportazione non annotata 2 \n", "2635 Regione diversa 1 \n", "2636 Veicolo diverso 1 \n", "2483 Periodo diverso 1 \n", "2639 Esenzione PH senza istanza 2 \n", "2534 Generica 1 \n", "2512 Generica 1 \n", "2533 Esenzione PH senza istanza 1 \n", "2518 Acquisto nel mese di rinnovo; privato 1 \n", "2482 Esenzione PH senza istanza 1 \n", "2642 Generica 2 \n", "2644 Regione diversa 1 \n", "2643 Generica 1 \n", "2479 Generica 1 \n", "2652 Furto non annotato 1 \n", "2651 Esportazione non annotata 1 \n", "2683 Veicolo diverso 3 \n", "2680 Versamento annullato 1 \n", "2682 Versamento annullato 1 \n", "2681 Veicolo diverso 3 \n", "2737 Domiciliazione tardiva 1 \n", "2740 No minivoltura 1 \n", "2745 Acquisto nel mese di rinnovo; privato 7 \n", "2744 Periodo diverso 6 \n", "2743 Demolizione 2 \n", "2739 Generica 2_non allegata documentazione 1 \n", "2738 Esportazione non annotata 1 \n", "2742 Acquisto nel mese di rinnovo; concessionario 2 \n", "2741 Veicolo diverso 1 \n", "2654 Perdita possesso con DS successiva 1 \n", "2653 Esportazione non annotata 1 \n", "2579 Fermo 1 \n", "2572 Veicolo diverso 1 \n", "2576 Regione diversa 1 \n", "2578 Generica 1 \n", "2566 Veicolo diverso 1 \n", "2731 Domiciliazione tardiva 1 \n", "2733 Veicolo diverso 1 \n", "2732 No minivoltura 1 \n", "2735 Periodo diverso 6 \n", "2734 Acquisto nel mese di rinnovo; concessionario 2 \n", "2736 Acquisto nel mese di rinnovo; privato 7 \n", "2730 Demolizione 1 \n", "2591 Generica 1 \n", "2589 Generica 1 \n", "2583 Generica 1 \n", "2586 Generica 2_non allegata documentazione 1 \n", "2590 Esportazione non annotata 1 \n", "2602 Veicolo diverso 1 \n", "2610 Generica 1 \n", "2609 Vendita tardiva 1 \n", "2614 Generica 1 \n", "2621 Regione diversa 1 \n", "2613 Periodo diverso 1 \n", "2620 Veicolo diverso 1 \n", "2637 Veicolo diverso 1 \n", "2624 Veicolo diverso 1 \n", "2650 Generica 1 \n", "2661 Veicolo diverso 1 \n", "2671 Generica 2_non allegata documentazione 1 \n", "2693 Acquisto nel mese di rinnovo; privato 1 \n", "\n", " sum_selfjoin tf_idf \n", "2627 3 3.666667 \n", "2626 3 3.666667 \n", "2625 3 3.666667 \n", "2587 2 4.000000 \n", "2588 2 4.000000 \n", "2386 1 4.000000 \n", "2335 1 4.000000 \n", "2347 1 4.000000 \n", "2356 1 4.000000 \n", "2384 1 4.000000 \n", "2379 1 4.000000 \n", "2345 1 4.000000 \n", "2302 1 4.000000 \n", "2340 1 4.000000 \n", "2315 1 4.000000 \n", "2295 1 4.000000 \n", "2296 1 4.000000 \n", "2317 1 4.000000 \n", "2316 1 4.000000 \n", "2336 1 4.000000 \n", "2355 1 4.000000 \n", "2282 1 4.000000 \n", "2280 1 4.000000 \n", "2273 1 4.000000 \n", "2277 1 4.000000 \n", "2330 1 4.000000 \n", "2383 1 4.000000 \n", "2272 1 4.000000 \n", "2270 1 4.000000 \n", "2309 1 4.000000 \n", "2279 1 4.000000 \n", "2304 1 4.000000 \n", "2645 3 4.333333 \n", "2646 3 4.333333 \n", "2607 2 4.500000 \n", "2608 2 4.500000 \n", "2463 1 5.000000 \n", "2616 2 5.000000 \n", "2615 2 5.000000 \n", "2467 1 5.000000 \n", "2462 1 5.000000 \n", "2390 1 5.000000 \n", "2612 2 5.000000 \n", "2395 1 5.000000 \n", "2394 1 5.000000 \n", "2476 1 5.000000 \n", "2448 1 5.000000 \n", "2446 1 5.000000 \n", "2420 1 5.000000 \n", "2611 2 5.000000 \n", "2662 3 5.333333 \n", "2664 3 5.333333 \n", "2665 3 5.333333 \n", "2666 3 5.333333 \n", "2663 3 5.333333 \n", "2635 2 5.500000 \n", "2636 2 5.500000 \n", "2483 1 6.000000 \n", "2639 2 6.000000 \n", "2534 1 6.000000 \n", "2512 1 6.000000 \n", "2533 1 6.000000 \n", "2518 1 6.000000 \n", "2482 1 6.000000 \n", "2642 2 6.000000 \n", "2644 2 6.000000 \n", "2643 2 6.000000 \n", "2479 1 6.000000 \n", "2652 2 6.500000 \n", "2651 2 6.500000 \n", "2683 4 6.750000 \n", "2680 4 6.750000 \n", "2682 4 6.750000 \n", "2681 4 6.750000 \n", "2737 22 6.909091 \n", "2740 22 6.909091 \n", "2745 22 6.909091 \n", "2744 22 6.909091 \n", "2743 22 6.909091 \n", "2739 22 6.909091 \n", "2738 22 6.909091 \n", "2742 22 6.909091 \n", "2741 22 6.909091 \n", "2654 2 7.000000 \n", "2653 2 7.000000 \n", "2579 1 7.000000 \n", "2572 1 7.000000 \n", "2576 1 7.000000 \n", "2578 1 7.000000 \n", "2566 1 7.000000 \n", "2731 19 7.736842 \n", "2733 19 7.736842 \n", "2732 19 7.736842 \n", "2735 19 7.736842 \n", "2734 19 7.736842 \n", "2736 19 7.736842 \n", "2730 19 7.736842 \n", "2591 1 8.000000 \n", "2589 1 8.000000 \n", "2583 1 8.000000 \n", "2586 1 8.000000 \n", "2590 1 8.000000 \n", "2602 1 9.000000 \n", "2610 1 9.000000 \n", "2609 1 9.000000 \n", "2614 1 10.000000 \n", "2621 1 10.000000 \n", "2613 1 10.000000 \n", "2620 1 10.000000 \n", "2637 1 11.000000 \n", "2624 1 11.000000 \n", "2650 1 13.000000 \n", "2661 1 15.000000 \n", "2671 1 17.000000 \n", "2693 1 29.000000 " ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n=3\n", "splitted_col_name = \"NOTE_OPERATORE_split_{}gram\".format(str(n))\n", "df_cp=df.copy()\n", "\n", "#concatenate every string within the same class\n", "df_cp = df_cp.sort_values(by=\"CASISTICA_MOTIVAZIONE\")\n", "df_cp[\"cat\"] = df_cp.groupby(['CASISTICA_MOTIVAZIONE'])['NOTE_OPERATORE'].transform(lambda x : ' '.join(x))\n", "df_cp[\"cat\"] = df_cp[\"cat\"].str.lower()\n", "df_cp = df_cp.groupby([\"CASISTICA_MOTIVAZIONE\", \"cat\"]).count().reset_index()\n", "\n", "#make column as a list of words (1-gram), then create a column of n-grams\n", "df_cp[splitted_col_name] = df_cp[\"cat\"].str.split(\" \").apply(lambda x: apply_ngram(x, n))\n", "\n", "#count the occurrences for every n-gram for every class\n", "df_cp[\"count_placeholder\"] = 1\n", "df_cp = df_cp[[\"CASISTICA_MOTIVAZIONE\", splitted_col_name, \"count_placeholder\"]].explode(splitted_col_name)\\\n", " .groupby([\"CASISTICA_MOTIVAZIONE\", splitted_col_name]).count() \\\n", " .reset_index() \\\n", " .sort_values(by=\"count_placeholder\")\n", "\n", "#self-join to find which classes (except the currently considerated one) have a given n-gram, for every n-gram and every class\n", "df_cp_selfjoin = df_cp[[\"CASISTICA_MOTIVAZIONE\", splitted_col_name, \"count_placeholder\"]].rename(columns={\"CASISTICA_MOTIVAZIONE\": \"CASISTICA_MOTIVAZIONE_selfjoin\", \"count_placeholder\":\"count_selfjoin\"})\n", "df_cp = df_cp.merge(df_cp_selfjoin, on=splitted_col_name)\n", "df_cp = df_cp[df_cp[\"CASISTICA_MOTIVAZIONE\"] != df_cp[\"CASISTICA_MOTIVAZIONE_selfjoin\"]]\n", "\n", "# find how many occurrences of a given n-gram exist in every other class (except the currently considerated one), for every n-gram and every class\n", "df_cp_tfidf = df_cp[[\"CASISTICA_MOTIVAZIONE\", splitted_col_name, \"count_selfjoin\"]].groupby([\"CASISTICA_MOTIVAZIONE\", splitted_col_name]).sum(\"count_selfjoin\") \\\n", " .rename(columns={\"count_selfjoin\": \"sum_selfjoin\"})\n", "df_cp = df_cp.merge(df_cp_tfidf, on=[\"CASISTICA_MOTIVAZIONE\", splitted_col_name])\n", "\n", "#for every n-gram and every class, divide the occurrences of that n-gram in that class by the sum of the occurrences of that n-gram in every other class\n", "df_cp[\"tf_idf\"] = df_cp[\"count_placeholder\"] / df_cp[\"sum_selfjoin\"]\n", "\n", "df_cp = df_cp.sort_values(by=\"tf_idf\")\n", "\n", "df_cp.iloc[-115:]\n" ] } ], "metadata": { "kernelspec": { "display_name": "venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.3" } }, "nbformat": 4, "nbformat_minor": 5 }