{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a53f878c-e4e0-49b5-b971-a7acd9f019a9",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import re\n",
    "import nltk\n",
    "from nltk.corpus import stopwords\n",
    "from nltk.stem import WordNetLemmatizer\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "706eb52d-aa50-4f30-b62a-8dc8225748ed",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[nltk_data] Downloading package stopwords to\n",
      "[nltk_data]     C:\\Users\\dell\\AppData\\Roaming\\nltk_data...\n",
      "[nltk_data]   Package stopwords is already up-to-date!\n",
      "[nltk_data] Downloading package wordnet to\n",
      "[nltk_data]     C:\\Users\\dell\\AppData\\Roaming\\nltk_data...\n",
      "[nltk_data]   Package wordnet is already up-to-date!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nltk.download('stopwords')\n",
    "nltk.download('wordnet')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "976d5a14-135d-414f-8be0-b839f3a986e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>sentiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Java Concurrency in Practice is probably the b...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>haha aww hun i bet you are more creative tha...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>_pickle lol, thank you very much Hope you`re h...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Out for an evening on the town with jeremy. Sa...</td>\n",
       "      <td>negative</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>- just took over the #1 Most Endorsed spot on...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text sentiment\n",
       "0  Java Concurrency in Practice is probably the b...  positive\n",
       "1    haha aww hun i bet you are more creative tha...  positive\n",
       "2  _pickle lol, thank you very much Hope you`re h...  positive\n",
       "3  Out for an evening on the town with jeremy. Sa...  negative\n",
       "4   - just took over the #1 Most Endorsed spot on...  positive"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "file_path = r\"C:\\Users\\dell\\.conda\\envs\\KhalidAlzaqzouqProjectNo2\\unbalanceddataset.csv\"\n",
    "data = pd.read_csv(file_path)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4c3b7677-70bc-47a8-858d-ff6d545f290e",
   "metadata": {},
   "outputs": [],
   "source": [
    "stop_words = set(stopwords.words('english'))\n",
    "lemmatizer = WordNetLemmatizer()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "30a58fc5-61c8-46be-9f85-4f84056e7496",
   "metadata": {},
   "outputs": [],
   "source": [
    "def preprocess(text):\n",
    "    text = str(text).lower()                     \n",
    "    text = re.sub(r'[^a-z\\s]', '', text)        \n",
    "    tokens = text.split()                       \n",
    "    tokens = [lemmatizer.lemmatize(word) for word in tokens if word not in stop_words]  # إزالة كلمات التوقف وعمل Lemmatization\n",
    "    return ' '.join(tokens)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a173d3d8-e83e-450f-996e-59896003b551",
   "metadata": {},
   "outputs": [],
   "source": [
    "data['clean_text'] = data['text'].apply(preprocess)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dfdd2479-eb03-4a29-be8a-6cfc5b3473b2",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data['clean_text']\n",
    "y = data['sentiment']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "6491be8d-ac8c-4c6c-a6c9-7ee4cf43f09e",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2d85c6e1-e0a6-44de-a325-0eeee6b701ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "vectorizer = TfidfVectorizer()\n",
    "X_train_tfidf = vectorizer.fit_transform(X_train)\n",
    "X_test_tfidf = vectorizer.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8bd8d7cc-0e99-46cd-81b5-3f97b447c0ca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  display: none;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  overflow: visible;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".estimator-table summary {\n",
       "    padding: .5rem;\n",
       "    font-family: monospace;\n",
       "    cursor: pointer;\n",
       "}\n",
       "\n",
       ".estimator-table details[open] {\n",
       "    padding-left: 0.1rem;\n",
       "    padding-right: 0.1rem;\n",
       "    padding-bottom: 0.3rem;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table {\n",
       "    margin-left: auto !important;\n",
       "    margin-right: auto !important;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(odd) {\n",
       "    background-color: #fff;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(even) {\n",
       "    background-color: #f6f6f6;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:hover {\n",
       "    background-color: #e0e0e0;\n",
       "}\n",
       "\n",
       ".estimator-table table td {\n",
       "    border: 1px solid rgba(106, 105, 104, 0.232);\n",
       "}\n",
       "\n",
       ".user-set td {\n",
       "    color:rgb(255, 94, 0);\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       ".user-set td.value pre {\n",
       "    color:rgb(255, 94, 0) !important;\n",
       "    background-color: transparent !important;\n",
       "}\n",
       "\n",
       ".default td {\n",
       "    color: black;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       ".user-set td i,\n",
       ".default td i {\n",
       "    color: black;\n",
       "}\n",
       "\n",
       ".copy-paste-icon {\n",
       "    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",
       "    background-repeat: no-repeat;\n",
       "    background-size: 14px 14px;\n",
       "    background-position: 0;\n",
       "    display: inline-block;\n",
       "    width: 14px;\n",
       "    height: 14px;\n",
       "    cursor: pointer;\n",
       "}\n",
       "</style><body><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MultinomialNB()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>MultinomialNB</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.7/modules/generated/sklearn.naive_bayes.MultinomialNB.html\">?<span>Documentation for MultinomialNB</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
       "        <div class=\"estimator-table\">\n",
       "            <details>\n",
       "                <summary>Parameters</summary>\n",
       "                <table class=\"parameters-table\">\n",
       "                  <tbody>\n",
       "                    \n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('alpha',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">alpha&nbsp;</td>\n",
       "            <td class=\"value\">1.0</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('force_alpha',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">force_alpha&nbsp;</td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('fit_prior',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">fit_prior&nbsp;</td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('class_prior',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">class_prior&nbsp;</td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "                  </tbody>\n",
       "                </table>\n",
       "            </details>\n",
       "        </div>\n",
       "    </div></div></div></div></div><script>function copyToClipboard(text, element) {\n",
       "    // Get the parameter prefix from the closest toggleable content\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
       "\n",
       "    const originalStyle = element.style;\n",
       "    const computedStyle = window.getComputedStyle(element);\n",
       "    const originalWidth = computedStyle.width;\n",
       "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",
       "\n",
       "    navigator.clipboard.writeText(fullParamName)\n",
       "        .then(() => {\n",
       "            element.style.width = originalWidth;\n",
       "            element.style.color = 'green';\n",
       "            element.innerHTML = \"Copied!\";\n",
       "\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        })\n",
       "        .catch(err => {\n",
       "            console.error('Failed to copy:', err);\n",
       "            element.style.color = 'red';\n",
       "            element.innerHTML = \"Failed!\";\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        });\n",
       "    return false;\n",
       "}\n",
       "\n",
       "document.querySelectorAll('.fa-regular.fa-copy').forEach(function(element) {\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const paramName = element.parentElement.nextElementSibling.textContent.trim();\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
       "\n",
       "    element.setAttribute('title', fullParamName);\n",
       "});\n",
       "</script></body>"
      ],
      "text/plain": [
       "MultinomialNB()"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = MultinomialNB()\n",
    "model.fit(X_train_tfidf, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "874d3053-20f1-4895-956c-e571381e9c72",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = model.predict(X_test_tfidf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8f6f076d-33c9-426d-8c27-4159635af8ff",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.8\n",
      "\n",
      "Classification Report:\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "    negative       1.00      0.10      0.19       116\n",
      "    positive       0.80      1.00      0.89       404\n",
      "\n",
      "    accuracy                           0.80       520\n",
      "   macro avg       0.90      0.55      0.54       520\n",
      "weighted avg       0.84      0.80      0.73       520\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(\"Accuracy:\", accuracy_score(y_test, y_pred))\n",
    "print(\"\\nClassification Report:\\n\", classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "27b282a7-1105-4712-b072-162e92aff4da",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cm = confusion_matrix(y_test, y_pred)\n",
    "plt.figure(figsize=(6,5))\n",
    "sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=model.classes_, yticklabels=model.classes_)\n",
    "plt.xlabel('Predicted')\n",
    "plt.ylabel('Actual')\n",
    "plt.title('Confusion Matrix')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4d552ecd-3fd4-458b-8a75-582a460f3e7e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python (KhalidAlzaqzouqProjectNo2)",
   "language": "python",
   "name": "khalidalzaqzouqprojectno2"
  },
  "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.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
