diff --git "a/main.ipynb" "b/main.ipynb" deleted file mode 100644--- "a/main.ipynb" +++ /dev/null @@ -1,827 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Sentiment Analysis Model

\n", - "
Created by: Cristopher Ian Artacho
\n", - "
BSCS 3A
\n", - "\n", - "
Using a dataset from kaggle, the aim of this project is to train a model that could identify a user statement as \"Positive\", \"Negative\", or \"Neutral\".
" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package stopwords to C:\\Users\\Cristopher\n", - "[nltk_data] Artacho\\AppData\\Roaming\\nltk_data...\n", - "[nltk_data] Package stopwords is already up-to-date!\n" - ] - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.feature_extraction.text import TfidfVectorizer\n", - "from sklearn.linear_model import LogisticRegression\n", - "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix, f1_score\n", - "import nltk\n", - "from nltk.corpus import stopwords\n", - "import re\n", - "\n", - "import joblib\n", - "\n", - "nltk.download('stopwords')\n", - "stop_words = set(stopwords.words('english'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Data Exploration and Preprocessing

\n", - "
In this process, we will get to understand our data, and the dataset. In case that there are missing values, noise, and/or errors in the data, we will need to clean it in order to reduce the complexity of the data, allowing the model to better understand the dataset.
" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [], - "source": [ - "# Load dataset\n", - "df = pd.read_csv(\"sentiment_analysis.csv\") # Replace with your actual dataset path" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [], - "source": [ - "# Keep only relevant columns\n", - "df = df[[\"text\", \"sentiment\"]]" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 499 entries, 0 to 498\n", - "Data columns (total 2 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 text 499 non-null object\n", - " 1 sentiment 499 non-null object\n", - "dtypes: object(2)\n", - "memory usage: 7.9+ KB\n" - ] - } - ], - "source": [ - "df.info()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "394\n", - "3\n" - ] - } - ], - "source": [ - "for col in df:\n", - " print(df[col].nunique())" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "sentiment\n", - "neutral 199\n", - "positive 166\n", - "negative 134\n", - "Name: count, dtype: int64" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['sentiment'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9M0lEQVR4nO3de1xUdf7H8fcgMoBcFAUBRVC8l5KaIpqCl0Q0N0srjTZv6dYPNSU347d5wXIpy0vrWm43L6XldlHT0jRTTEXzsmqmkbKY7gpqJiKayOX8/ujh/JoALwjOcHo9H4/zeHC+3+98z2fGEd+e850zFsMwDAEAAJiUi6MLAAAAqEyEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQCSpKFDhyosLMzRZTjcwoULZbFYdPTo0Uo/1m9f86NHj8pisejll1+u9GNL0tSpU2WxWG7JsQBHIuwADvDNN99o4MCBCg0Nlbu7u+rVq6e7775bc+fOrdTjnjhxQlOnTtXevXsr9TiV5eLFi5o6dao2bdp0XeM3bdoki8Vi26xWq+rWrauYmBj99a9/1enTpx1S163kzLUBt4qF78YCbq1t27apW7duatCggYYMGaLAwEAdP35c27dvV0ZGho4cOVJpx961a5fat2+vBQsWaOjQoXZ9BQUFKi4ultVqrbTj36wff/xR/v7+mjJliqZOnXrN8Zs2bVK3bt00duxYtW/fXkVFRTp9+rS2bdumVatWydfXV//85z/VvXt322OKiopUUFAgq9V63Wc9brSuK377mh89elQNGzbUSy+9pAkTJlz3POWtrbCwUIWFhXJ3d6+QYwHOytXRBQC/N9OnT5evr6927typmjVr2vWdOnXKMUVJql69usOOXdm6dOmigQMH2rXt27dPvXr10oABA3Tw4EEFBQVJkqpVq6Zq1apVaj0XLlxQjRo1HP6au7q6ytWVfwZgflzGAm6xjIwM3XbbbSWCjiQFBASUaHv33XfVrl07eXh4yM/PT4MGDdLx48ftxsTExOj222/XwYMH1a1bN3l6eqpevXqaMWOGbcymTZvUvn17SdKwYcNsl3YWLlwo6errR+bNm6dGjRrJ09NTvXr10vHjx2UYhp577jnVr19fHh4euvfee/XTTz+VqH/NmjXq0qWLatSoIW9vb/Xt21fffvut3ZihQ4fKy8tL//3vf9W/f395eXnJ399fEyZMUFFRka0ef39/SVJycrKt/hs5k/JrERERmjNnjnJycvT3v//d1l7amp1du3YpNjZWderUkYeHhxo2bKjhw4dfV11XnltGRob69Okjb29vxcfHl/qa/9rs2bMVGhoqDw8PRUdH68CBA3b9MTExiomJKfG4X895rdpKW7NTWFio5557TuHh4bJarQoLC9P//u//Kj8/325cWFiY7rnnHm3ZskUdOnSQu7u7GjVqpMWLF5f+ggMORNgBbrHQ0FDt3r27xD9epZk+fboeffRRNWnSRLNmzdK4ceO0YcMGde3aVTk5OXZjz549q969eysiIkIzZ85U8+bNNXHiRK1Zs0aS1KJFC02bNk2SNGrUKL3zzjt655131LVr16vWsGTJEr366qsaM2aMnnrqKaWmpurBBx/Us88+q7Vr12rixIkaNWqUVq1aVeLSyzvvvKO+ffvKy8tLL774oiZNmqSDBw/qrrvuKrEAuKioSLGxsapdu7ZefvllRUdHa+bMmXr99dclSf7+/nrttdckSffdd5+t/vvvv/+ar2NZBg4cKA8PD61bt67MMadOnVKvXr109OhRPfPMM5o7d67i4+O1ffv2666rsLBQsbGxCggI0Msvv6wBAwZcta7Fixfrb3/7mxISEpSUlKQDBw6oe/fuOnny5A09v/K8Zo899pgmT56stm3bavbs2YqOjlZKSooGDRpUYuyRI0c0cOBA3X333Zo5c6Zq1aqloUOHlgizgMMZAG6pdevWGdWqVTOqVatmREVFGU8//bTx+eefG5cvX7Ybd/ToUaNatWrG9OnT7dq/+eYbw9XV1a49OjrakGQsXrzY1pafn28EBgYaAwYMsLXt3LnTkGQsWLCgRF1DhgwxQkNDbfuZmZmGJMPf39/IycmxtSclJRmSjIiICKOgoMDWPnjwYMPNzc24dOmSYRiGcf78eaNmzZrGyJEj7Y6TnZ1t+Pr62rUPGTLEkGRMmzbNbmybNm2Mdu3a2fZPnz5tSDKmTJlSov7SbNy40ZBkfPDBB2WOiYiIMGrVqmXbX7BggSHJyMzMNAzDMJYvX25IMnbu3FnmHFer68pze+aZZ0rtK+019/DwMP7zn//Y2nfs2GFIMsaPH29ri46ONqKjo68559VqmzJlivHrfwb27t1r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I+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTc2jY2bx5s/r166fg4GBZLBatWLHCrt9isZS6vfTSS7YxYWFhJfpfeOGFW/xMAACAs3Jo2Llw4YIiIiI0b968UvuzsrLstrffflsWi0UDBgywGzdt2jS7cWPGjLkV5QMAgCrA1ZEHj4uLU1xcXJn9gYGBdvsrV65Ut27d1KhRI7t2b2/vEmMBAACkKrRm5+TJk/r00081YsSIEn0vvPCCateurTZt2uill15SYWHhVefKz89Xbm6u3QYAAMzJoWd2bsSiRYvk7e2t+++/36597Nixatu2rfz8/LRt2zYlJSUpKytLs2bNKnOulJQUJScnV3bJAADACVSZsPP2228rPj5e7u7udu2JiYm2n1u3bi03Nzf96U9/UkpKiqxWa6lzJSUl2T0uNzdXISEhlVM4AABwqCoRdr766iulp6dr2bJl1xwbGRmpwsJCHT16VM2aNSt1jNVqLTMIAQAAc6kSa3beeusttWvXThEREdccu3fvXrm4uCggIOAWVAYAAJydQ8/s5OXl6ciRI7b9zMxM7d27V35+fmrQoIGkXy4xffDBB5o5c2aJx6elpWnHjh3q1q2bvL29lZaWpvHjx+uRRx5RrVq1btnzAAAAzsuhYWfXrl3q1q2bbf/KOpohQ4Zo4cKFkqT3339fhmFo8ODBJR5vtVr1/vvva+rUqcrPz1fDhg01fvx4u/U4AADg981iGIbh6CIcLTc3V76+vjp37px8fHwcXQ4AmFa7Py92dAlwIrtfevSmHn+9/35XiTU7AAAA5UXYAQAApkbYAQAApkbYAQAApkbYAQAApkbYAQAApkbYAQAApkbYAQAApkbYAQAAplYlvvW8KuCuoPi1m70rKACg4nBmBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBph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qmnTpjpy5IgCAwN1+fJl5eTk2I05efJkqWt8fs1qtcrHx8duAwAA5lSlwk5eXp4yMjIUFBSkdu3aqXr16tqwYYOtPz09XceOHVNUVJQDqwQAAM7EqS9jTZgwQf369VNoaKhOnDihKVOmqFq1aho8eLB8fX01YsQIJSYmys/PTz4+PhozZoyioqL4JBYAALBx6rDzn//8R4MHD9aZM2fk7++vu+66S9u3b5e/v78kafbs2XJxcdGAAQOUn5+v2NhYvfrqqw6uGgAAOBOnDjvvv//+Vfvd3d01b948zZs37xZVBAAAqpoqtWYHAADgRhF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqTl12ElJSVH79u3l7e2tgIAA9e/fX+np6XZjYmJiZLFY7LbHH3/cQRUDAABn49RhJzU1VQkJCdq+fbvWr1+vgoIC9erVSxcuXLAbN3LkSGVlZdm2GTNmOKhiAADgbFwdXcDVrF271m5/4cKFCggI0O7du9W1a1dbu6enpwIDA291eQAAoApw6jM7v3Xu3DlJkp+fn137kiVLVKdOHd1+++1KSkrSxYsXHVEeAABwQk59ZufXiouLNW7cOHXu3Fm33367rf3hhx9WaGiogoODtX//fk2cOFHp6en6+OOPy5wrPz9f+fn5tv3c3NxKrR0AADhOlQk7CQkJOnDggLZs2WLXPmrUKNvPrVq1UlBQkHr06KGMjAyFh4eXOldKSoqSk5MrtV4AAOAcqsRlrNGjR2v16tXauHGj6tevf9WxkZGRkqQjR46UOSYpKUnnzp2zbcePH6/QegEAgPNw6jM7hmFozJgxWr58uTZt2qSGDRte8zF79+6VJAUFBZU5xmq1ymq1VlSZAADAiTl12ElISNDSpUu1cuVKeXt7Kzs7W5Lk6+srDw8PZWRkaOnSperTp49q166t/fv3a/z48eratatat27t4OoBAIAzcOqw89prr0n65caB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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.countplot(x=df[\"sentiment\"])\n", - "plt.title(\"Sentiment Distribution\")\n", - "plt.savefig(\"sentiment_distribution.png\")\n", - "plt.show()\n", - "plt.close() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Text Preprocessing and Feature Engineering

\n", - "
In this process, we will transform the text to its most basic format, without numbers, stopwords and punctuation that would be unecessary and unrelated to the data.
" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [], - "source": [ - "def clean_text(text):\n", - " text = text.lower() \n", - " text = re.sub(r'[^a-zA-Z\\s]', '', text) \n", - " text = ' '.join([word for word in text.split() if word not in stop_words]) \n", - " return text\n" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [], - "source": [ - "df[\"Cleaned_Text\"] = df[\"text\"].apply(clean_text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will create a new column that will contain the preprocessed text and separate it from the original" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "sentiment_mapping = {\"neutral\": 0, \"positive\": 1, \"negative\": 2}\n", - "df[\"sentiment\"] = df[\"sentiment\"].map(sentiment_mapping)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Training the Model

\n", - "
After cleaning the data, and processing the text, it is time to train the model in order to help it classify which statements are \"Positive\", \"Negative\" or \"Neutral\". For this, we will use Logistic Regression that assumes the frequency of words to classify.
" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [], - "source": [ - "X_train, X_test, y_train, y_test = train_test_split(df[\"Cleaned_Text\"], df[\"sentiment\"], test_size=0.1, random_state=42)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [], - "source": [ - "vectorizer = TfidfVectorizer(max_features=5000)\n", - "X_train_tfidf = vectorizer.fit_transform(X_train)\n", - "X_test_tfidf = vectorizer.transform(X_test)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "TF-IDF (Term Frequency-Inverse Document Frequency) determines how important is the word based on how many times it appeared in the text, we will use this in order to detect the words that belong to the \"spam\" and \"ham\" classes" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
LogisticRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ], - "text/plain": [ - "LogisticRegression()" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Train Logistic Regression Model\n", - "model = LogisticRegression()\n", - "model.fit(X_train_tfidf, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [], - "source": [ - "# Predictions\n", - "y_pred = model.predict(X_test_tfidf)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Model Evaluation

\n", - "
After training the model, we will use Evaluation metrics in order to judge if the model's predictions are correct.
\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy: 0.7600\n", - "Classification Report:\n", - " precision recall f1-score support\n", - "\n", - " 0 0.70 0.78 0.74 18\n", - " 1 0.79 0.71 0.75 21\n", - " 2 0.82 0.82 0.82 11\n", - "\n", - " accuracy 0.76 50\n", - " macro avg 0.77 0.77 0.77 50\n", - "weighted avg 0.76 0.76 0.76 50\n", - "\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHiCAYAAAB4GX3vAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABkKElEQVR4nO3de1xUZf4H8M+AMCAMqFxEjZsoYutoXkpzFShGFDUVC01LZd1drYzWLe2XbKX+bFPXDC1bTfMnu9gaWd4Lky3wEiaFqaz3AkTygqCCN5DL9/eHP87PaQZlYHDA83m/XryS5zzzPM85z5nh07mNRkQERERERKQadrYeABERERHdWwyARERERCrDAEhERESkMgyARERERCrDAEhERESkMgyARERERCrDAEhERESkMgyARERERCrDAEhERESkMgyARERERCrDAEhERESkMgyARERERCrDAEhERESkMgyARERERCrDAEhERESkMlYNgLm5udBoNNBoNPjpp5+s2TRZ6NKlS4iNjUXr1q3h7u6OsWPHorCwsF5tBQQEKPP6659BgwYZ1RURrFixAt27d4ezszO8vb0xYsQIXL16tV7js+Z6EBER0S0trNlYSkoKPDw8AADbt2/Hiy++aM3myQLR0dHIysrCrFmz4ODggIULFyIqKgqZmZmwt7e3qK0lS5aYBLi8vDy88cYbJgEwPj4eCxYsQExMDOLi4nD16lXs2bMHN27cgKurq8Xjs+Z6EBER0f8RKxo+fLg89dRT8uSTT8rQoUOt2TRZYMeOHQJAEhMTlbJt27YJAElOTrZKH3PnzhWNRiP5+flK2dGjR8Xe3l7i4+OtMr57sR5ERERqZLVTwOXl5UhLS0NERAQiIiKQlpaGsrIys3V37dqFyMhIuLu7w93dHeHh4dixY4fF9RITE6HRaJCXl2f0uoCAAMTGxpq0p9FoMGfOHGzatAl6vR5OTk4ICgrCl19+CQC4ePEiZsyYge7du0On08HNzQ0GgwEZGRkWr8eNGzfg5uaGP/7xjyavW716NTQaDQ4ePGi23YbaunUrtFotxo4dq5RFRUXBw8MDW7ZssUofa9euxYABA+Dr66uUrVu3Dg4ODpg1axYAmBw1tHR892I9iIiI1MhqAXDnzp24du2aEgBv3LiBnTt3mtTbunUrHn/8ceTn5+PVV1/FO++8gw4dOmDlypX1qmepzMxM/O53v8PQoUOxZMkSGAwGJUDm5ORg9erVCAsLQ0JCAmbPno2CggJERETg2LFjFo3P2dkZo0aNwsaNG1FZWWn02vXr1+PBBx9Ejx49TMZXc21dQ2RnZyM4OBhOTk5KmZ2dHfR6PbKzsxvUNgDs27cPJ0+exPjx403K9Xo9tmzZAm9vb+h0Ovj6+mLdunX1Gl9jrwcREZFqWetQ4vTp08XX11f5/YEHHpA//elPRnUqKyvFz89PgoOD5cqVK0bLzpw5Y3G9NWvWCADJzc01quPv7y+TJk0yGSMAsbOzk/3795uMS0SktLRUSktLjZadOnVKNBqNzJw50+LxpaSkCADZvn27UlZcXCwtWrSQefPmmYyvZowNnZaQkBAxGAwiIhIRESHdu3eX8vJyGTNmjHh7ezeobRGRadOmiYODgxQVFRmVd+vWTQICAkSn08nf/vY3SU5OltDQUNFoNJKVlWXx+Bp7PYiIiNTKakcAU1JS8Pjjjyu/P/7440hJSTGqk5WVhfz8fMTFxRndEAAA7dq1s7hefQwaNAg9e/Y0Kqu5mUCn00Gn0wEAKisrUVxcjJYtW8LT0xO5ubkWj89gMMDb2xvJyclKWc0Rwaefftrs+Lp06YIuXbo0aB3Ly8vh6OgI4NbNGgUFBaioqIBWq631tHxdVVRUIDk5GZGRkcoNPzWuX7+OvLw8LFiwADNnzsSYMWPwxRdfwNXVFYsWLbJ4fI25HkRERGpmlQCYm5uL48ePo3v37igoKEBBQQG6d++OEydOICcnx6geAHTt2vWu7dWlXn2EhITUuqy6uhpLly5F586d4eTkBE9PT3h5eeHChQtGgaOu42vRogViYmKwadMmVFRUALh1+vfhhx9Gp06dzL7m2LFjJqebLaXVanHz5k0AwIEDB5CTkwMXFxeUl5cbnU6tj5SUFBQVFZmc/gWghLXRo0crZa6urujfvz8OHTpk8fgacz2IiIjUzCoBsOYmildeeQW+vr7w9fXFjBkzAMDkKOC9UFVVVeuyVq1a1bps4cKFmD59Ovr27YuPP/4YqampSE1NhaenJ0SkXmMZP348Ll26hNTUVFy8eBFff/01xo0bV6+26srHxwfnz58HcCuAubu7AwAKCwvh4+PToLaTkpLg4uKCkSNHmizz8vIy+m+NNm3aGD27r67ja8z1ICIiUjOrBMCUlBR07twZW7duNfrp3LmzUQAMDAwEABw5cuSO7dW1Xs0Rp+vXrytl1dXV9X5QcHJyMkJDQ7F27VqMHTsWBoMBYWFhuHz5cr3GBwD9+/dHQEAAkpOTsXHjRlRXV2PMmDH1Gl9d6fV6nDhxwuioZXV1NbKzs6HX6+vdbklJCbZt24YRI0bAxcXFZPmDDz4IADh37pxR+YULF9C+fXuLx9dY60FERKR2DQ6ANY9/MRgMGD58uNGPwWBAWloaysvLAQC9e/eGr68vli5diitXrhi1c3toq2u9Dh06ALh1TV6NLVu2KKcNLWVvbw8HBwejso8++sjkLt66jq/GuHHjsHnzZqxduxYDBw5Uxm1OSEjIHU9T18Xw4cNRXl5udO1hSkoKiouL8cQTT9S73/Xr16OsrMzs6V8AGDJkCADgX//6l1JWXFyMb7/9Fn369LF4fPVZDyIiIrq7Bn8TyM6dO3H9+nUMGDDAZNnAgQOxfPly7Ny5E5GRkbC3t8cHH3yA6Oho9OnTB5MmTYK3tzf27NmDa9euYf369QBQ53r9+vWDp6cnXn75ZZw+fRrXr19HcnKyyc0JdTVixAjMmTMHzz33HHr16oUff/wRmzdvhqenp1G9uo6vxrhx4zB//nykp6dj+fLldxzD8ePH6zX22w0aNAgDBw5EXFwczpw5AwcHByxYsAAPPfQQnnzyyXr3m5SUBA8PDwwePNjs8hEjRqB3796Ij49HYWEh/Pz8sGrVKlRVVeG1116zeHz1WQ8iIiKqg4beRjx9+nQBIKdOnTJZVlBQIABk+vTpRuXp6eliMBhEp9OJTqeT0NBQo0elWFJv79698tBDD4mzs7P07dtXsrKy7vgYmNmzZ9e6LuXl5TJz5kxp3769ODs7S1hYmBw8eFCCgoJk2LBh9RpfjW7duom9vb0UFhbW2n/NGK0wLVJcXCwTJkwQd3d30el0EhMTI2fPnq13v3l5eaLRaGTq1Kl37LewsFAmTpwobdq0Ea1WK/369ZO0tLR6j8/S9SAiIqK704jU8+4Gskjv3r3Rpk0bpKam2nooREREpHJWew4g1e7gwYPYv38/nnnmGVsPhYiIiAg8AtiI/vOf/+CHH35AQkICzp07pzzHjoiIiMiWeASwEX322WeYPHkybt68iY0bNzL8ERERUZPAI4BEREREKsMjgEREREQqwwBIREREpDJWCYB5eXnQaDRmf1xdXZV6FRUVmDdvHiIjI+Hm5gaNRoP09PQG9f3dd99h8ODBcHNzg6urK7p164Y///nPJl/fpjaXLl1CbGwsWrduDXd3d4wdO7beX5EXEBBQ6/wOGjTIqK6IYMWKFejevTucnZ3h7e2NESNG4OrVq0b1du/ejcceewytW7eGp6cnIiMjsW/fPqM6X331FYYNG4YOHTrAyckJQUFBiIuLQ3Fxcb3Wg4iIiG5p8DeB3G7cuHEYOnSoUdntX6127do1vPnmmwgMDIRer0dGRkaD+vv+++8RHh6OgIAAvPHGG2jTpg0OHjyIpKQk/P73v0erVq0a1H5zFh0djaysLMyaNQsODg5YuHAhoqKikJmZCXt7e4vaWrJkiUmAy8vLwxtvvGESAOPj47FgwQLExMQgLi4OV69exZ49e3Djxg3lfwYOHDgAg8GAHj164K233kJFRQWWL1+OiIgI/PDDD8pX0h08eBAODg6YNm0a2rZti9OnT+ODDz7A119/jf3798PJyakBW4iIiEjFrPE06dzcXAEgixYtumO9yspKyc/PFxGR9evXCwCz3xJRV6NGjRIvLy+5dOmSUXlJSYmUlpbWu93mbseOHQJAEhMTlbJt27YJAElOTrZKH3PnzhWNRqPMp4jI0aNHxd7eXuLj4+/42pdeekm0Wq2UlJQoZceOHRMAMm/evDu+dsuWLQJA1q9f37AVICIiUrF7eg2gvb09fH19rdbekSNH0K1bN5MjfW5ubtDpdCb1d+3ahcjISLi7u8Pd3R3h4eHYsWOHSZtDhw6FTqeDTqfDsGHDcOzYMbP9azQazJkzB5s2bYJer1dOU3755ZdKnQsXLmDKlCnw8fGBk5MTevXqZbS8MWzduhVarRZjx45VyqKiouDh4YEtW7ZYpY+1a9diwIABRvO5bt06ODg4YNasWQBgctSwxvnz5+Hk5AQ3NzelzNvbu079tmvXDgDqfTqbiIiIrHwTyPXr11FUVGT0U1ZWZs0ujLRr1w779+9HXl7eXetu3boVjz/+OPLz8/Hqq6/inXfeQYcOHbBy5UqlTmFhIcLCwvDDDz8gPj4e8fHxyMzMRFhYGIqKisy2m5mZid/97ncYOnQolixZAoPBoIyntLQUAwcOxOeff47nnnsO7777Llq3bo0RI0bUeu1jzbV1DZGdnY3g4GCjU6R2dnbQ6/XIzs5uUNsAsG/fPpw8eRLjx483Kdfr9diyZQu8vb2h0+ng6+uLdevWGdULCwtDSUkJZsyYgZycHBw7dgxxcXHw8vJCbGysSX8lJSU4f/489uzZgxdffBEajQb9+/dv8HoQERGpljUOI9acAjb3k5CQYPY11jgF/NlnnwkAadmypcTExMhHH30kxcXFJvUqKyvFz89PgoOD5cqVK0bLzpw5o/x79uzZAkAyMjKUst27dwsAmTt3rkm7AMTOzk72799v0p+IyOuvvy4ODg6SnZ2tLKuqqhK9Xi/h4eFm16lmuzVESEiIGAwGERGJiIiQ7t27S3l5uYwZM0a8vb0b1LaIyLRp08TBwUGKioqMyrt16yYBAQGi0+nkb3/7myQnJ0toaKhoNBrJyspS6lVUVMjUqVPF3t5eWd8uXbrITz/9ZLa/vn37KvVat24ty5cvb/A6EBERqZlVjwBOmTIFqampRj9PPvmkNbsw8uSTTyIlJQV9+vTB559/jj/84Q9o164d4uPjUVVVpdTLyspCfn4+4uLijO5KBv7/lCIApKeno2PHjnj00UeVsgEDBiAwMLDWI3aDBg1Cz549jcpqbrLYsGEDHn74Yfj4+ChHRC9evIj+/fsjIyPDaIw1unTpgi5duli8LW5XXl4OR0dHALdu1igoKEBFRQW0Wm2Dj8hWVFQgOTkZkZGR8PDwMFp2/fp15OXlYcGCBZg5cybGjBmDL774Aq6urli0aJFSr0WLFggODsbTTz+NTz75BGvWrIFGo8HIkSPN3uH7/vvv48svv8T8+fPRpUsXtG/fvkHrQEREpHZWvQu4c+fOMBgM1mzyroYMGYIhQ4bgwoULSE1NxXvvvYf58+ejQ4cOmDZtGgAgNzcXANC1a9c7tnX27Fn4+fmZlPv5+eGXX34x+5qaO1bN+fnnn1FeXg4vLy+zy0tLS9G6dWujstquN7SEVqvFzZs3Ady647aqqgouLi4oLy9v8J2zKSkpKCoqMjn9C0AJnaNHj1bKXF1d0b9/fxw6dEgpmz9/PlasWIGTJ08qr4mIiECnTp2wePFivP3220btPvzwwwBuXcc4cOBAhIaGIj09HQMHDmzQuhAREamVVQOgLXl5eWH8+PF48skn0bFjR3z66adKAGxMd3rUjEajweDBgzFjxgyzy399NNJafHx8cP78eZM+CgsL4ePj06C2k5KS4OLigpEjR5os8/LywrFjx0wCb5s2bZCVlaX8vnLlSoSGhirhDwB8fX3RtWvXuz4a6Le//S3atm2Ljz76iAGQiIionu6bAFhDq9UiODgYZ8+eVcoCAwMB3LrDNyIiotbXtmvXDvn5+Sblp06dUtqwRMeOHXHjxo17flRUr9dj5cqVKCsrU474VVdXIzs7G0OGDKl3uyUlJdi2bRuio6Ph4uJisvzBBx/E7t27ce7cOXTo0EEpv3DhgtFp219++cXs6e+qqipcu3btruO4efOmEnCJiIjIcs36q+B2795tEiSKiopw8OBBdOzYUSnr3bs3fH19sXTpUly5csWo/u2PEwkPD0dOTg727t1r1EdeXh7Cw8MtHl90dDR2795t9qjW6dOnzb4mJCTkjqeV62L48OEoLy9HcnKyUpaSkoLi4mI88cQT9e53/fr1KCsrM3v6F4ASLv/1r38pZcXFxfj222/Rp08fpSwwMBDffPON0WNifv75Zxw7dgx6vV4pqzl1f7sdO3aguLi4wduIiIhIzTQiIg1tJC8vD4GBgVi0aFGtpztrLFu2DJcvX8bhw4fxySefYPLkyQgMDESrVq3w4osvWtTvkCFDcPLkSTz99NMICgrC+fPnsXr1auTl5eGrr74yOtq3detWREdHIygoCJMmTYK3tzf27NmDa9euYf369QBuhcHf/OY3sLOzw/Tp0wEACQkJ0Gg0OHz4MDw9PY3612g0mD17NubMmWN2fKWlpXjkkUeQn5+PqVOnomvXrigoKMDXX38NNzc3pKSkmLym5hEwDZkWEUFYWBgOHDigfBPIggUL4Ovri++//x4tWpge+K1Lv2FhYTh8+DDOnj1r9A0vNaqrq/HII4/g4MGDmD59Ovz8/LBq1SocP34c//nPf9C5c2cAwKpVqzBlyhT06NEDkydPRllZGZYtW4aioiJkZmaiW7duAG4Fxc6dO2Pw4MFwd3fHf/7zH6xcuRLOzs7IyspCQEBAvbcRERGRqlnjVuK6fhOIiIi/v7/Zx8X4+/tb3O+///1vGTdunAQGBoqTk5O0a9dOoqKijB7jcrv09HQxGAyi0+lEp9NJaGiobN++3ajO4cOHZciQIeLi4iIuLi4yZMgQOXLkiNn2AMjs2bPvOMaioiKZNm2aPPDAA+Lo6Ci+vr4SExMjqamptbZpjWkpLi6WCRMmiLu7u+h0OomJiZGzZ8/WWv9u/ebl5YlGo5GpU6fesd/CwkKZOHGitGnTRrRarfTr18/so342bNgg/fr1Ezc3N3FxcRGDwSD79u0zqvO3v/1N+vfvL15eXuLo6CiBgYESGxsrp06duvPKExER0R1Z5QggERERETUfzfoaQCIiIiKyHAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpzD0NgM8++yw0Go3yk56efi+7t8icOXOg0WjuWu+XX37B8OHD4e7uDo1Gg9jY2Aa1ZytNfXxERERkPVYNgF999RUee+wxuLm5oVWrVhgwYAA2b96sLH/hhReQlJSE+Ph4a3ZrUy+//DK+++47/Pd//zeSkpIwdepUWw9JsWnTJixZssTWw6i3gIAA5X8WHBwc0KlTJ/zhD3/AL7/8Yuuh1Utznw8iIrp/aERErNFQYmIiJk+ejN69e2PixIlo0aIFvvrqK9jZ2WHDhg1GddPT0/HYY48hLS0N4eHh1uje6iorK1FZWQknJ6c71mvbti3GjRt31z/sdW3PmmJjY5Geno68vLy71rXF+O4mICAArVu3xiuvvIKKigocPHgQK1asQJs2bZCdnQ0PDw9bD9EilswHERFRY2phjUbOnz+PuLg4PProo9i5cydatLjV7PPPP4+CggJrdHHPtWjRQlmPO7lw4QJatWpltfZspamOr0OHDnj22WeV3zt16oS4uDj84x//wMsvv2zDkRERETVfVjkFvHbtWly9ehWvv/66SYh44IEHLG7v4sWLmDFjBrp37w6dTgc3NzcYDAZkZGSY1D169ChGjhwJb29vuLi4oFu3bpgzZ06963Xq1MnoOkVzEhMTleUigrlz5yq///oawLq0V2PXrl2IjIyEu7s73N3dER4ejh07dli8XWr6+sc//oFTp04Z9Z+YmFiv8R05cgRDhw6FTqeDTqfDsGHDcOzYMbPbJTMzE9HR0dDpdAgKCsLq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Ll26oLi4GO+//z78/PyMHm9Q1/ZeeOEFfPDBBxg1ahSmT58OAEhISIC3tzdeeOEFi7fL/cLa8ztixAjMmTMHzz33HHr16oUff/wRmzdvNvt4C+DWtU+PPPII5s2bh+rqari5uaFPnz4m1z3VtZ4tLFu2DJcvX8bhw4cB3Ho0x549e9CqVSu8+OKLFrVV1/2+rvNh7f2+rvuLrdR1+/Xr1w+enp54+eWXcfr0aVy/fh3JycnKJQu/VtfP07vVa6zPof79++P999/HlClTMGrUKDg6OkKv1ytBl2zA1rchk/rUPGZg586d0q1bN9FqtdKzZ09JT083Wx91eMRFUVGRTJs2TR544AFxdHQUX19fiYmJkdTUVJO66enpYjAYRKfTiU6nk9DQUNm+fbvJ+Mz93P4Yg5ycHImNjZWAgADRarXi4+MjMTExcvz4cbPre7f2REQOHz4sQ4YMERcXF3FxcZEhQ4bIkSNHjOrU9fEQzcW9nt/y8nKZOXOmtG/fXpydnSUsLEwOHjwoQUFBMmzYMLP9//TTTxIWFiZarVYASEJCQoPqWdvdtqG/v3+d9r+6qOt+X+Nu8yFSt/2+rusqYtn+cq9Zsv327t0rDz30kDg7O0vfvn0lKyur1sfA3O3z1JLPXWvPh8itR/G88sor0rZtW9FoNAJA1qxZc9fXUePhdwHTPTdnzhzMnTtX9RfcExE1VF0/T/m5S7/GawCJiIiIVIYBkIiIiEhlGACJiIiIVIbXABIRERGpDI8AEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMAyARERGRyjAAEhEREakMA6DKXbp0CbGxsWjdujXc3d0xduxYFBYW2npYzYY1t19AQAA0Go3Zn0GDBjVav/cTW83H7t278dhjj6F169bw9PREZGQk9u3bZ41VatZsNR+3mzFjBjQaDV588cX6rgaZUVFRgXnz5iEyMhJubm7QaDRIT083W5fvj6apha0HQLYVHR2NrKwszJo1Cw4ODli4cCGioqKQmZkJe3t7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kcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpDAMgERERkcowABIRERGpzP8Cp3cD0bgnZQcAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# MODEL EVALUATION\n", - "accuracy = accuracy_score(y_test, y_pred)\n", - "f1 = f1_score(y_test, y_pred, average=\"macro\")\n", - "report = classification_report(y_test, y_pred)\n", - "\n", - "print(f\"Accuracy: {accuracy:.4f}\")\n", - "print(\"Classification Report:\\n\", classification_report(y_test, y_pred))\n", - "\n", - "text_output = f\"Accuracy: {accuracy:.4f}\\nF1 Score: {f1:.4f}\\n\\nClassification Report:\\n{report}\"\n", - "\n", - "plt.figure(figsize=(8, 6))\n", - "plt.text(0.01, 0.99, text_output, fontsize=12, ha='left', va='top', family=\"monospace\")\n", - "plt.axis(\"off\")\n", - "\n", - "plt.savefig(\"classification_report.png\", bbox_inches=\"tight\", dpi=300)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note: This can be made better if we use different algorithms such as Naive Bayes" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAHHCAYAAADqJrG+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABN60lEQVR4nO3deXxMZ/s/8M8kksm+WEIQEqRpYk9RkrYJotagWmsQaqk+9ogSbZBYBq1YS1CVUFRrCbUTSxo7EUspESGllNgii0lkzu8Pv8y3I4kmk5mck/F5P695vcx9ztz3deZJ5XLd932OTBAEAURERERaMBI7ACIiIiq/mEgQERGR1phIEBERkdaYSBAREZHWmEgQERGR1phIEBERkdaYSBAREZHWmEgQERGR1phIEBERkdaYSBDpUVJSEj7++GPY2tpCJpMhJiZGp/3funULMpkMUVFROu23PPP19YWvr6/YYRC9NZhIkMFLTk7GF198gTp16sDMzAw2Njbw9vbGokWLkJ2drdexAwMDcenSJcyaNQvr1q1Ds2bN9DpeWRo0aBBkMhlsbGwK/R6TkpIgk8kgk8nw3Xfflbj/v//+G9OnT0diYqIOoiUifakgdgBE+rRr1y707NkTcrkcAwcORIMGDZCTk4P4+HhMnDgRf/zxB1auXKmXsbOzs3HixAl8/fXXGDVqlF7GqF27NrKzs2FiYqKX/v9LhQoVkJWVhd9++w29evXSOLZ+/XqYmZnhxYsXWvX9999/IywsDM7OzmjSpEmxP7d//36txiMi7TCRIIOVkpKCPn36oHbt2jh06BAcHR3Vx0aOHIkbN25g165dehv/4cOHAAA7Ozu9jSGTyWBmZqa3/v+LXC6Ht7c3Nm7cWCCR2LBhAzp37owtW7aUSSxZWVmwsLCAqalpmYxHRK9waoMM1rx585CRkYHVq1drJBH56tWrh7Fjx6rfv3z5EjNmzEDdunUhl8vh7OyMKVOmQKlUanzO2dkZXbp0QXx8PFq0aAEzMzPUqVMHa9euVZ8zffp01K5dGwAwceJEyGQyODs7A3g1JZD/53+bPn06ZDKZRtuBAwfwwQcfwM7ODlZWVnBzc8OUKVPUx4taI3Ho0CF8+OGHsLS0hJ2dHbp164arV68WOt6NGzcwaNAg2NnZwdbWFoMHD0ZWVlbRX+xr+vXrhz179uDp06fqtjNnziApKQn9+vUrcP7jx48RHByMhg0bwsrKCjY2NujYsSMuXLigPufIkSNo3rw5AGDw4MHqKZL86/T19UWDBg1w7tw5fPTRR7CwsFB/L6+vkQgMDISZmVmB62/fvj3s7e3x999/F/taiaggJhJksH777TfUqVMHXl5exTp/6NChmDp1Kjw9PbFgwQL4+PhAoVCgT58+Bc69ceMGPvvsM7Rr1w7z58+Hvb09Bg0ahD/++AMA0KNHDyxYsAAA0LdvX6xbtw4LFy4sUfx//PEHunTpAqVSifDwcMyfPx9du3bFsWPH3vi5gwcPon379njw4AGmT5+OoKAgHD9+HN7e3rh161aB83v16oXnz59DoVCgV69eiIqKQlhYWLHj7NGjB2QyGbZu3apu27BhA9599114enoWOP/mzZuIiYlBly5dEBERgYkTJ+LSpUvw8fFR/1J3d3dHeHg4AGD48OFYt24d1q1bh48++kjdz6NHj9CxY0c0adIECxcuROvWrQuNb9GiRahSpQoCAwORl5cHAFixYgX279+PJUuWoHr16sW+ViIqhEBkgJ49eyYAELp161as8xMTEwUAwtChQzXag4ODBQDCoUOH1G21a9cWAAhxcXHqtgcPHghyuVyYMGGCui0lJUUAIHz77bcafQYGBgq1a9cuEMO0adOEf/8nuWDBAgGA8PDhwyLjzh9jzZo16rYmTZoIDg4OwqNHj9RtFy5cEIyMjISBAwcWGO/zzz/X6POTTz4RKlWqVOSY/74OS0tLQRAE4bPPPhPatm0rCIIg5OXlCdWqVRPCwsIK/Q5evHgh5OXlFbgOuVwuhIeHq9vOnDlT4Nry+fj4CACEyMjIQo/5+PhotO3bt08AIMycOVO4efOmYGVlJXTv3v0/r5GI/hsrEmSQ0tPTAQDW1tbFOn/37t0AgKCgII32CRMmAECBtRQeHh748MMP1e+rVKkCNzc33Lx5U+uYX5e/tmL79u1QqVTF+sy9e/eQmJiIQYMGoWLFiur2Ro0aoV27durr/LcRI0ZovP/www/x6NEj9XdYHP369cORI0dw//59HDp0CPfv3y90WgN4ta7CyOjVXz15eXl49OiRetomISGh2GPK5XIMHjy4WOd+/PHH+OKLLxAeHo4ePXrAzMwMK1asKPZYRFQ0JhJkkGxsbAAAz58/L9b5t2/fhpGREerVq6fRXq1aNdjZ2eH27dsa7bVq1SrQh729PZ48eaJlxAX17t0b3t7eGDp0KKpWrYo+ffrgl19+eWNSkR+nm5tbgWPu7u5IS0tDZmamRvvr12Jvbw8AJbqWTp06wdraGps2bcL69evRvHnzAt9lPpVKhQULFsDV1RVyuRyVK1dGlSpVcPHiRTx79qzYY9aoUaNECyu/++47VKxYEYmJiVi8eDEcHByK/VkiKhoTCTJINjY2qF69Oi5fvlyiz72+2LEoxsbGhbYLgqD1GPnz9/nMzc0RFxeHgwcPYsCAAbh48SJ69+6Ndu3aFTi3NEpzLfnkcjl69OiB6OhobNu2rchqBADMnj0bQUFB+Oijj/DTTz9h3759OHDgAOrXr1/sygvw6vspifPnz+PBgwcAgEuXLpXos0RUNCYSZLC6dOmC5ORknDhx4j/PrV27NlQqFZKSkjTa//nnHzx9+lS9A0MX7O3tNXY45Hu96gEARkZGaNu2LSIiInDlyhXMmjULhw4dwuHDhwvtOz/Oa9euFTj2559/onLlyrC0tCzdBRShX79+OH/+PJ4/f17oAtV8mzdvRuvWrbF69Wr06dMHH3/8Mfz8/Ap8J8VN6oojMzMTgwcPhoeHB4YPH4558+bhzJkzOuuf6G3GRIIM1ldffQVLS0sMHToU//zzT4HjycnJWLRoEYBXpXkABXZWREREAAA6d+6ss7jq1q2LZ8+e4eLFi+q2e/fuYdu2bRrnPX78uMBn82/M9PqW1HyOjo5o0qQJoqOjNX4xX758Gfv371dfpz60bt0aM2bMwNKlS1GtWrUizzM2Ni5Q7fj1119x9+5djbb8hKewpKukJk2ahNTUVERHRyMiIgLOzs4IDAws8nskouLjDanIYNWtWxcbNmxA79694e7urnFny+PHj+PXX3/FoEGDAACNGzdGYGAgVq5ciadPn8LHxwenT59GdHQ0unfvXuTWQm306dMHkyZNwieffIIxY8YgKysLy5cvxzvvvKOx2DA8PBxxcXHo3LkzateujQcPHmDZsmWoWbMmPvjggyL7//bbb9GxY0e0atUKQ4YMQXZ2NpYsWQJbW1tMnz5dZ9fxOiMjI3zzzTf/eV6XLl0QHh6OwYMHw8vLC5cuXcL69etRp04djfPq1q0LOzs7REZGwtraGpaWlnj//ffh4uJSorgOHTqEZcuWYdq0aertqGvWrIGvry9CQ0Mxb968EvVHRK8RedcIkd5dv35dGDZsmODs7CyYmpoK1tbWgre3t7BkyRLhxYsX6vNyc3OFsLAwwcXFRTAxMRGcnJyEkJAQjXME4dX2z86dOxcY5/Vth0Vt/xQEQdi/f7/QoEEDwdTUVHBzcxN++umnAts/Y2NjhW7dugnVq1cXTE1NherVqwt9+/YVrl+/XmCM17dIHjx4UPD29hbMzc0FGxsbwd/fX7hy5YrGOfnjvb69dM2aNQIAISUlpcjvVBA0t38WpajtnxMmTBAcHR0Fc3NzwdvbWzhx4kSh2za3b98ueHh4CBUqVNC4Th8fH6F+/fqFjvnvftLT04XatWsLnp6eQm5ursZ548ePF4yMjIQTJ0688RqI6M1kglCCFVVERERE/8I1EkRERKQ1JhJERESkNSYSREREpDUmEkRERKQ1JhJERESkNSYSREREpDUmEkRERKQ1g7yzpXnb2WKHQBKzb/mI/z6J3hot6lT875PorWFWBr8JzZuO0kk/2eeX6qQfXWJFgoiIiLRmkBUJIiIiSZEZ7r/bmUgQERHpm0wmdgR6w0SCiIhI3wy4ImG4V0ZERER6x4oEERGRvnFqg4iIiLTGqQ0iIiKigliRICIi0jdObRAREZHWOLVBREREVBArEkRERPrGqQ0iIiLSGqc2iIiIiApiRYKIiEjfOLVBREREWjPgqQ0mEkRERPpmwBUJw02RiIiISO9YkSAiItI3A57aMNwrIyIikgqZkW5eJRQXFwd/f39Ur14dMpkMMTExRZ47YsQIyGQyLFy4sERjMJEgIiIyUJmZmWjcuDG+//77N563bds2nDx5EtWrVy/xGJzaICIi0jcjcRZbduzYER07dnzjOXfv3sXo0aOxb98+dO7cucRjMJEgIiLSN4mukVCpVBgwYAAmTpyI+vXra9UHEwkiIqJyQqlUQqlUarTJ5XLI5XKt+ps7dy4qVKiAMWPGaB2TNFMkIiIiQyKT6eSlUChga2ur8VIoFFqFdO7cOSxatAhRUVGQleI+F6xIEBER6ZuOpjZCQkIQFBSk0aZtNeL333/HgwcPUKtWLXVbXl4eJkyYgIULF+LWrVvF6oeJBBERUTlRmmmM1w0YMAB+fn4abe3bt8eAAQMwePDgYvfDRIKIiEjfRLpFdkZGBm7cuKF+n5KSgsTERFSsWBG1atVCpUqVNM43MTFBtWrV4ObmVuwxmEgQERHpm0i7Ns6ePYvWrVur3+dPiwQGBiIqKkonYzCRICIi0jeRKhK+vr4QBKHY5xd3XcS/cdcGERERaY0VCSIiIn2T6A2pdIGJBBERkb6JNLVRFgw3RSIiIiK9Y0WCiIhI3zi1QURERFrj1AYRERFRQaxIEBER6RunNoiIiEhrBpxIGO6VERERkd6JVpFYvHhxsc8dM2aMHiMhIiLSMwNebClaIrFgwYJinSeTyZhIEBFR+WbAUxuiJRIpKSliDU1ERFS2DLgiYbgpEhEREemdZHZt3LlzBzt27EBqaipycnI0jkVERIgUFRERkQ5wakO/YmNj0bVrV9SpUwd//vknGjRogFu3bkEQBHh6eoodHhERUelwakO/QkJCEBwcjEuXLsHMzAxbtmzBX3/9BR8fH/Ts2VPs8IiIiKgIkkgkrl69ioEDBwIAKlSogOzsbFhZWSE8PBxz584VOToiIqLSkclkOnlJkSQSCUtLS/W6CEdHRyQnJ6uPpaWliRUWERGRThhyIiGJNRItW7ZEfHw83N3d0alTJ0yYMAGXLl3C1q1b0bJlS7HDIyIioiJIIpGIiIhARkYGACAsLAwZGRnYtGkTXF1duWODiIjKP2kWE3RC9EQiLy8Pd+7cQaNGjQC8muaIjIwUOSoiIiLdkeq0hC6IvkbC2NgYH3/8MZ48eSJ2KERERFRCoicSANCgQQPcvHlT7DCIiIj0wpAXW0oikZg5cyaCg4Oxc+dO3Lt3D+np6RovIiKi8oyJhJ516tQJFy5cQNeuXVGzZk3Y29vD3t4ednZ2sLe3Fzs8SfNu6ITNM3vi5qbRyI6dAn/vd4o8d/G4DsiOnYJRPZqXYYQkJXt+XYth/q3w86riPX2XDNPPG9ajY7s2aN60IQL69MSlixfFDsngGXIiIfpiSwA4fPiw2CGUW5bmJriU/ABr91zApvDPijyvq/c7aOFeA3+nPS/D6EhKUq5fwdG9MajpXE/sUEhEe/fsxnfzFPhmWhgaNmyM9eui8eUXQ7B9515UqlRJ7PCoHJJEIuHi4gInJ6cC2ZYgCPjrr79Eiqp82H/6JvaffvP6kuqVrRAx+mP4T/oZ22b3KqPISEpeZGfhh/nTMXD0ZOzaFCV2OCSiddFr0OOzXuj+yacAgG+mhSEu7ghitm7BkGHDRY7OgEmzmKATkpjacHFxwcOHDwu0P378GC4uLiJEZDhkMmD15K5Y8MspXL3Nu4S+rTZEfodGzbzg0aSF2KGQiHJzcnD1yh9o2cpL3WZkZISWLb1w8cJ5ESMzfIY8tSGJREIQhEK/oIyMDJiZmYkQkeGY0KcVXuap8P3WM2KHQiI5HXcAqcnX0CPwS7FDIZE9efoEeXl5BaYwKlWqxMcRkNZEndoICgoC8CpTCw0NhYWFhfpYXl4eTp06hSZNmryxD6VSCaVSqdEmqF5CZiSJWRtRNXWthpE9msNrxI9ih0IiefzwH/y8agGCwhfDxFQudjhEby2pVhN0QdTftufPvyqlCYKAS5cuwdTUVH3M1NQUjRs3RnBw8Bv7UCgUCAsL02gzdm4DkzptdR9wOePd0AkOdpa4vnGUuq2CsRHmjGiLUZ82x7sBy0SMjsrC7Rt/4vnTJ5gxbpC6TaXKQ9IfiTi8cwuWbz0KI2Nj8QKkMmVvZw9jY2M8evRIo/3Ro0eoXLmySFG9HZhI6En+bo3Bgwdj0aJFsLGxKXEfISEh6spGPoduC3URXrm34eBlHEq4pdH229w+2HDgEtbu5Xavt4F742aYvvQnjbY1C2fBsWZtdPisP5OIt4yJqSncPerj1MkTaNPWDwCgUqlw6tQJ9OnbX+ToqLySRP1/zZo1Wn9WLpdDLtcs2b5N0xqWZiaoW+P/7rXhXM0Wjeo64MnzF/jrQToep2drnJ/7Mg//PM5E0p3HZR0qicDMwhI1atfVaJObmcHSxqZAO70dBgQORuiUSahfvwEaNGyEn9ZFIzs7G90/6SF2aAaNFQk9a9OmzRuPHzp0qIwiKX883RyxP+L//iUx73/tAADr9l3E8Hk7xQqLiCSqQ8dOePL4MZYtXYy0tIdwe9cdy1b8gEqc2tAvw80jpJFING7cWON9bm4uEhMTcfnyZQQGBooUVfnw+4VUmLedXezzuS6CJir4M/C26xvQH30DOJVBuiGJRGLBgsJv1zt9+nRkZGSUcTRERES6ZchTG5K4j0RR+vfvjx9/5NZFIiIq3wz5hlSSqEgU5cSJE7whFRERlXtSTQJ0QRKJRI8emquFBUHAvXv3cPbsWYSGhooUFRERUfkWFxeHb7/9FufOncO9e/ewbds2dO/eHcCr9YjffPMNdu/ejZs3b8LW1hZ+fn6YM2cOqlevXuwxJDG1YWtrq/GqWLEifH19sXv3bkybNk3s8IiIiEpHpqNXCWVmZqJx48b4/vvvCxzLyspCQkICQkNDkZCQgK1bt+LatWvo2rVricaQREWiNPeRICIikjqxpjY6duyIjh07FnrM1tYWBw4c0GhbunQpWrRogdTUVNSqVatYY0gikQCAp0+fYvPmzUhOTsbEiRNRsWJFJCQkoGrVqqhRo4bY4REREYmusOdLFXZjRm09e/YMMpkMdnZ2xf6MJKY2Ll68CFdXV8ydOxffffcdnj59CgDYunUrQkJCxA2OiIiolHS1a0OhUBRYDqBQKHQS44sXLzBp0iT07du3RI+skEQiERQUhMGDByMpKUljl0anTp0QFxcnYmRERESlp6tEIiQkBM+ePdN46eIf3Lm5uejVqxcEQcDy5ctL9FlJTG2cOXMGK1asKNBeo0YN3L9/X4SIiIiIpEeX0xj58pOI27dv49ChQyV+gKYkEgm5XI709PQC7devX0eVKlVEiIiIiEh3pHofifwkIikpCYcPH0alSpVK3Ickpja6du2K8PBw5ObmAnj1haempmLSpEn49NNPRY6OiIiolETa/pmRkYHExEQkJiYCAFJSUpCYmIjU1FTk5ubis88+w9mzZ7F+/Xrk5eXh/v37uH//PnJycoo9hiQSifnz5yMjIwMODg7Izs6Gj48P6tWrBysrK8yaNUvs8IiIiMqls2fPomnTpmjatCmAV2sSmzZtiqlTp+Lu3bvYsWMH7ty5gyZNmsDR0VH9On78eLHHkMTURv5e1mPHjuHChQvIyMiAp6cn/Pz8xA6NiIio1MSa2vD19YUgCEUef9Ox4pJEIgEAsbGxiI2NxYMHD6BSqfDnn39iw4YNAMAHdxERUbkm1TUSuiCJRCIsLAzh4eFo1qwZHB0dDfoLJyKit48h/16TRCIRGRmJqKgoDBgwQOxQiIiIqAQkkUjk5OTAy8tL7DCIiIj0w3ALEtLYtTF06FD1eggiIiJDo6s7W0qRJCoSL168wMqVK3Hw4EE0atQIJiYmGscjIiJEioyIiIjeRBKJxMWLF9GkSRMAwOXLlzWOSTUDIyIiKi5D/l0miUTi8OHDYodARESkN4acSEhijQQRERGVT5KoSBARERkyQ65IMJEgIiLSN8PNIzi1QURERNpjRYKIiEjPOLVBREREWmMiQURERFoz4DyCaySIiIhIe6xIEBER6RmnNoiIiEhrBpxHcGqDiIiItMeKBBERkZ5xaoOIiIi0ZsB5BKc2iIiISHusSBAREemZkZHhliSYSBAREekZpzaIiIiICsGKBBERkZ5x1wYRERFpzYDzCCYSRERE+mbIFQmukSAiIiKtsSJBRESkZ4ZckWAiQUREpGcGnEdwaoOIiIi0x4oEERGRnnFqg4iIiLRmwHkEpzaIiIhIe6xIEBER6RmnNoiIiEhrBpxHcGqDiIiItMdEgoiISM9kMplOXiUVFxcHf39/VK9eHTKZDDExMRrHBUHA1KlT4ejoCHNzc/j5+SEpKalEYzCRICIi0jOZTDevksrMzETjxo3x/fffF3p83rx5WLx4MSIjI3Hq1ClYWlqiffv2ePHiRbHH4BoJIiIiPRNrsWXHjh3RsWPHQo8JgoCFCxfim2++Qbdu3QAAa9euRdWqVRETE4M+ffoUawxWJIiIiMoJpVKJ9PR0jZdSqdSqr5SUFNy/fx9+fn7qNltbW7z//vs4ceJEsfsxyIrEvuUjxA6BJKZ976lih0AScnn/t2KHQBJSt4q53sfQVUFCoVAgLCxMo23atGmYPn16ifu6f/8+AKBq1aoa7VWrVlUfKw6DTCSIiIikRFdTGyEhIQgKCtJok8vlOulbW0wkiIiIygm5XK6zxKFatWoAgH/++QeOjo7q9n/++QdNmjQpdj9cI0FERKRnYu3aeBMXFxdUq1YNsbGx6rb09HScOnUKrVq1KnY/rEgQERHpmVi7NjIyMnDjxg31+5SUFCQmJqJixYqoVasWxo0bh5kzZ8LV1RUuLi4IDQ1F9erV0b1792KPwUSCiIjIQJ09exatW7dWv89fXxEYGIioqCh89dVXyMzMxPDhw/H06VN88MEH2Lt3L8zMzIo9BhMJIiIiPRPrWRu+vr4QBKHI4zKZDOHh4QgPD9d6DCYSREREembIT//kYksiIiLSGisSREREembIFQkmEkRERHpmwHkEEwkiIiJ9M+SKBNdIEBERkdZYkSAiItIzAy5IMJEgIiLSN05tEBERERWCFQkiIiI9M+CCBBMJIiIifTMy4EyCUxtERESkNVYkiIiI9MyACxJMJIiIiPTNkHdtMJEgIiLSMyPDzSO4RoKIiIi0x4oEERGRnnFqg4iIiLRmwHkEpzaIiIhIe6xIEBER6ZkMhluSYCJBRESkZ9y1QURERFQIViSIiIj0jLs2iIiISGsGnEdwaoOIiIi0x4oEERGRnhnyY8SZSBAREemZAecRTCSIiIj0zZAXW3KNBBEREWmNFQkiIiI9M+CCBBMJIiIifTPkxZaSmdr4/fff0b9/f7Rq1Qp3794FAKxbtw7x8fEiR0ZERERFkUQisWXLFrRv3x7m5uY4f/48lEolAODZs2eYPXu2yNERERGVjkxHLymSRCIxc+ZMREZGYtWqVTAxMVG3e3t7IyEhQcTIiIiISk8mk+nkJUWSSCSuXbuGjz76qEC7ra0tnj59WvYBERERUbFIIpGoVq0abty4UaA9Pj4ederUESEiIiIi3TGS6eYlRcXatbFjx45id9i1a9cSBzFs2DCMHTsWP/74I2QyGf7++2+cOHECwcHBCA0NLXF/REREUiLVaQldKFYi0b1792J1JpPJkJeXV+IgJk+eDJVKhbZt2yIrKwsfffQR5HI5goODMXr06BL3R0RERGWjWFMbKpWqWC9tkgjgVQLy9ddf4/Hjx7h8+TJOnjyJhw8fYsaMGVr1R0REJCUymW5eJZGXl4fQ0FC4uLjA3NwcdevWxYwZMyAIgk6vTRI3pPrpp5/Qo0cPWFhYwMPDQ+xwiIiIdEqMqY25c+di+fLliI6ORv369XH27FkMHjwYtra2GDNmjM7G0SqRyMzMxNGjR5GamoqcnByNY9oEN378eIwYMQJdu3ZF//790b59exgbG2sTGhERkeSIsVDy+PHj6NatGzp37gwAcHZ2xsaNG3H69GmdjlPiROL8+fPo1KkTsrKykJmZiYoVKyItLQ0WFhZwcHDQKpG4d+8e9u7di40bN6JXr16wsLBAz549ERAQAC8vrxL3R0RE9Lbz8vLCypUrcf36dbzzzju4cOEC4uPjERERodNxSpxIjB8/Hv7+/oiMjIStrS1OnjwJExMT9O/fH2PHjtUuiAoV0KVLF3Tp0gVZWVnYtm0bNmzYgNatW6NmzZpITk7Wql8iIiIp0NXUhlKpVN/9OZ9cLodcLi9w7uTJk5Geno53330XxsbGyMvLw6xZsxAQEKCTWPKV+D4SiYmJmDBhAoyMjGBsbAylUgknJyfMmzcPU6ZMKXVAFhYWaN++PTp27AhXV1fcunWr1H0SERGJSVe3yFYoFLC1tdV4KRSKQsf85ZdfsH79emzYsAEJCQmIjo7Gd999h+joaJ1eW4krEiYmJjAyepV/ODg4IDU1Fe7u7rC1tcVff/2ldSD5lYj169cjNjYWTk5O6Nu3LzZv3qx1n0RERIYkJCQEQUFBGm2FVSMAYOLEiZg8eTL69OkDAGjYsCFu374NhUKBwMBAncVU4kSiadOmOHPmDFxdXeHj44OpU6ciLS0N69atQ4MGDbQKok+fPti5cycsLCzQq1cvhIaGolWrVlr1RUREJDW6eox4UdMYhcnKylL/wz+fsbExVCqVTmLJV+JEYvbs2Xj+/DkAYNasWRg4cCC+/PJLuLq64scff9QqCGNjY/zyyy/crUFERAZJjBtb+vv7Y9asWahVqxbq16+P8+fPIyIiAp9//rlOxylxItGsWTP1nx0cHLB3795SB7F+/fpS90FERET/Z8mSJQgNDcX//vc/PHjwANWrV8cXX3yBqVOn6nQc0W5ItXjxYgwfPhxmZmZYvHjxG8/V5Y0ziIiIypoYN6SytrbGwoULsXDhQr2OU+JEwsXF5Y1fyM2bN4vVz4IFCxAQEAAzMzMsWLCgyPNkMhkTiVLY8+tabF27HG279kKfYePFDof0zNuzLsYP9IOnRy04VrFFr/Er8duRi+rjK8P6Y0DXlhqf2X/sCrqNWlbWoZJINq1bjeNHY3Hn9i2YyuVwb9gYn385DjVrOYsdmkEz4Gd2lTyRGDdunMb73NxcnD9/Hnv37sXEiROL3U9KSkqhfybdSbl+BUf3xqCmcz2xQ6EyYmkux6Xrd7F2+wlsihhe6Dn7jv2BL6b9pH6vzHlZVuGRBFw+fw5devTGO+/WR15eHqJXLsHX47/Eip+2wszcXOzwqBwqcSJR1E2nvv/+e5w9e1arIMLDwxEcHAwLCwuN9uzsbHz77bc6n895G7zIzsIP86dj4OjJ2LUpSuxwqIzsP3YF+49deeM5OTkv8c+j52UUEUnNjAjN6lPQlHD09W+DpGtX0LDJeyJFZfh0tWtDikp8Q6qidOzYEVu2bNHqs2FhYcjIyCjQnpWVhbCwsNKG9lbaEPkdGjXzgkeTFmKHQhLzYTNX3I5V4MK2UCya0hsVbS3FDolElJn56u9eaxtbkSMxbGI8/bOs6Gyx5ebNm1GxYkWtPisIQqHrLi5cuKB1n2+z03EHkJp8DV9HaLcdlwzXgeNXsf3QBdy6+wh1alZG2Gh/bF/6JXwC50Ol0u2jhUn6VCoVViz+Fh4Nm8C5DqdA9UmMxZZlRasbUv37CxEEAffv38fDhw+xbFnJFmzZ29tDJpNBJpPhnXfe0eg3Ly8PGRkZGDFixBv7KOy+4zk5SpiaFu+GHYbm8cN/8POqBQgKXwyTt/Q7oKL9uu+c+s9/3Pgbl5Lu4urOMHzUzBVHTl8XMTISw7IIBW7fvIHvlkWJHQqVYyVOJLp166bxC9/IyAhVqlSBr68v3n333RL1tXDhQgiCgM8//xxhYWGwtf2/0pqpqSmcnZ3/8w6XCoWiwPTHoFFfYfDoSSWKxVDcvvEnnj99ghnjBqnbVKo8JP2RiMM7t2D51qMw4k2/6P+7dfcRHj55jrpOVZhIvGWWRShw+ngc5i39EZUdqoodjsHT2ToCCSpxIjF9+nSdDZ5/r28XFxd4eXnBxMSkxH0Udt/x06mZOomvPHJv3AzTl/6k0bZm4Sw41qyNDp/1ZxJBGmo42KGSrSXup6WLHQqVEUEQsHzBHJyIO4Q5S35Ateo1xA7prcCpjX8xNjbGvXv34ODgoNH+6NEjODg4IC8vr1j9pKenw8bGBsCr6ZLs7GxkZ2cXem7+eYUp7L7jpqZv73Y2MwtL1KhdV6NNbmYGSxubAu1keCzNTVHXqYr6vXONSmj0Tg08Sc/C42eZ+PqLToiJTcT9tHTUcaqMWWO7I/mvNBw4flXEqKksLZs/G0cO7sFUxUKYW1ji8aM0AICllRXkcjORo6PyqMSJhCAUviBLqVTC1NS02P3Y29urExI7O7tCs7X8RZjFTU6I3naeHrWx/4f/26I9L/hTAMC6HScxZvYmNHCtgQD/92FnbY57D5/h4Ik/Eb5sJ3Jy397k+22zK+ZXAMCk0UM12sdPCUO7Tt3ECOmtYGS4BYniJxL5t7GWyWT44YcfYGVlpT6Wl5eHuLi4Eq2ROHTokHpHxuHDh4v9OSq5iQretfBt8fu5JJg3HVXk8a4jvy/DaEiKdscnih3CW4mJBKC+jbUgCIiMjNR4Smf+wsjIyMhiD+zj41Pon4mIiKj8KHYikX8b69atW2Pr1q2wt7fXWRB79+6FlZUVPvjgAwCv7pK5atUqeHh44Pvvv9fpWERERGXNkBdblnhHyuHDh3X+i33ixIlIT3+1avzSpUsICgpCp06dkJKSUmBHBhERUXljJNPNS4pKnEh8+umnmDt3boH2efPmoWfPnloFkZKSAg8PDwDAli1b4O/vj9mzZ+P777/Hnj17tOqTiIiI9K/EiURcXBw6depUoL1jx46Ii4vTKghTU1NkZWUBAA4ePIiPP/4YAFCxYkV1pYKIiKi84rM2/iUjI6PQbZ4mJiZa/9L/4IMPEBQUBG9vb5w+fRqbNm0CAFy/fh01a9bUqk8iIiKp4NM//6Vhw4bqX/T/9vPPP6unJ0pq6dKlqFChAjZv3ozly5ejRo1Xd1rbs2cPOnTooFWfREREUmGko5cUlbgiERoaih49eiA5ORlt2rQBAMTGxmLDhg3YvHmzVkHUqlULO3fuLNCev+WUiIiIpKnEiYS/vz9iYmIwe/ZsbN68Gebm5mjcuLHGDaa0kZeXh5iYGFy9+upWvfXr10fXrl017ldBRERUHhnwzEbJEwkA6Ny5Mzp37gzg1TMzNm7ciODgYJw7d06r21nfuHEDnTp1wt27d+Hm5gbg1VM9nZycsGvXLtSty2dEEBFR+cU1EoWIi4tDYGAgqlevjvnz56NNmzY4efKkVn2NGTMGdevWxV9//YWEhAQkJCQgNTUVLi4uGDNmjLYhEhERkZ6VqCJx//59REVFYfXq1UhPT0evXr2gVCoRExOj9UJLADh69ChOnjypMTVSqVIlzJkzB97e3lr3S0REJAUGXJAofkXC398fbm5uuHjxIhYuXIi///4bS5Ys0UkQcrkcz58/L9Be1FZTIiKi8oR3tsSrrZhDhgxBWFgYOnfurNNFkF26dMHw4cNx6tQpCIIAQRBw8uRJjBgxAl27dtXZOERERKRbxU4k4uPj8fz5c7z33nt4//33sXTpUqSlpekkiMWLF6Nu3bpo1aoVzMzMYGZmBi8vL9SrVw+LFi3SyRhERERiMZLJdPKSomKvkWjZsiVatmyJhQsXYtOmTfjxxx8RFBQElUqFAwcOwMnJCdbW1loFYWdnh+3bt+PGjRu4cuUKAMDDwwP16tXTqj8iIiIpkWgOoBMl3rVhaWmJzz//HPHx8bh06RImTJiAOXPmwMHBoVTTEKtXr0b37t3Rs2dP9OzZE927d8cPP/ygdX9ERESkf6W646abmxvmzZuHO3fuYOPGjVr3M3XqVIwdOxb+/v749ddf8euvv8Lf3x/jx4/H1KlTSxMiERGR6Ax5saVWN6R6nbGxMbp3747u3btr9fnly5dj1apV6Nu3r7qta9euaNSoEUaPHo3w8HBdhElERCQKGSSaBeiAThKJ0srNzUWzZs0KtL/33nt4+fKlCBERERHpjlSrCbogiYeJDRgwAMuXLy/QvnLlSgQEBIgQERERERWHJCoSwKvFlvv370fLli0BAKdOnUJqaioGDhyIoKAg9XkRERFihUhERKQVQ65ISCKRuHz5Mjw9PQEAycnJAIDKlSujcuXKuHz5svo8mSHvnyEiIoNlyL+/JJFIHD58WOwQiIiISAuSSCSIiIgMGac2iIiISGsGPLMhjV0bREREVD6xIkFERKRnUn3gli6wIkFERKRnYt0i++7du+jfvz8qVaoEc3NzNGzYEGfPntXptbEiQUREZICePHkCb29vtG7dGnv27EGVKlWQlJQEe3t7nY7DRIKIiEjPxJjZmDt3LpycnLBmzRp1m4uLi87H4dQGERGRnhlBppOXUqlEenq6xkupVBY65o4dO9CsWTP07NkTDg4OaNq0KVatWqWHayMiIiK9ksl081IoFLC1tdV4KRSKQse8efMmli9fDldXV+zbtw9ffvklxowZg+joaJ1eG6c2iIiIyomQkBCN508BgFwuL/RclUqFZs2aYfbs2QCApk2b4vLly4iMjERgYKDOYmIiQUREpGe6urOlXC4vMnF4naOjIzw8PDTa3N3dsWXLFt0E8/8xkSAiItIzMe4j4e3tjWvXrmm0Xb9+HbVr19bpOFwjQUREZIDGjx+PkydPYvbs2bhx4wY2bNiAlStXYuTIkTodh4kEERGRnulqsWVJNG/eHNu2bcPGjRvRoEEDzJgxAwsXLkRAQIBOr41TG0RERHom1i2yu3Tpgi5duuh1DFYkiIiISGusSBAREemZAT+zi4kEERGRvhly+d+Qr42IiIj0jBUJIiIiPZMZ8NwGEwkiIiI9M9w0gokEERGR3om1/bMscI0EERERaY0VCSIiIj0z3HoEEwkiIiK9M+CZDU5tEBERkfZYkSAiItIzbv8kIiIirRly+d+Qr42IiIj0jBUJIiIiPePUBhEREWnNcNMITm0QERFRKbAiQUREpGec2ihnatibix0CScyTM0vFDoEk5NPVp8UOgSRk1xct9D6GIZf/DTKRICIikhJDrkgYcpJEREREesaKBBERkZ4Zbj2CiQQREZHeGfDMBqc2iIiISHusSBAREemZkQFPbjCRICIi0jNObRAREREVghUJ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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cm = confusion_matrix(y_test, y_pred)\n", - "sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=sentiment_mapping.keys(), yticklabels=sentiment_mapping.keys())\n", - "plt.xlabel(\"Predicted\")\n", - "plt.ylabel(\"Actual\")\n", - "plt.title(\"Confusion Matrix\")\n", - "plt.savefig(\"confusion_matrix.png\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model saved successfully\n" - ] - } - ], - "source": [ - "# SAVING THE MODEL AS A .pkl FILE\n", - "joblib.dump(model, \"sentimentAnalysis_model.pkl\")\n", - "joblib.dump(vectorizer, \"vectorizer.pkl\")\n", - "print(\"Model saved successfully\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}