Skip to content

Instantly share code, notes, and snippets.

@drpedrazas
Created February 11, 2024 01:21
Show Gist options
  • Save drpedrazas/dbe4dfffef01c88d91dc52685754f67f to your computer and use it in GitHub Desktop.
Save drpedrazas/dbe4dfffef01c88d91dc52685754f67f to your computer and use it in GitHub Desktop.
Naive Bayes - Vanilla
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "3691532f",
"metadata": {},
"source": [
"# Naive Bayes for IMDB reviews"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "654d57c7",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[nltk_data] Downloading package stopwords to /home/david/nltk_data...\n",
"[nltk_data] Package stopwords is already up-to-date!\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Importación de librerías, no olviden ejecutar esta celda.\n",
"from sklearn.feature_extraction.text import CountVectorizer\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n",
"import matplotlib.pyplot as plt\n",
"from nltk.corpus import stopwords\n",
"import seaborn as sns\n",
"import re\n",
"import nltk \n",
"import numpy as np\n",
"import pandas as pd\n",
"stemmer = nltk.stem.SnowballStemmer('spanish')\n",
"nltk.download('stopwords')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "716828a9",
"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>review</th>\n",
" <th>sentiment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>7217</th>\n",
" <td>I kept waiting for the film to move me, inspir...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40682</th>\n",
" <td>Well, Anne is way way too old. Wentworth looks...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48836</th>\n",
" <td>As a \"rebuttle\" of sorts to the AFI's top 100 ...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35207</th>\n",
" <td>I like the movie. Twisted Desire had Jeremy Jo...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45407</th>\n",
" <td>Getting lost in space frozen for 15 years, tha...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34375</th>\n",
" <td>I watched this show and i simply didn't find i...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35057</th>\n",
" <td>This is a very intriguing short movie by David...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8554</th>\n",
" <td>\"The Cellar\" is an intolerably dull and overly...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22387</th>\n",
" <td>Dr. Paul Flanner (Richard Gere), a successful ...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33915</th>\n",
" <td>I believe that war films should try to convey ...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2000 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" review sentiment\n",
"7217 I kept waiting for the film to move me, inspir... negative\n",
"40682 Well, Anne is way way too old. Wentworth looks... negative\n",
"48836 As a \"rebuttle\" of sorts to the AFI's top 100 ... positive\n",
"35207 I like the movie. Twisted Desire had Jeremy Jo... positive\n",
"45407 Getting lost in space frozen for 15 years, tha... negative\n",
"... ... ...\n",
"34375 I watched this show and i simply didn't find i... negative\n",
"35057 This is a very intriguing short movie by David... positive\n",
"8554 \"The Cellar\" is an intolerably dull and overly... negative\n",
"22387 Dr. Paul Flanner (Richard Gere), a successful ... positive\n",
"33915 I believe that war films should try to convey ... negative\n",
"\n",
"[2000 rows x 2 columns]"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"original_dataset = pd.read_csv('/home/david/Downloads/imdb/imdb.csv').sample(n=2000)\n",
"original_dataset"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "20b45fbe",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Text(-2.700000000000003, 0.5, 'Número de Ejemplos')"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAF+CAYAAABNtpsqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfa0lEQVR4nO3deZQlZX3/8feHRWVVlpHDNmwZNWgUYYKoiUswSgwIQVH4iYLijxhxSdwCxrhjiCZGTYKKio6iAhKN4Aqi+FMjIhAU2RSFwMDIIipLFGX4/v6opw+Xppc7M33nds28X+fc01VPbd/b0/Pp6udWPZWqQpLUL+uMuwBJ0oozvCWphwxvSeohw1uSesjwlqQeMrwlqYcMb62UJO9P8vdztK+FSW5Psm6bPyfJi+Zi35OOc3uSnSe1rZPkc0leOIfH+WiSt83V/gb2+7okH5rr/Q5x3MOTfGt1H1czW2/cBWj+SXI1sBVwF7AcuBT4GHBCVd0NUFUvXoF9vaiqvjrdOlV1DbDxqlU9u6qa6hjHAmdX1YmjPv4wkhTwv8DgDRhvqap3VNXbx1SW5iHDW9PZr6q+muSBwBOB9wCPAV4wlwdJsl5V3TWX+1wRVXXMuI49g0dV1ZXjLkLzm90mmlFV/aqqTgeeAxyW5BFw766BJFsm+XySXya5Jck3W3fEx4GFwBmty+K1SXZMUkmOSHIN8LWBtsGTiV2SnJfkV61bY/N2rCclWTpYY5KrkzylTa/buhd+kuS2JBck2b4tqyS/16YfmORjSW5K8j9JXp9knbbs8CTfSvJPSX6R5Kokfzbd9yjJo5Nc2I53CvCAScv3TXJR+/78V5JHrsy/RZI3JTlpYH6vtr9fJvl+kicNLDsnydva8tuTnJFkiySfSHJrku8l2XFg/Ury8iQ/TXJzkndOfD+mqONxbftfta+PG1h2eNvHbe379tyVea+aneGtoVTVecBS4I+nWPyqtmwBXXfL67pN6nnANXRn8RtX1TsGtnki8PvA06Y55POBFwLb0HXfvHfIUl8JHAI8Hdi07eN/p1jvX4EHAju3Wp7Pvf+qeAxwBbAl8A7gw0kyeSdJ7gf8J/BxYHPg08AzB5bvDpwI/CWwBfAB4PQk9x/y/UwpybbAF4C3teO+GviPJAsGVjsYeB6wLbAL8B3gI239y4A3TtrtXwCLgd2B/em+d5OPu3k77nvb+3kX8IX2i2Gj1v5nVbUJ8DjgolV5n5qe4a0VcT3df/zJfgdsDexQVb+rqm/W7IPmvKmq7qiqX0+z/ONV9cOqugP4e+DZEx9ozuJFwOur6orqfL+qfj64QtvPc4Bjquq2qroa+Ge6oJvwP1X1wapaDixp72+rKY63F7A+8O723k8Dvjew/P8CH6iq71bV8qpaAtzZtpvOhe1seuI11S+4Q4EvVtUXq+ruqjoLOJ/ul9aEj1TVT6rqV8CXgJ9U1VdbN9WngUdP2uc/VtUt7TOId9P9Epzsz4EfV9XHq+quqvoUcDmwX1t+N/CIJBtU1bKqumSG96lVYHhrRWwL3DJF+zuBK4Ez25/MRw+xr2tXYPn/0AXklkPsd3vgJ7OssyVwv7bfwWNsOzD/s4mJqpo4c5/qA89tgOsm/bIa3O8OwKsGw7jVuM0M9e1eVQ8aeH1linV2AA6atN8/ovslM+GGgelfTzE/+f1M/p5PVeM23Pv9Tay7bftF+xzgxcCyJF9I8rCp36JWleGtoST5Q7pwu88lY+3s9VVVtTPdGdgrk+w9sXiaXc52Zr79wPRCurP7m4E7gA0H6lqXrrtmwrV0XQQzubntb4dJx7hulu2msgzYdlKXysJJ9Rw7KYw3bGesq+Jaur9OBve7UVUdtwr7nPw9v36Kda7n3t+3iXWvA6iqr1TVn9L9Erkc+OAq1KMZGN6aUZJNk+wLnAycVFUXT7HOvkl+rwXYrXSXFy5vi2+g61deUYcm2TXJhsBbgNNaF8aPgAck+fMk6wOvBwb7jz8EvDXJonQemWSLwR23/ZwKHJtkkyQ70PWVn8SK+w5dn/zLk6yX5EBgz4HlHwRenOQxrZ6NWu2brMSxBp0E7Jfkae1D2gek+zB3u1XY52uSbJbuA95XAKdMsc4XgYck+T/t/T4H2BX4fJKtkjyj9X3fCdzOPT8HmmOGt6ZzRpLb6M7w/o7ug6npLhNcBHyV7j/rd4Djq+qctuwfgNe3P+1fvQLH/zjwUbruiwcAL4fu6hfgJXQhfR3dmfjg1SfvogvmM+l+kXwY2GCK/b+sbftTur8mPkn3weIKqarfAgcChwO/oOs2+MzA8vPp+r3/rS2/sq07k++3K0QmXu+e4rjX0n2o+DrgJrp/p9ewav+nPwdcQPch4xfovneTj/tzYF+6D6l/DrwW2Leqbm7HfhXd2fktdB8Ev2QV6tEM4sMYpH5I8hZgu6qas7tBB/ZdwCKvL+8Pz7ylHmhdUrsCV427Fs0P3mEp9cOFdP3ILx13IZof7DaRpB6y20SSemiN7TbZZ5996stf/vK4y5CkVXGfIRkmrLFn3jfffPO4S5CkkVljw1uS1mSGtyT1kOEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPTTS8E5yYpIbk/xwoG3zJGcl+XH7utnAsmOSXJnkiiRPG2jfI8nFbdl7Jz3sVZLWOqM+8/4osM+ktqOBs6tqEXB2myfJrsDBwMPbNse3J4MDvA84ku5ZiYum2KckrVVGGt5V9f/oHkQ6aH9gSZteAhww0H5yVd1ZVVfRPah1zyRbA5tW1Xeqe3LExwa2kaS10jjG896qqpYBVNWyJA9u7dsC5w6st7S1/Y57Px18ov0+khxJd4bOwoULV7rAq3faaaW3Vb/seNV4Hgnpz9jaY1Q/Y/PpA8up+rFrhvb7NladUFWLq2rxggUL5rQ4SZpPxhHeN7SuENrXG1v7UmD7gfW2A65v7dtN0S5Ja61xhPfpwGFt+jDgcwPtBye5f5Kd6D6YPK91sdyWZK92lcnzB7aRpLXSSPu8k3wKeBKwZZKlwBuB44BTkxwBXAMcBFBVlyQ5FbgUuAs4qqqWt139Fd2VKxsAX2ovSVprjTS8q+qQaRbtPc36xwLHTtF+PvCIOSxNknptPn1gKUkakuEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDYwvvJH+T5JIkP0zyqSQPSLJ5krOS/Lh93Wxg/WOSXJnkiiRPG1fdkjQfjCW8k2wLvBxYXFWPANYFDgaOBs6uqkXA2W2eJLu25Q8H9gGOT7LuOGqXpPlgnN0m6wEbJFkP2BC4HtgfWNKWLwEOaNP7AydX1Z1VdRVwJbDn6i1XkuaPsYR3VV0H/BNwDbAM+FVVnQlsVVXL2jrLgAe3TbYFrh3YxdLWdi9JjkxyfpLzb7rpplG+BUkaq3F1m2xGdza9E7ANsFGSQ2faZIq2uk9D1QlVtbiqFi9YsGBuipWkeWhc3SZPAa6qqpuq6nfAZ4DHATck2Rqgfb2xrb8U2H5g++3oulkkaa00rvC+BtgryYZJAuwNXAacDhzW1jkM+FybPh04OMn9k+wELALOW801S9K8sd44DlpV301yGnAhcBfw38AJwMbAqUmOoAv4g9r6lyQ5Fbi0rX9UVS0fR+2SNB+MJbwBquqNwBsnNd9JdxY+1frHAseOui5J6gPvsJSkHjK8JamHDG9J6iHDW5J6yPCWpB4yvCWphwxvSeohw1uSesjwlqQeMrwlqYcMb0nqIcNbknrI8JakHjK8JamHDG9J6iHDW5J6yPCWpB4yvCWphwxvSeohw1uSesjwlqQeMrwlqYcMb0nqIcNbknrI8JakHjK8JamHDG9J6iHDW5J6yPCWpB4aKryTvCPJpknWT3J2kpuTHDrq4iRJUxv2zPupVXUrsC+wFHgI8JqRVSVJmtGw4b1++/p04FNVdcuI6pEkDWG9Idc7I8nlwK+BlyRZAPxmdGVJkmYy1Jl3VR0NPBZYXFW/A+4A9h9lYZKk6Q115p1kfeB5wBOSAHwDeP8I65IkzWDYbpP30fV7H9/mn9faXjSKoiRJMxs2vP+wqh41MP+1JN8fRUGSpNkNe7XJ8iS7TMwk2RlYPpqSJEmzGfbM+zXA15P8FAiwA/CCkVUlSZrRUOFdVWcnWQQ8lC68L6+qO0damSRpWjOGd5IDp1m0SxKq6jMjqEmSNIvZzrz3m2FZAYa3JI3BjOFdVfZrS9I8NOyoglskeW+SC5NckOQ9SbYYdXGSpKkNe6ngycBNwDOBZ7XpU0ZVlCRpZsNeKrh5Vb11YP5tSQ4YQT2SpCEMe+b99SQHJ1mnvZ4NfGGUhUmSpjdseP8l8Engt+11MvDKJLcluXVUxUmSpjbsTTqbjLoQSdLwhu3zJskjgR0Ht/EmHUkaj2HH8z4ReCRwCXB3a/YmHUkak2HPvPeqql1HWokkaWjDfmD5nSRzGt5JHpTktCSXJ7ksyWOTbJ7krCQ/bl83G1j/mCRXJrkiydPmshZJ6pthw3sJXYBfkeQHSS5O8oNVPPZ7gC9X1cOARwGXAUcDZ1fVIuDsNk/7xXEw8HBgH+D4JOuu4vElqbeG7TY5ke7RZxdzT5/3SkuyKfAE4HCAqvot8Nsk+wNPaqstAc4B/pbuYccnt2For0pyJbAn8J1VrUWS+mjY8L6mqk6fw+PuTHeL/UeSPAq4AHgFsFVVLQOoqmVJHtzW3xY4d2D7pa3tXpIcCRwJsHDhwjksV5Lml2G7TS5P8skkhyQ5cOK1CsddD9gdeF9VPRq4g9ZFMo1M0Vb3aag6oaoWV9XiBQsWrEJ5kjS/DXvmvQFwJ/DUgbZVuVRwKbC0qr7b5k+jC+8bkmzdzrq3Bm4cWH/7ge23A65fyWNLUu8Ne4flnI7rXVU/S3JtkodW1RXA3sCl7XUYcFz7+rm2yenAJ5O8C9gGWAScN5c1SVKfDHuTzkOA99H1ST+i3W35jKp62yoc+2XAJ5LcD/gp3QON1wFOTXIEcA1wEEBVXZLkVLpwvws4qqp8er2ktdaw3SYfpHuC/AcAquoHST4JrHR4V9VFwOIpFu09zfrHAseu7PEkaU0y7AeWG1bV5G6Ku+a6GEnScIYN75uT7EK7wiPJs4BlI6tKkjSjYbtNjgJOAB6W5DrgKuDQkVUlSZrRsFeb/BR4SpKNgHWq6rbRliVJmsmM4Z3k0Ko6KckrJ7VD14VyC3B6Vf1idCVKkiabrc97o/Z1kylemwJ7AF8aWXWSpCnNeOZdVROXBr55unWSvGWui5IkzWzGM+92Y8zE9D9OWnYmQFW9YTSlSZKmM1u3yaKB6T+dtMyRnyRpTGYL7/uM3DfkMknSCM12qeCGSR5NF/IbtOm01wajLk6SNLXZwnsZ8K42/bOB6Yl5SdIYzHa1yZNXVyGSpOENO7aJJGkeMbwlqYcMb0nqoaHCO51Dk7yhzS9MsudoS5MkTWfYM+/jgccCh7T524B/H0lFkqRZDTue92Oqavck/w1QVb9oz56UJI3BsGfev0uyLvc8SWcBcPfIqpIkzWjY8H4v8FngwUmOBb4FvH1kVUmSZjTsk3Q+keQCuie7Bzigqi4baWWSpGnN9iSdzQdmbwQ+Nbisqm4ZVWGSpOnNduZ9AV0/d4CFwC/a9IOAa4CdRlmcJGlqM/Z5V9VOVbUz8BVgv6rasqq2APYFPrM6CpQk3dewH1j+YVV9cWKmqr4EPHE0JUmSZjPsdd43J3k9cBJdN8qhwM9HVpUkaUbDnnkfQvfYs8+21wLuudtSkrSaDXup4C3AK0ZciyRpSI4qKEk9ZHhLUg8Z3pLUQ8OO571dks8muSnJDUn+I8l2oy5OkjS1Yc+8PwKcDmwNbAuc0dokSWMwbHgvqKqPVNVd7fVRussFJUljMGx439weg7Zue3mTjiSN0bDh/ULg2cDPgGXAs1qbJGkMZr1Jpz1B5+1V9YzVUI8kaQiznnlX1XJggc+slKT5Y9iBqa4Gvp3kdOCOicaqetcoipIkzWzY8L6+vdYBNhldOZKkYQw7MNWbAZJsVFV3zLa+JGm0hr3D8rFJLgUua/OPSnL8SCuTJE1r2EsF3w08jXZtd1V9H3jCiGqSJM1i6IGpquraSU3L57gWSdKQhv3A8tokjwOqXTL4cloXiiRp9Rv2zPvFwFF0g1ItBXZr85KkMRj2apObgeeOuBZJ0pCGCu8kOwEvA3Yc3MZb5iVpPIbt8/5P4MN043jfPbJqJElDGTa8f1NV7x1pJZKkoQ0b3u9J8kbgTODOicaqunAkVUmSZjRseP8B8DzgT7in26Ta/Eprw82eD1xXVfsm2Rw4ha5v/Wrg2VX1i7buMcARdNeXv7yqvrIqx5akPhs2vP8C2LmqfjvHx38F3fXim7b5o4Gzq+q4JEe3+b9NsitwMPBwYBvgq0ke0oarlaS1zrDXeX8feNBcHrg9ff7PgQ8NNO8PLGnTS4ADBtpPrqo7q+oq4Epgz7msR5L6ZNgz762Ay5N8j3v3ea/KpYLvBl7LvYeY3aqqlrV9L0vy4Na+LXDuwHpLW9u9JDkSOBJg4cKFq1CaJM1vw4b3G+fyoEn2BW6sqguSPGmYTaZoq/s0VJ0AnACwePHi+yyXpDXFsHdYfmOOj/t44BlJng48ANg0yUnADUm2bmfdWwM3tvWXAtsPbL8d3cMhJGmtNG2fd5INB6ZvS3Jre/0myfIkt67sQavqmKrarqp2pPsg8mtVdShwOnBYW+0w4HNt+nTg4CT3b3d7LgLOW9njS1LfzXTmfXiSzarq2Kq616PPkhzAaD4wPA44NckRwDXAQQBVdUmSU4FLgbuAo7zSRNLaLFXTdw0nORRYp6o+NsWyc6tqr1EWtyoWL15c559//kpte/VOO81xNZqvdrzqqrEc15+xtccq/oxN9XkfMEufd1WdBJDkwIHmdYDFTPGBoSRp9Rj2apP9Bqbvorv7cf85r0aSNJRhrzZ5wagLkSQNb8bwTvKGGRZXVb11juuRJA1htjPvO6Zo24hugKgtAMNbksZgtg8s/3liOskmdANJvQA4Gfjn6baTJI3WrH3ebZjWV9I9w3IJsPvEMK2SpPGYrc/7ncCBdOOF/EFV3b5aqpIkzWi2IWFfRTd+9uuB6wdukb9tVW6PlyStmtn6vIcd71uStBoZzpLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDhrck9ZDhLUk9ZHhLUg8Z3pLUQ4a3JPWQ4S1JPWR4S1IPGd6S1EOGtyT10FjCO8n2Sb6e5LIklyR5RWvfPMlZSX7cvm42sM0xSa5MckWSp42jbkmaL8Z15n0X8Kqq+n1gL+CoJLsCRwNnV9Ui4Ow2T1t2MPBwYB/g+CTrjqVySZoHxhLeVbWsqi5s07cBlwHbAvsDS9pqS4AD2vT+wMlVdWdVXQVcCey5WouWpHlk7H3eSXYEHg18F9iqqpZBF/DAg9tq2wLXDmy2tLVJ0lpprOGdZGPgP4C/rqpbZ1p1iraaYn9HJjk/yfk33XTTXJUpSfPO2MI7yfp0wf2JqvpMa74hydZt+dbAja19KbD9wObbAddP3mdVnVBVi6tq8YIFC0ZXvCSN2biuNgnwYeCyqnrXwKLTgcPa9GHA5wbaD05y/yQ7AYuA81ZXvZI036w3puM+HngecHGSi1rb64DjgFOTHAFcAxwEUFWXJDkVuJTuSpWjqmr5aq9akuaJsYR3VX2LqfuxAfaeZptjgWNHVpQk9cjYrzaRJK04w1uSesjwlqQeMrwlqYcMb0nqIcNbknrI8JakHjK8JamHDG9J6iHDW5J6yPCWpB4yvCWphwxvSeohw1uSesjwlqQeMrwlqYcMb0nqIcNbknrI8JakHjK8JamHDG9J6iHDW5J6yPCWpB4yvCWphwxvSeohw1uSesjwlqQeMrwlqYcMb0nqIcNbknrI8JakHjK8JamHDG9J6iHDW5J6yPCWpB4yvCWphwxvSeohw1uSesjwlqQeMrwlqYcMb0nqIcNbknrI8JakHjK8JamHDG9J6iHDW5J6yPCWpB4yvCWphwxvSeohw1uSesjwlqQeMrwlqYcMb0nqod6Ed5J9klyR5MokR4+7Hkkap16Ed5J1gX8H/gzYFTgkya7jrUqSxqcX4Q3sCVxZVT+tqt8CJwP7j7kmSRqb9cZdwJC2Ba4dmF8KPGbySkmOBI5ss7cnuWI11LYm2RK4edxFrFbJuCtY2/gztmK+XFX7TLWgL+E91buv+zRUnQCcMPpy1kxJzq+qxeOuQ2suf8bmTl+6TZYC2w/MbwdcP6ZaJGns+hLe3wMWJdkpyf2Ag4HTx1yTJI1NL7pNququJC8FvgKsC5xYVZeMuaw1kV1OGjV/xuZIqu7TdSxJmuf60m0iSRpgeEtSDxnemlKSByV5ycD8NklOG2dN6q8kL07y/DZ9eJJtBpZ9yDumV5x93ppSkh2Bz1fVI8Zdi9YsSc4BXl1V54+7lj7zzLunkuyY5LIkH0xySZIzk2yQZJckX05yQZJvJnlYW3+XJOcm+V6StyS5vbVvnOTsJBcmuTjJxLADxwG7JLkoyTvb8X7YtvlukocP1HJOkj2SbJTkxHaM/x7Yl3qs/dtfnmRJkh8kOS3Jhkn2bv/OF7d/9/u39Y9Lcmlb959a25uSvDrJs4DFwCfaz9YG7edncZK/SvKOgeMenuRf2/ShSc5r23ygjXe0dqsqXz18ATsCdwG7tflTgUOBs4FFre0xwNfa9OeBQ9r0i4Hb2/R6wKZtekvgSro7WncEfjjpeD9s038DvLlNbw38qE2/HTi0TT8I+BGw0bi/V77m5GetgMe3+ROB19MNWfGQ1vYx4K+BzYEruOev+ge1r2+iO9sGOAdYPLD/c+gCfQHdGEYT7V8C/gj4feAMYP3Wfjzw/HF/X8b98sy7366qqova9AV0/8keB3w6yUXAB+jCFeCxwKfb9CcH9hHg7Ul+AHyVbhyZrWY57qnAQW362QP7fSpwdDv2OcADgIUr9pY0T11bVd9u0ycBe9P9/P2otS0BngDcCvwG+FCSA4H/HfYAVXUT8NMkeyXZAngo8O12rD2A77Wfrb2BnVf9LfVbL27S0bTuHJheThe6v6yq3VZgH8+lO+PZo6p+l+RqutCdVlVdl+TnSR4JPAf4y7YowDOrygHB1jxDfThW3Q11e9IF7MHAS4E/WYHjnEJ3QnA58NmqqiQBllTVMStY8xrNM+81y63AVUkOAkjnUW3ZucAz2/TBA9s8ELixBfeTgR1a+23AJjMc62TgtcADq+ri1vYV4GXtPxtJHr2qb0jzxsIkj23Th9D9lbZjkt9rbc8DvpFkY7qfiS/SdaPsNsW+ZvrZ+gxwQDvGKa3tbOBZSR4MkGTzJDtMvfnaw/Be8zwXOCLJ94FLuGfc878GXpnkPLqulF+19k8Ai5Oc37a9HKCqfg58O8kPk7xziuOcRvdL4NSBtrcC6wM/aB9uvnUu35jG6jLgsNa9tjnwL8AL6LroLgbuBt5PF8qfb+t9g+7zkck+Crx/4gPLwQVV9QvgUmCHqjqvtV1K18d+ZtvvWdzTHbjW8lLBtUSSDYFftz9DD6b78NKrQTQrLxudn+zzXnvsAfxb69L4JfDC8ZYjaVV45i1JPWSftyT1kOEtST1keEtSDxneWmMl+bs27ssP2mVpj1mJfeyW5OkD889IcvTcVnqfYz4pyeNGeQz1n1ebaI3UbijZF9i9qu5MsiVwv5XY1W504258EaCqTmf0z099EnA78F8jPo56zKtNtEZq42q8oKr2m9S+B/AuYGPgZuDwqlqWbpjS7wJPphtU64g2fyWwAXAd8A9tenFVvTTJR4FfAw+juzP1BcBhdOPIfLeqDm/HfCrwZuD+wE9aXbe3oQiWAPvR3dx0EN24IOfSDXdwE/CyqvrmnH5ztEaw20RrqjOB7ZP8KMnxSZ6YZH3gX4FnVdUedKPjHTuwzXpVtSfd3ahvrKrfAm8ATqmq3arqFO5rM7qxO/6GbuS7fwEeDvxB63LZku7uwKdU1e7A+cArB7a/ubW/j27Uvavp7lT8l3ZMg1tTsttEa6R2ZrsH8Md0Z9OnAG8DHgGc1YZfWRdYNrDZZ9rXiREah3FGu2v1YuCGiXFeklzS9rEdsCvdUAPQdd18Z5pjHjj8O9TazvDWGquqltMNTXtOC9ejgEuq6rHTbDIxSuNyhv+/MbHN3dx7lMe72z6WA2dV1SFzeEzJbhOtmZI8NMmigabd6AZXWjAxOl6S9QefCDSN2UZXnM25wOMnRt9rT6B5yIiPqbWA4a011cbAkonHcdF1XbwBeBbwj23UxYvoHl4xk68Du7ZLDZ+zokW0BwwcDnyq1XEu3QecMzkD+It2zD9e0WNq7eDVJpLUQ555S1IPGd6S1EOGtyT1kOEtST1keEtSDxnektRDhrck9dD/B90K7EZXNo4bAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.catplot(x='sentiment', kind='count', color='r', data=original_dataset)\n",
"plt.title('Distribución de Ejemplos')\n",
"plt.xlabel('Sentiment')\n",
"plt.ylabel('Número de Ejemplos')"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "26eb3c40",
"metadata": {},
"outputs": [],
"source": [
"def processing_text(texto):\n",
" processed_feature = re.sub(r'\\W', ' ', str(texto))\n",
" processed_feature= re.sub(r'\\s+[a-zA-Z]\\s+', ' ', processed_feature)\n",
" processed_feature = re.sub(r'\\^[a-zA-Z]\\s+', ' ', processed_feature) \n",
" processed_feature = re.sub(r'[0-9]+', ' ', processed_feature)\n",
" processed_feature = re.sub(' +', ' ', processed_feature) \n",
" processed_feature = processed_feature.lower()\n",
" processed_feature = \" \".join([stemmer.stem(i) for i in processed_feature.split()])\n",
" return processed_feature"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "09fdea43",
"metadata": {},
"outputs": [],
"source": [
"labels = original_dataset['sentiment'].values\n",
"text_for_processing = original_dataset['review'].values"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "66b443e8",
"metadata": {},
"outputs": [],
"source": [
"processinc_text_vectorized = np.vectorize(lambda x: processing_text(x))"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "a2ac865a",
"metadata": {},
"outputs": [],
"source": [
"texto_procesado = processinc_text_vectorized(text_for_processing)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "3f704b3d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'i kept waiting for the film to mov me inspir me shock me sadd me in som way but it stirr non of my emotions it just meander along to the end non of the characters seem very uniqu or complex they just seem lik actors reciting the lin think it could hav been bett movi if the characters express mor emotion the only one who did and was believ was the veter and he probably committ suicid just to get out of the movi as soon as he could it was wast of talent film the tim and min if ther is messag or meaning or genius in this story it certainly is well hidd or am very dens which doubt'"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"texto_procesado[0]"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "49e5a22c",
"metadata": {},
"outputs": [],
"source": [
"vectorizer = CountVectorizer(max_features=2000, stop_words=stopwords.words('english'))\n",
"text_features = vectorizer.fit_transform(texto_procesado).toarray()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "e9faffb1",
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(text_features, labels, test_size=0.2, random_state=55)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "95b87b18",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MultinomialNB()"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nb = MultinomialNB()\n",
"nb.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "baa3f4a3",
"metadata": {},
"outputs": [],
"source": [
"predictions=nb.predict(X_test)\n",
"accuracy_result=accuracy_score(y_test, predictions)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "fb4619bd",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8275"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy_result"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "f179759b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Crítica test: This film was an absolute waste of my time and i doubt i will ever see this shameful display again\n",
"Crítica test: ['negative']\n"
]
}
],
"source": [
"test = \"This film was an absolute waste of my time and i doubt i will ever see this shameful display again\"\n",
"test_procesado=processing_text(test)\n",
"test_bow=vectorizer.transform([test_procesado])\n",
"clase_test=nb.predict(test_bow)\n",
"print(\"Critique test:\", test)\n",
"print(\"Crítique test:\", clase_test)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "16df5e6d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Crítica test: Extremely disturbing, just what I was looking for. Great performances but lackluster direction.\n",
"Crítica test: ['positive']\n"
]
}
],
"source": [
"test = \"Extremely disturbing, just what I was looking for. Great performances but lackluster direction.\"\n",
"test_procesado=processing_text(test)\n",
"test_bow=vectorizer.transform([test_procesado])\n",
"clase_test=nb.predict(test_bow)\n",
"print(\"Critique test:\", test)\n",
"print(\"Critique test:\", clase_test)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "08e356f2",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment