mirror of
https://github.com/deepseek-ai/DeepSeek-Coder
synced 2025-04-07 05:55:25 +00:00
1105 lines
81 KiB
Plaintext
1105 lines
81 KiB
Plaintext
{
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0,
|
|
"metadata": {
|
|
"colab": {
|
|
"provenance": [],
|
|
"include_colab_link": true
|
|
},
|
|
"kernelspec": {
|
|
"name": "python3",
|
|
"display_name": "Python 3"
|
|
},
|
|
"language_info": {
|
|
"name": "python"
|
|
}
|
|
},
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "view-in-github",
|
|
"colab_type": "text"
|
|
},
|
|
"source": [
|
|
"<a href=\"https://colab.research.google.com/github/Orrm23/DeepSeek-Coder/blob/main/26_SentimentalAnalysisNLP.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "Mkgh9SoBSOwH"
|
|
},
|
|
"source": [
|
|
"#26 Sentimental Analysis NLP"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "_UNRNEQQG9Sr",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"outputId": "be97a8fd-45a4-4ff2-d743-ad5ff1a29cf0"
|
|
},
|
|
"source": [
|
|
"!pip install nltk"
|
|
],
|
|
"execution_count": 1,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"Requirement already satisfied: nltk in /usr/local/lib/python3.11/dist-packages (3.9.1)\n",
|
|
"Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk) (8.1.8)\n",
|
|
"Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from nltk) (1.4.2)\n",
|
|
"Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.11/dist-packages (from nltk) (2024.11.6)\n",
|
|
"Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from nltk) (4.67.1)\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "v6-o7BjJTzVx"
|
|
},
|
|
"source": [
|
|
"### Importing Libraries"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "TLZbzW6wT2ZQ"
|
|
},
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import pandas as pd\n",
|
|
"import re #Regular expressions\n",
|
|
"import nltk\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"from nltk.corpus import stopwords\n",
|
|
"\n",
|
|
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
|
|
"from sklearn.ensemble import RandomForestClassifier\n",
|
|
"from sklearn.metrics import accuracy_score\n",
|
|
"\n",
|
|
"from sklearn.model_selection import train_test_split"
|
|
],
|
|
"execution_count": 2,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "NkPr6C5_UH9d"
|
|
},
|
|
"source": [
|
|
"### Load Dataset from Local Directory"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "F5rC2iqzUJEm",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 73
|
|
},
|
|
"outputId": "00a19f35-0083-435f-8a27-b21c6b2dd1d7"
|
|
},
|
|
"source": [
|
|
"from google.colab import files\n",
|
|
"uploaded = files.upload()"
|
|
],
|
|
"execution_count": 3,
|
|
"outputs": [
|
|
{
|
|
"output_type": "display_data",
|
|
"data": {
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
],
|
|
"text/html": [
|
|
"\n",
|
|
" <input type=\"file\" id=\"files-27f16a22-dbe6-404a-a90c-1db8d120a56c\" name=\"files[]\" multiple disabled\n",
|
|
" style=\"border:none\" />\n",
|
|
" <output id=\"result-27f16a22-dbe6-404a-a90c-1db8d120a56c\">\n",
|
|
" Upload widget is only available when the cell has been executed in the\n",
|
|
" current browser session. Please rerun this cell to enable.\n",
|
|
" </output>\n",
|
|
" <script>// Copyright 2017 Google LLC\n",
|
|
"//\n",
|
|
"// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
|
|
"// you may not use this file except in compliance with the License.\n",
|
|
"// You may obtain a copy of the License at\n",
|
|
"//\n",
|
|
"// http://www.apache.org/licenses/LICENSE-2.0\n",
|
|
"//\n",
|
|
"// Unless required by applicable law or agreed to in writing, software\n",
|
|
"// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
|
|
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
|
|
"// See the License for the specific language governing permissions and\n",
|
|
"// limitations under the License.\n",
|
|
"\n",
|
|
"/**\n",
|
|
" * @fileoverview Helpers for google.colab Python module.\n",
|
|
" */\n",
|
|
"(function(scope) {\n",
|
|
"function span(text, styleAttributes = {}) {\n",
|
|
" const element = document.createElement('span');\n",
|
|
" element.textContent = text;\n",
|
|
" for (const key of Object.keys(styleAttributes)) {\n",
|
|
" element.style[key] = styleAttributes[key];\n",
|
|
" }\n",
|
|
" return element;\n",
|
|
"}\n",
|
|
"\n",
|
|
"// Max number of bytes which will be uploaded at a time.\n",
|
|
"const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
|
|
"\n",
|
|
"function _uploadFiles(inputId, outputId) {\n",
|
|
" const steps = uploadFilesStep(inputId, outputId);\n",
|
|
" const outputElement = document.getElementById(outputId);\n",
|
|
" // Cache steps on the outputElement to make it available for the next call\n",
|
|
" // to uploadFilesContinue from Python.\n",
|
|
" outputElement.steps = steps;\n",
|
|
"\n",
|
|
" return _uploadFilesContinue(outputId);\n",
|
|
"}\n",
|
|
"\n",
|
|
"// This is roughly an async generator (not supported in the browser yet),\n",
|
|
"// where there are multiple asynchronous steps and the Python side is going\n",
|
|
"// to poll for completion of each step.\n",
|
|
"// This uses a Promise to block the python side on completion of each step,\n",
|
|
"// then passes the result of the previous step as the input to the next step.\n",
|
|
"function _uploadFilesContinue(outputId) {\n",
|
|
" const outputElement = document.getElementById(outputId);\n",
|
|
" const steps = outputElement.steps;\n",
|
|
"\n",
|
|
" const next = steps.next(outputElement.lastPromiseValue);\n",
|
|
" return Promise.resolve(next.value.promise).then((value) => {\n",
|
|
" // Cache the last promise value to make it available to the next\n",
|
|
" // step of the generator.\n",
|
|
" outputElement.lastPromiseValue = value;\n",
|
|
" return next.value.response;\n",
|
|
" });\n",
|
|
"}\n",
|
|
"\n",
|
|
"/**\n",
|
|
" * Generator function which is called between each async step of the upload\n",
|
|
" * process.\n",
|
|
" * @param {string} inputId Element ID of the input file picker element.\n",
|
|
" * @param {string} outputId Element ID of the output display.\n",
|
|
" * @return {!Iterable<!Object>} Iterable of next steps.\n",
|
|
" */\n",
|
|
"function* uploadFilesStep(inputId, outputId) {\n",
|
|
" const inputElement = document.getElementById(inputId);\n",
|
|
" inputElement.disabled = false;\n",
|
|
"\n",
|
|
" const outputElement = document.getElementById(outputId);\n",
|
|
" outputElement.innerHTML = '';\n",
|
|
"\n",
|
|
" const pickedPromise = new Promise((resolve) => {\n",
|
|
" inputElement.addEventListener('change', (e) => {\n",
|
|
" resolve(e.target.files);\n",
|
|
" });\n",
|
|
" });\n",
|
|
"\n",
|
|
" const cancel = document.createElement('button');\n",
|
|
" inputElement.parentElement.appendChild(cancel);\n",
|
|
" cancel.textContent = 'Cancel upload';\n",
|
|
" const cancelPromise = new Promise((resolve) => {\n",
|
|
" cancel.onclick = () => {\n",
|
|
" resolve(null);\n",
|
|
" };\n",
|
|
" });\n",
|
|
"\n",
|
|
" // Wait for the user to pick the files.\n",
|
|
" const files = yield {\n",
|
|
" promise: Promise.race([pickedPromise, cancelPromise]),\n",
|
|
" response: {\n",
|
|
" action: 'starting',\n",
|
|
" }\n",
|
|
" };\n",
|
|
"\n",
|
|
" cancel.remove();\n",
|
|
"\n",
|
|
" // Disable the input element since further picks are not allowed.\n",
|
|
" inputElement.disabled = true;\n",
|
|
"\n",
|
|
" if (!files) {\n",
|
|
" return {\n",
|
|
" response: {\n",
|
|
" action: 'complete',\n",
|
|
" }\n",
|
|
" };\n",
|
|
" }\n",
|
|
"\n",
|
|
" for (const file of files) {\n",
|
|
" const li = document.createElement('li');\n",
|
|
" li.append(span(file.name, {fontWeight: 'bold'}));\n",
|
|
" li.append(span(\n",
|
|
" `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
|
|
" `last modified: ${\n",
|
|
" file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
|
|
" 'n/a'} - `));\n",
|
|
" const percent = span('0% done');\n",
|
|
" li.appendChild(percent);\n",
|
|
"\n",
|
|
" outputElement.appendChild(li);\n",
|
|
"\n",
|
|
" const fileDataPromise = new Promise((resolve) => {\n",
|
|
" const reader = new FileReader();\n",
|
|
" reader.onload = (e) => {\n",
|
|
" resolve(e.target.result);\n",
|
|
" };\n",
|
|
" reader.readAsArrayBuffer(file);\n",
|
|
" });\n",
|
|
" // Wait for the data to be ready.\n",
|
|
" let fileData = yield {\n",
|
|
" promise: fileDataPromise,\n",
|
|
" response: {\n",
|
|
" action: 'continue',\n",
|
|
" }\n",
|
|
" };\n",
|
|
"\n",
|
|
" // Use a chunked sending to avoid message size limits. See b/62115660.\n",
|
|
" let position = 0;\n",
|
|
" do {\n",
|
|
" const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
|
|
" const chunk = new Uint8Array(fileData, position, length);\n",
|
|
" position += length;\n",
|
|
"\n",
|
|
" const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
|
|
" yield {\n",
|
|
" response: {\n",
|
|
" action: 'append',\n",
|
|
" file: file.name,\n",
|
|
" data: base64,\n",
|
|
" },\n",
|
|
" };\n",
|
|
"\n",
|
|
" let percentDone = fileData.byteLength === 0 ?\n",
|
|
" 100 :\n",
|
|
" Math.round((position / fileData.byteLength) * 100);\n",
|
|
" percent.textContent = `${percentDone}% done`;\n",
|
|
"\n",
|
|
" } while (position < fileData.byteLength);\n",
|
|
" }\n",
|
|
"\n",
|
|
" // All done.\n",
|
|
" yield {\n",
|
|
" response: {\n",
|
|
" action: 'complete',\n",
|
|
" }\n",
|
|
" };\n",
|
|
"}\n",
|
|
"\n",
|
|
"scope.google = scope.google || {};\n",
|
|
"scope.google.colab = scope.google.colab || {};\n",
|
|
"scope.google.colab._files = {\n",
|
|
" _uploadFiles,\n",
|
|
" _uploadFilesContinue,\n",
|
|
"};\n",
|
|
"})(self);\n",
|
|
"</script> "
|
|
]
|
|
},
|
|
"metadata": {}
|
|
},
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"Saving dataset.csv to dataset.csv\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "aK8lU0OUUlX0"
|
|
},
|
|
"source": [
|
|
"### Importing Dataset"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "d2I6egUxUoaq",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"outputId": "ca87b21b-2c27-4661-a0fa-eb682b4a1e60"
|
|
},
|
|
"source": [
|
|
"dataset = pd.read_csv('dataset.csv')\n",
|
|
"print(dataset.shape)\n",
|
|
"print(dataset.head(5))"
|
|
],
|
|
"execution_count": 4,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"(14640, 15)\n",
|
|
" tweet_id airline_sentiment airline_sentiment_confidence \\\n",
|
|
"0 570306133677760513 neutral 1.0000 \n",
|
|
"1 570301130888122368 positive 0.3486 \n",
|
|
"2 570301083672813571 neutral 0.6837 \n",
|
|
"3 570301031407624196 negative 1.0000 \n",
|
|
"4 570300817074462722 negative 1.0000 \n",
|
|
"\n",
|
|
" negativereason negativereason_confidence airline \\\n",
|
|
"0 NaN NaN Virgin America \n",
|
|
"1 NaN 0.0000 Virgin America \n",
|
|
"2 NaN NaN Virgin America \n",
|
|
"3 Bad Flight 0.7033 Virgin America \n",
|
|
"4 Can't Tell 1.0000 Virgin America \n",
|
|
"\n",
|
|
" airline_sentiment_gold name negativereason_gold retweet_count \\\n",
|
|
"0 NaN cairdin NaN 0 \n",
|
|
"1 NaN jnardino NaN 0 \n",
|
|
"2 NaN yvonnalynn NaN 0 \n",
|
|
"3 NaN jnardino NaN 0 \n",
|
|
"4 NaN jnardino NaN 0 \n",
|
|
"\n",
|
|
" text tweet_coord \\\n",
|
|
"0 @VirginAmerica What @dhepburn said. NaN \n",
|
|
"1 @VirginAmerica plus you've added commercials t... NaN \n",
|
|
"2 @VirginAmerica I didn't today... Must mean I n... NaN \n",
|
|
"3 @VirginAmerica it's really aggressive to blast... NaN \n",
|
|
"4 @VirginAmerica and it's a really big bad thing... NaN \n",
|
|
"\n",
|
|
" tweet_created tweet_location user_timezone \n",
|
|
"0 2015-02-24 11:35:52 -0800 NaN Eastern Time (US & Canada) \n",
|
|
"1 2015-02-24 11:15:59 -0800 NaN Pacific Time (US & Canada) \n",
|
|
"2 2015-02-24 11:15:48 -0800 Lets Play Central Time (US & Canada) \n",
|
|
"3 2015-02-24 11:15:36 -0800 NaN Pacific Time (US & Canada) \n",
|
|
"4 2015-02-24 11:14:45 -0800 NaN Pacific Time (US & Canada) \n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "cfM237zDUwSx"
|
|
},
|
|
"source": [
|
|
"###Segregating Dataset into Input & Output"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "ReRaankPU1f0",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"outputId": "8af748d8-bde1-449f-decc-246268f7716d"
|
|
},
|
|
"source": [
|
|
"features = dataset.iloc[:, 10].values\n",
|
|
"labels = dataset.iloc[:, 1].values\n",
|
|
"print(labels)"
|
|
],
|
|
"execution_count": 5,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"['neutral' 'positive' 'neutral' ... 'neutral' 'negative' 'neutral']\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "KQwlfdWsj2LT"
|
|
},
|
|
"source": [
|
|
"###Removing the Special Character"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "uhesmp0CU9xc"
|
|
},
|
|
"source": [
|
|
"processed_features = []\n",
|
|
"\n",
|
|
"for sentence in range(0, len(features)):\n",
|
|
" # Remove all the special characters\n",
|
|
" processed_feature = re.sub(r'\\W', ' ', str(features[sentence]))\n",
|
|
"\n",
|
|
" # remove all single characters\n",
|
|
" processed_feature= re.sub(r'\\s+[a-zA-Z]\\s+', ' ', processed_feature)\n",
|
|
"\n",
|
|
" # Remove single characters from the start\n",
|
|
" processed_feature = re.sub(r'\\^[a-zA-Z]\\s+', ' ', processed_feature)\n",
|
|
"\n",
|
|
" # Substituting multiple spaces with single space\n",
|
|
" processed_feature = re.sub(r'\\s+', ' ', processed_feature, flags=re.I)\n",
|
|
"\n",
|
|
" # Removing prefixed 'b'\n",
|
|
" processed_feature = re.sub(r'^b\\s+', '', processed_feature)\n",
|
|
"\n",
|
|
" # Converting to Lowercase\n",
|
|
" processed_feature = processed_feature.lower()\n",
|
|
"\n",
|
|
" processed_features.append(processed_feature)"
|
|
],
|
|
"execution_count": 6,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "meD0mcOVj5rK"
|
|
},
|
|
"source": [
|
|
"###Feature Extraction from text\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "zzisF0taVA_b",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"outputId": "0bce940a-6261-46ab-c791-4698b6e37807"
|
|
},
|
|
"source": [
|
|
"nltk.download('stopwords')\n",
|
|
"vectorizer = TfidfVectorizer (max_features=2500, min_df=7, max_df=0.8, stop_words=stopwords.words('english'))\n",
|
|
"processed_features = vectorizer.fit_transform(processed_features).toarray()\n",
|
|
"print(processed_features)"
|
|
],
|
|
"execution_count": 7,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stderr",
|
|
"text": [
|
|
"[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
|
|
"[nltk_data] Unzipping corpora/stopwords.zip.\n"
|
|
]
|
|
},
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"[[0. 0. 0. ... 0. 0. 0.]\n",
|
|
" [0. 0. 0. ... 0. 0. 0.]\n",
|
|
" [0. 0. 0. ... 0. 0. 0.]\n",
|
|
" ...\n",
|
|
" [0. 0. 0. ... 0. 0. 0.]\n",
|
|
" [0. 0. 0. ... 0. 0. 0.]\n",
|
|
" [0. 0. 0. ... 0. 0. 0.]]\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "n2vFlF_fj-SK"
|
|
},
|
|
"source": [
|
|
"###Splitting Dataset into Train & Test"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "Q4fpb6RmVI0t"
|
|
},
|
|
"source": [
|
|
"X_train, X_test, y_train, y_test = train_test_split(processed_features, labels, test_size=0.2, random_state=0)"
|
|
],
|
|
"execution_count": 8,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "z9zzG3lDkC9L"
|
|
},
|
|
"source": [
|
|
"###Loading Random Forest Algorithm"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "0TG77VbjVK7H",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 80
|
|
},
|
|
"outputId": "67fca259-b904-426c-dacb-fb233a53040c"
|
|
},
|
|
"source": [
|
|
"text_classifier = RandomForestClassifier(n_estimators=200, random_state=0)\n",
|
|
"text_classifier.fit(X_train, y_train)"
|
|
],
|
|
"execution_count": 9,
|
|
"outputs": [
|
|
{
|
|
"output_type": "execute_result",
|
|
"data": {
|
|
"text/plain": [
|
|
"RandomForestClassifier(n_estimators=200, random_state=0)"
|
|
],
|
|
"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",
|
|
" max-height: 0;\n",
|
|
" max-width: 0;\n",
|
|
" overflow: hidden;\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",
|
|
" max-height: 200px;\n",
|
|
" max-width: 100%;\n",
|
|
" overflow: auto;\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",
|
|
"</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(n_estimators=200, random_state=0)</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>RandomForestClassifier</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(n_estimators=200, random_state=0)</pre></div> </div></div></div></div>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"execution_count": 9
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "s-cE4paSkH69"
|
|
},
|
|
"source": [
|
|
"###Predicting the Test data with Trained Model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "JjNeO6rQVMfr"
|
|
},
|
|
"source": [
|
|
"predictions = text_classifier.predict(X_test)"
|
|
],
|
|
"execution_count": 10,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "WzNioePqkMnH"
|
|
},
|
|
"source": [
|
|
"###Score of the Model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "o2TY6JdyVOXn",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"outputId": "8f600ab5-7d7e-453c-c57e-4d9db5a1fb86"
|
|
},
|
|
"source": [
|
|
"print(accuracy_score(y_test, predictions))"
|
|
],
|
|
"execution_count": 11,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"0.7592213114754098\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "MGL1jroOkRaR"
|
|
},
|
|
"source": [
|
|
"###Confusion Matrix"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"id": "Skyz1_qpVQgl",
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 506
|
|
},
|
|
"outputId": "b78c2ba2-5d35-4535-f99c-d6ee7f891fd1"
|
|
},
|
|
"source": [
|
|
"from sklearn import metrics\n",
|
|
"import itertools\n",
|
|
"def plot_confusion_matrix(cm, classes,\n",
|
|
" normalize=False,\n",
|
|
" title='Confusion matrix',\n",
|
|
" cmap=plt.cm.Blues):\n",
|
|
"\n",
|
|
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
|
|
" plt.title(title)\n",
|
|
" plt.colorbar()\n",
|
|
" tick_marks = np.arange(len(classes))\n",
|
|
" plt.xticks(tick_marks, classes)\n",
|
|
" plt.yticks(tick_marks, classes)\n",
|
|
"\n",
|
|
" thresh = cm.max() / 2.\n",
|
|
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
|
|
" plt.text(j, i, cm[i, j],\n",
|
|
" horizontalalignment=\"center\",\n",
|
|
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
|
|
"\n",
|
|
" plt.tight_layout()\n",
|
|
" plt.ylabel('True label')\n",
|
|
" plt.xlabel('Predicted label')\n",
|
|
"\n",
|
|
"cm = metrics.confusion_matrix(y_test, predictions, labels=['negative', 'neutral', 'positive'])\n",
|
|
"plot_confusion_matrix(cm, classes=['negative', 'neutral', 'positive'])"
|
|
],
|
|
"execution_count": 12,
|
|
"outputs": [
|
|
{
|
|
"output_type": "display_data",
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 2 Axes>"
|
|
],
|
|
"image/png": "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vz8+Pj6cO3fO5nixYsUytJE/f36uXr36gBFn9Pzzz1OvXj169uyJn58fnTp14osvvrhvInYnzqCgoAxlwcHB/PbbbxnmNv31XvLnzw9g17089thjGeapmc1mAgMDMxz7a5t//PEHo0ePJjAwEFdXVwoVKoSvry/Xrl0jPj7+b699R8mSJe2uCzB37lxu3rzJyZMnmT9/vk0SKCI5n5IvkRzK29ubgIAAfvzxx0yd99dE4l7utayDxY7VZ+51jbS0NJt9d3d3tm7dynfffUeXLl04dOgQzz//PM2bN89Q95/4J/dyr3PtabN///5MmDCB5557ji+++IL169cTHR1NwYIF7e7pAzKdPG3evNn6EMXhw4czda6IZD8lXyI52JNPPsnp06fZtWvX39YtXrw46enpnDx50ub45cuXuXbtmvXJRSPkz5+fa9euZTj+1941ACcnJ5o1a8aHH37I0aNHmTBhAhs3bmTTpk13bftOnMePH89Q9tNPP1GoUKEcM7H8q6++IiIigkmTJlkfXqhfv36Gz8behNgely5don///rRo0YInn3ySoUOH3vVzF5GcS8mXSA42fPhwPDw86NmzJ5cvX85Qfvr0aaZOnQpA69atATI8kfjhhx8C0KZNG8PiKlWqFPHx8Rw6dMh67NKlSyxbtsym3pUrVzKce+dJvr8uf3FHkSJFqFKlCgsWLLBJYn788UfWr19vvc+cIE+ePBl616ZPn56hV+9Osni3hDWzevXqRXp6OnPnzmXOnDk4OzvTo0cPu3r5RCRn0CKrIjlYqVKlWLx4Mc8//zzBwcE2K9zv3LmTL7/80roOVOXKlYmIiGDOnDlcu3aNRo0a8f3337NgwQLat29PkyZNDIurU6dOjBgxgqeffpoBAwZw8+ZNZs6cSdmyZW0mmo8bN46tW7fSpk0bihcvTlxcHDNmzOCxxx6jfv3692z//fffp1WrVoSEhNCjRw/++OMPpk+fjtlsZuzYsYbdxz/15JNPsmjRIsxmM+XKlWPXrl189913FCxY0KZelSpVyJMnD++99x7x8fG4urrStGlTChcunKnrzZs3jzVr1jB//nwee+wx4Hay9+KLLzJz5kxeffVVw+5NRLKOki+RHO6pp57i0KFDvP/++6xYsYKZM2fi6upKpUqVmDRpEr169bLW/eSTT3j88ceZP38+y5Ytw9/fn5Ej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\n"
|
|
},
|
|
"metadata": {}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
} |