diff --git a/2、幸福感数据分析/第2组--王瑞恒/第二组所有实战/9:网易新闻爬虫/爬虫.ipynb b/2、幸福感数据分析/第2组--王瑞恒/第二组所有实战/9:网易新闻爬虫/爬虫.ipynb new file mode 100644 index 0000000..821de3e --- /dev/null +++ b/2、幸福感数据分析/第2组--王瑞恒/第二组所有实战/9:网易新闻爬虫/爬虫.ipynb @@ -0,0 +1,497 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#要爬取的新闻分类地址国内、国际、军事、航空、科技\n", + "url_list={'国内':[ 'https://temp.163.com/special/00804KVA/cm_guonei.js?callback=data_callback',\n", + " 'https://temp.163.com/special/00804KVA/cm_guonei_0{}.js?callback=data_callback'],\n", + " '国际':['https://temp.163.com/special/00804KVA/cm_guoji.js?callback=data_callback',\n", + " 'https://temp.163.com/special/00804KVA/cm_guoji_0{}.js?callback=data_callback'],\n", + " '军事':['https://temp.163.com/special/00804KVA/cm_war.js?callback=data_callback',\n", + " 'https://temp.163.com/special/00804KVA/cm_war_0{}.js?callback=data_callback'],\n", + " '航空':['https://temp.163.com/special/00804KVA/cm_hangkong.js?callback=data_callback&a=2',\n", + " 'https://temp.163.com/special/00804KVA/cm_hangkong_0{}.js?callback=data_callback&a=2'],\n", + " '科技':['https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback',\n", + " 'https://tech.163.com/special/00097UHL/tech_datalist_0{}.js?callback=data_callback']}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "\n", + "url = \"https://news.163.com/special/cm_war/?callback=data_callback\"\n", + "res = requests.get(url)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import json\n", + "import re\n", + "import pandas as pd\n", + "import numpy as np \n", + "from sklearn.naive_bayes import MultinomialNB\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import accuracy_score, confusion_matrix,f1_score,classification_report\n", + "from sklearn.feature_extraction.text import TfidfTransformer\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "\n", + "import jieba as jb\n", + "import matplotlib.pyplot as plt\n", + "import itertools\n", + "plt.rcParams['font.sans-serif']=\"SimHei\"\n", + "plt.rcParams['axes.unicode_minus']=False\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'title': '俄军队将参加中方"北部·联合-2023"演习', 'digest': '', 'docurl': 'https://www.163.com/news/article/I9M3TE9R0001899O.html', 'commenturl': 'https://comment.tie.163.com/I9M3TE9R0001899O.html', 'tienum': 12933, 'tlastid': \"新闻\", 'tlink': 'https://www.163.com/news/article/I9M3TE9R0001899O.html', 'label': '其它', 'keywords': [{'akey_link': 'https://news.163.com/keywords/6/1/6f144e60/1.html', 'keyname': '演习'}, {'akey_link': 'https://news.163.com/keywords/4/c/4fc47f5765af/1.html', 'keyname': '俄罗斯'}, {'akey_link': 'https://news.163.com/keywords/5/9/519b961f/1.html', 'keyname': '军队'}], 'time': '07/15/2023 08:34:35', 'newstype': 'article', 'pics3': [], 'channelname': 'war', 'source': '新京报', 'point': '99', 'imgurl': 'http://cms-bucket.ws.126.net/2023/0715/e5f8d5bep00rxtkwp0034c000s600e3c.png', 'add1': 'http://cms-bucket.ws.126.net/2023/0715/e5f8d5bep00rxtkwp0034c000s600e3c.png', 'add2': '', 'add3': ''}\n" + ] + } + ], + "source": [ + "news_list = eval(res.text[14:-1])\n", + "for news in news_list:\n", + " print(news)\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def parse_class(url):\n", + " # 获取分类下的新闻\n", + " req=requests.get(url)\n", + " text=req.text\n", + " res=re.findall(\"title(.*?)\\\\n\",text)\n", + " for i in range(len(res)):\n", + " res[i]=re.sub(\"\\'|\\\"|\\:|'|,|\",\"\",res[i])\n", + " return res" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "titles=[]\n", + "categories=[]\n", + "def get_result(url):\n", + " global titles,categories\n", + " temp=parse_class(url)\n", + " #去除空白页\n", + " if temp[0]=='>网易-404':\n", + " return False\n", + " print(url)\n", + " titles.extend(temp)\n", + " temp_class=[key for i in range(len(temp))]\n", + " categories.extend(temp_class)\n", + " return True\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=========正在爬取国内新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_guonei.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_02.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_03.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_04.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_05.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_06.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_07.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guonei_08.js?callback=data_callback\n", + "=========正在爬取国际新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_guoji.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_02.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_03.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_04.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_05.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_06.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_07.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_guoji_08.js?callback=data_callback\n", + "=========正在爬取军事新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_war.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_02.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_03.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_04.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_05.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_06.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_07.js?callback=data_callback\n", + "https://temp.163.com/special/00804KVA/cm_war_08.js?callback=data_callback\n", + "=========正在爬取航空新闻===========\n", + "https://temp.163.com/special/00804KVA/cm_hangkong.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_02.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_03.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_04.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_05.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_06.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_07.js?callback=data_callback&a=2\n", + "https://temp.163.com/special/00804KVA/cm_hangkong_08.js?callback=data_callback&a=2\n", + "=========正在爬取科技新闻===========\n", + "https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback\n", + "https://tech.163.com/special/00097UHL/tech_datalist_02.js?callback=data_callback\n", + "https://tech.163.com/special/00097UHL/tech_datalist_03.js?callback=data_callback\n", + "爬取完毕!\n" + ] + } + ], + "source": [ + "for key in url_list.keys():\n", + " #按分类分别爬取\n", + " print(\"=========正在爬取{}新闻===========\".format(key))\n", + " #遍历每个分类中的子链接\n", + " #首先获取首页\n", + " get_result(url_list[key][0])\n", + " #循环获取加载更多得到的页面\n", + " for i in range(1,10):\n", + " try:\n", + " if get_result(url_list[key][1].format(i)):\n", + " pass\n", + " else:\n", + " continue\n", + " except:\n", + " break\n", + "print(\"爬取完毕!\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
新闻内容新闻类别
0“北部・联合-2023”演习在即 专家:中俄在日本海演练有针对性和实战性国内
1王毅:美方应取消对华非法无理制裁国内
2中国海警驱离日非法进入我赤尾屿领海船只国内
3深圳9万套“双拼房”可“双证合一”?官方:以柜台审核为准国内
4中国大陆猴痘病例已达10例 科普来了国内
.........
2325马斯克:“我有点亲华”科技
2326《生成式人工智能服务管理暂行办法》来了,8月15日起施行科技
2327马斯克的“AI梦”,终于靴子落地?xAI中的5位华人面孔科技
2328华为正式公布5G手机专利许可费率:上限每台2.5美元科技
2329传淘天集团取消P序列背后:「能者上,庸者下」科技
\n", + "

2330 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " 新闻内容 新闻类别\n", + "0 “北部・联合-2023”演习在即 专家:中俄在日本海演练有针对性和实战性 国内\n", + "1 王毅:美方应取消对华非法无理制裁 国内\n", + "2 中国海警驱离日非法进入我赤尾屿领海船只 国内\n", + "3 深圳9万套“双拼房”可“双证合一”?官方:以柜台审核为准 国内\n", + "4 中国大陆猴痘病例已达10例 科普来了 国内\n", + "... ... ...\n", + "2325 马斯克:“我有点亲华” 科技\n", + "2326 《生成式人工智能服务管理暂行办法》来了,8月15日起施行 科技\n", + "2327 马斯克的“AI梦”,终于靴子落地?xAI中的5位华人面孔 科技\n", + "2328 华为正式公布5G手机专利许可费率:上限每台2.5美元 科技\n", + "2329 传淘天集团取消P序列背后:「能者上,庸者下」 科技\n", + "\n", + "[2330 rows x 2 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new=pd.DataFrame({\n", + " \"新闻内容\":titles,\n", + " \"新闻类别\":categories\n", + "})\n", + "df=new\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAHBCAYAAABUjNCbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0aklEQVR4nO3de1xUdeL/8fdwHRFBkUQxSrxryZqK4ba2uZKYF7Taryva5dFmZe5+225sWqlpu+C6hZdHWmsalFF9y9rcUjczL6Vhm0QkkeYFH2quioozKDAic35/+OD8IqTUgA+X1/PxmMfDOZ8zM5/heHl55pwzDsuyLAEAABjgY3oCAACg+SJEAACAMYQIAAAwhhABAADGECIAAMAYQgQAABhDiAAAAGMIEQAAYAwhAgAAjCFEgCbioYce0j333HPesZMnT+qrr77SCy+8oN/97nf69NNP7bHVq1frrrvusu+fOnVKZ8+evejXd7vdVe4///zzysvLs+9//PHHOnr0aLXHeb1ebd68+by3w4cPV1v/gw8+0J133llt+ZkzZ2qc96uvvqq1a9f+6PxPnz6toqKiGseff/55vffeez/6HAAuHiECNGIul0tut1tlZWWqqKjQJ598otOnT+vkyZNyuVzavXu3WrZsqTZt2uiXv/ylnnnmGR08eFAffvih/RxRUVFasWKFXnzxRUnS1VdfLX9/fzkcjvPerr322mrzOHLkiDp37qzMzEx72ezZs5WTkyNJOnbsmP7nf/5HDzzwwHnfx+DBg/Wb3/xG8fHx9m3w4MF6//33q617+PBhbdiwodryd999V506ddKOHTuqjWVlZen+++9XeXl5jT/L++67TzfeeKNcLtd5x1esWKEtW7bU+HgAl8bP9AQAXLoxY8Zo06ZNVZYFBwdLkhISErR48WKVlJQoLy9PV111VbXHFxYWqkuXLkpPT1dJSYkk6fPPP5evr698fKr/P2XOnDnn/cc4IiJCTz/9tO688055vV7dfvvt8vX1lb+/vzwej2655RZ16tRJy5Ytq/ZYHx8f+fj4aO3atbrhhhvs5Z06dVJAQIAkacmSJdq6dateeumlGue2dOlS9e7dWz179pRlWcrPz5fT6ZSvr6/GjRunsrIy7dq1S0FBQTp79qzKysp09dVX249/5plndN1112nEiBFau3atWrZsWeX5/f395efHX5lAbeNPFdCIvfnmm/r2229VVlamAQMGSJJefPFF9enTRwMGDNDp06clqdo/qpXi4uL05z//Wffdd5+97LLLLqvx9ZxOpx0HklRWVqY9e/YoMDBQN910k8aPH6+TJ09q3759qqioUGFhob744gsdO3ZML730ko4ePaozZ86oVatWioyMtJ/H4XCc9/Uqg6OwsPC8ezoqZWdna+PGjfrqq690/PhxtWjRQn379lWLFi3k4+Oj8vJy+fv76+2335YklZeXy+PxVPkop3379lq9erUGDBig5557To899liNrweg9hAiQCPWrl07Pf/889q0aZPWr1+v06dPa8aMGVq5cqXCw8NVWlr6o4/39/dXYGCglixZouTkZPn7+1dbx+v1qqSkRLm5uZKqRsOOHTt0zTXXyN/fX0FBQZKk999/3/4IZurUqfZzDh8+XJZlyePx6N5779XChQurvEZBQYHCw8PtZeXl5ar8cvCa9oJIkmVZeuSRR/Tggw+qZ8+eGjt2rP773//q9OnTCggI0K5du3TDDTdoxYoVGjRo0I/+PHr06KHNmzcrJibmR9cDUHsIEaCROnv2rE6cOKGxY8dq+/btOnnypFavXq327dsrNjZWR44csaPhb3/7m0JDQyXJjoH58+crICBAfn5+Gj9+vG655RZddtllKigoUKdOnSRJGRkZysjI0HvvvWeHxvfFxMSorKxMgYGB9rKHHnpI7777rlwulxYvXqwDBw4oPz9fzzzzjNq2bVvtOSqD4/e//321MY/H85M/hz/84Q/avHmzhg0bptmzZ+tf//qXli1bZu+5mTFjhrp27ar+/ftLknJycnTNNdfYjy8qKtInn3xirx8REaGSkhJ9++23cjqd9s/w9OnTOn78uL1nxuv1yuv1Vvl4B8DFI0SARmr37t3q1auXfb/yYwdJCgsLU2BgoHbt2iXp3D/2ZWVlyszM1FVXXaXevXtL+v8ffTidzh89U6ZVq1bnXe7j42NHyNGjRzVp0iTl5ubqgw8+0NChQ+X1ehUfH6/MzEz17NlTCxcuVFJSUpXn8Pf3tw8iHT16tEaMGKH7779f0rk9IT8lMjJSQ4YM0f79+/Xmm29qzJgx9llAr776qj755BN98cUXCggI0Pbt2zVw4EAtXrzYPsPo4MGD+vOf/yx/f38dOnRIQ4cO1WOPPaa4uDj7ox3pXIh8/vnnev311yWdC7rIyEh98803PzlHADXjrBmgkeratauOHj2qkydPyu12a8qUKRozZozcbreKioq0f/9+VVRUSJJSU1M1f/58dezYUb/97W+1ePHiGp83OjraPkPm+6f11uTbb7/Vk08+qa5du8rhcOg///mPevbsKY/HI4/Ho2uuuUaff/657r33Xk2cOFG33HJLtdNk/fz85Ofnp127dqmsrMy+X9OxI9/35JNP6sMPP9TQoUPl6+urF154wX7Pd911l2bNmqWCggKtXr1a2dnZ6tevn6ZMmWIfdNunTx/t2LFD27dv180336yAgAD1799f5eXlcrvdOnnypE6ePKmhQ4fq0Ucfte+7XC4iBKgF7BEBGik/Pz8dPXpUXq9Xfn5+OnXqlEpLS3Xw4EFVVFTI4XDYx2fUdLDq+Zzvo5maVFRU6Pe//73Kysr0+uuva+TIkfZY7969VVZWJuncXo+//vWvGjhwoF555RX7zB5JGjZsmKRze1f++9//6uWXX9ZHH31kj6elpf3knI8cOaIHHnhAixYtUkREhL3s7Nmzuu+++xQWFqauXbsqKytLDz30kJxOp5566qkqpzFX4swYoH7xJw5oxCZMmKDdu3fL19dXHo9HlmXp2muvVUVFhbp27aolS5bI4XCoRYsWF/yc0dHRVe7/+te/rnFdt9uttLQ0hYeHy8fHR/v27bPHjh49qvz8/CrLYmJilJKSoj179qhnz56Szl1DxMfHRw6HQx988IEGDhyo7t27S5KeeOIJO2ZqUlBQoNGjR6ukpEQrVqzQvHnzZFmW1qxZo6eeekp/+MMfFB4ervvvv1+9evXS448/Ll9fXzmdzgv+mQCoO4QI0Ijl5uZq/fr16tixo55//nkdPHhQixYtUkVFhSIjI/Xmm2+qQ4cOF/QRR6WL2SPyzjvv6A9/+IP8/f2rHM9RUVGhU6dOadeuXVq+fLm93LIsnTlzRmFhYfruu+8kSdOnT5d07piXJ554QlOnTlX37t1lWZamTZtmX4ukpouRhYaGKjg4WBMnTlTPnj0VHR2tnj17qk2bNpLOXVW2a9euVR5TOVaTEydO6KmnntK8efMu6DgVAJeOEAEaMY/Ho0mTJqlHjx7q0aOHJOmBBx5QWVmZVq5cqS+++ELdunX7yec5deqUfUVRr9drH3dy6NAhFRYW6sUXX9QVV1xR7XF333237r777mrLZ86cqeXLl+vo0aN64403NHz48J+cQ+Upx126dJEk+9TjoKAglZaW1ngGTVhYmLZu3WrftyxLubm5crlccjqdysrKqnKdlJ9SXFyskSNHqqysTG63+yejBcDPw8GqQCP2xBNPyO12a+nSpfayp59+WqtXr9bq1au1fv16xcXF1fh4r9crSRo/frwuv/xySVKXLl3Upk0b9e7dW3PnzpWvr69uvPFGJSQkXNCc1q5dqzlz5uiVV17R0qVLNX78eL3zzjs/+pj9+/frb3/7m+6++257D0RliLRo0UJz5szRl19+ed7HFhUVaePGjVqwYIFuv/12RUZG6te//rWOHTumuXPn2mfu/NBjjz2mvXv3VllWUlKid955RxUVFVq/fj0RAtQDQgRopL788kulpaUpPT1dHTt2tKOie/fuevnll3XllVfq888/16hRo2p8jsrjL/74xz/q1Vdf1aeffqp9+/aprKxMp06d0uzZs9WyZUv7oxqp5lN5d+/erT/96U8aO3aslixZol/96lcaP368li1bpjvuuEO33nprlS/bq/TNN99o6NChCg0N1bRp02RZlkpKSvTxxx/L4XAoJCSkyvr79u2r8nFJenq64uPj9dZbb6lHjx565513dOLECX366aeaNWuW5s6dq6CgIPs03M2bN2vt2rWaO3eudu7cWeW5v/rqK1177bX68MMPq0WIZVn2BdYA1CILQKO1ZcsW6/Tp09add95ptW/f3rrnnnvssdtuu82Kjo62vF6vvaxXr15WWlqafT8iIsJavnx5jc8/Z84cq1+/flZxcbG1Zs0a6/bbb7dWrVplj+fl5VkPPvigde2111oOh8OKi4uzsrKyqj3Pjh07rOHDh1uSrK5du1pPP/20ZVmWlZubawUGBlpdunSxCgoKLMuyrCNHjlj+/v6WJGvs2LH2c7z33ntW27ZtLUlWYmKivbysrMw6fPhwlddbsmSJJcmaOXOmvay0tNTq06ePJcmSZI0ePbrKz6by/Zw8efK8P4vrrrvOevjhh2v8WQG4NA7LIvGBxm7SpEk6cuSI0tLS1K1bN509e1Zjx47ViBEjNGXKFHu9Ll266J577tHUqVMv+jUOHjxof3xT6fjx47rppps0aNAgTZgw4bzfzPt9n376qV588UWNGzdON910kyTpueee0/jx46tc3v2NN97Q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R4+uMu71epWenq74+HitX79effv2NTDLps+yLD366KMKDAyU1+tVRESE1q1bp23btun48eM6ceKETpw4obCwMNNTrVMcrFrLYmJi9NVXX6ldu3YaMGCALMvSpk2bdMMNN8iyLH3xxRf2X7SV66JusC0ajjZt2ui5557TzJkzVVBQoIKCAl1xxRXy9/e3v+GVg1Xrz+bNm7VgwYIf/UjSx8dHERERWrBgQT3OrHn57W9/q0mTJmn48OHyer1q166dVq9erbFjx+rll19WTEyMIiIiTE+zzrFHpI4EBQVp9erVkqROnTrZv/7hkemoe2wL8xwOhyZOnKhbbrlFHTp00HXXXad///vfHJtjwK5du7R//36FhYVpwoQJys/PV5cuXTR58mSlp6fr5MmTOn78uEJDQzVx4kTNnTvXPrMDtatfv37617/+paCgIHsv7bFjx5ScnKzAwEDt3LlTO3fulGVZKisrU0JCgukp1wlCpI4UFxfbv3a5XPavS0pKTEynWWNbNBwtWrSQw+HQwoULNWLECFVUVMjlcik0NNT01JqFHTt2aNCgQYqMjNSdd96p1157TV9//bVeeeUVBQcHy9/fX1OnTtUTTzyh0aNHa/78+T96HR78PEOGDFF8fLy+/PJLWZal4uJiJSYmyrIs9enTxw4Uy7JUXl5OiODizJ492/515SlaknTNNdeYmE6zxrYwz+PxKD09XZGRkZo6dapuuukmnT17VsuWLbO/WI1Pietez549dfToUc2ePVsbNmxQTEyMbrrpJr3++usqLCzUmjVrNHHiRLVu3VqHDx/W5MmTTU+5SevXr5+cTqc+/fRT+6OZL774QgsXLtQ///lPTZkypclexOz7OEaklkVGRv7oed+WZdm7o5999lnt37+fUxjrCNui4YiLi1NgYKD69u173mMOSktLFRERIbfbbWB2zU9eXp7ef/99OZ1O+0Jac+bM0SOPPKJTp06poKBAGzZsUEREhF566aUm+UVrDcXQoUP11ltvqUWLFmrbtq29p3bPnj267bbbFBERUeVSA00RIVLLJk2aJH9/f/n7+9f4j9rZs2dVXl6u8vJyvfDCC/L396/nWTYPbIvGZf/+/XwDsiEVFRV66623NH78+CrL33nnHd100032dV9Q+yr/Q2RZlnbt2qXu3bvbYx6PR7t377bPLGuqCBEAAGAMRyEBAABjCBEAAGAMIQIAAIwhRAAAgDGECAAAMIYQAQAAxhAiAADAGEIEAAAY8/8AXSjM1dsxAF8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.新闻类别.value_counts().plot(kind='bar')\n", + "plt.title(\"新闻类别统计\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Building prefix dict from the default dictionary ...\n", + "Dumping model to file cache C:\\Users\\wrh\\Temp\\jieba.cache\n", + "Loading model cost 0.474 seconds.\n", + "Prefix dict has been built successfully.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数据预处理完毕!\n" + ] + } + ], + "source": [ + "def remove_punctuation(line):\n", + " line = str(line)\n", + " if line.strip()=='':\n", + " return ''\n", + " rule = re.compile(u\"[^a-zA-Z0-9\\u4E00-\\u9FA5]\")\n", + " line = rule.sub('',line)\n", + " return line\n", + " \n", + "def stopwordslist(filepath): \n", + " stopwords = [line.strip() for line in open(filepath, 'r', encoding=\"gbk\").readlines()] \n", + " return stopwords \n", + " \n", + "#加载停用词\n", + "stopwords = stopwordslist(\"./stopword.txt\")\n", + "#删除除字母,数字,汉字以外的所有符号\n", + "df['clean_review'] = df['新闻内容'].apply(remove_punctuation)\n", + "#分词,并过滤停用词\n", + "\n", + "df['cut_review'] = df['clean_review'].apply(lambda x: \" \".join([w for w in list(jb.cut(x)) if w not in stopwords]))\n", + "print(\"数据预处理完毕!\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "模型训练完毕!\n" + ] + } + ], + "source": [ + "#转词向量\n", + "tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2))\n", + "features = tfidf.fit_transform(df.cut_review)\n", + "labels = df.新闻类别\n", + "#划分训练集\n", + "x_train,x_test,y_train,y_test=train_test_split(features,labels,test_size=0.2,random_state=0)\n", + "model=MultinomialNB().fit(x_train,y_train)\n", + "y_pred=model.predict(x_test)\n", + "print(\"模型训练完毕!\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ODjAy8vrPx3LPqBERERElK1YASUiIiKSEBl02AdUZ8PrM4cVUCIiIiLKVqyAEhEREUmIVEbB6xIroERERESUrVgBJSIiIpISibwJSZdYASUiIiKibMUKKBEREZGU6LAPqMA+oERERESkj1gBJSIiIpIQXY6C1938opnDCigRERERZStWQImIiIgkhBVQIiIiIqIsxgooERERkZRwHlAiIiIioqzFCigRERGRhLAPKBERERFRFmMFlIiIiEhC9KECygT0C1f+/A15LCzFDoM+49J/p9gh0BcClrcXOwSiHOO9UiV2CPSZ2BjeDylgAkpEREQkIfpQAWUfUCIiIiLKVqyAEhEREUkIK6BERERERFmMFVAiIiIiKeGbkIiIiIiIshYroEREREQSwj6gRERERERZjBVQIiIiIglhBZSIiIiIKIuxAkpEREQkIayAEhERERFlMVZAiYiIiKSE84ASEREREWUtVkCJiIiIJIR9QImIiIiIshgroEREREQSwgooEREREVEWYwWUiIiISEJk0GEFVCLD4FkBJSIiIqJsxQooERERkYSwDygRERERURZjBZSIiIhISvgmJCIiIiKirMUKKBEREZGEsA8oEREREVEWYwWUiIiISEJYASUiIiIiymKsgBIRERFJiEz2adHVuaWAFVAiIiIiylasgBIRERFJyKcKqK76gOrktJnGCigRERERZStWQImIiIikRId9QPkmJCIiIiLSS6yAEhEREUkI5wElIiIiIspirIASERERSQjnASUiIiIiymKsgBIRERFJiFwug1yum1KloKPzZhYroERERESUrZiA5gIfP0SgQbUyeBEe9tXtfTq3xr5dW7I5Kv3VuU5RRG7pmm7pXKcoxrQuh8fLf0T42g7YPrIebPMYix2u3tq2eQMqly2GogWs8ZNXI4SFPhM7JCJJifwYgaY1y+HlPz9bDuzeivKOFumWA7u3ihxp7pPWB1RXixQwAc3hPn6IwIAe7TTfIL506M+duHTuVDZHpd/2XgmFU//dmqXssH2IUCYi7H0sfvRwgtfMk6g76QgUchl+71pJ7HD1UmhIMBbN9cHGbXtx4cYDOLkUxYiB/cQOiwA88vdHLY+qKJDXBhN+HQtBEMQOSS9FfozAkF7ttX62eLXpgMv+4Zrl5I0g2NjaoXK1miJGSjkVE9AcbtTAnmjRtsNXt0VF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jIGHhwd69eoFR0dHnDp1CvXq1cPcuXPRpEmTTMXBBJSIiIiI0ilcuLDWep48eWBvbw97e3ssWrQIzZs3R548eWBtba2ZoD6jmIASERERSYhcJoNcRyXQ/+W8nyeZAwYMQJMmTRAUFIQ6deogT548mToXE1AiIiIiyjQXFxet6ZgygwkoERERkYRkxyh4sXEieiIiIiLKVqyAEhEREUmJDkfBgxVQIiIiItJHrIASERERSYgcMsh1VKrU1XkziwnoF9wKW/3rq6mI9J3/nOZih0CUY1iZGYodAn1GnsL7IQVMQImIiIgkRCpvQtIl9gElIiIiomzFCigRERGRhHAeUCIiIiKiLMYKKBEREZGESPVd8FmJFVAiIiIiylasgBIRERFJCEfBExERERFlMVZAiYiIiCREDh32AZXIm5BYASUiIiKibMUKKBEREZGEsA8oEREREVEWYwWUiIiISELk0F2FUCqVR6nEQURERER6ghVQIiIiIgmRyWSQ6aizpq7Om1msgBIRERFRtmIFlIiIiEhCZP8sujq3FLACSkRERETZihVQIiIiIgmRy3T4JiT2ASUiIiIifcQKKBEREZHESKNOqTusgBIRERFRtmIFlIiIiEhC+C54IiIiIqIsxgooERERkYTwTUhERERERFmMFVAiIiIiCZFDdxVCqVQepRIHEREREekJVkCJiIiIJIR9QImIiIiIshgroEREREQSIoPu3oQkjfonK6BERERElM1YASUiIiKSEPYBJSIiIiLKYqyAEhEREUkI5wElIiIiIspirIASERERSQj7gBIRERERZTFWQImIiIgkhPOAEhERERFlMSaguVS71s2xfcsmscOgL/C+SIffXwdRvnRxWJsboWa1SggKChQ7JCJJmjBmBOzzGGqWqm6lxQ4p15PJdLtIARPQXGj3zu04feqE2GHQF3hfpONZcDAG/dIH02f64MmzcBQvUQJDBvwidlgE4JG/P2p5VEWBvDaY8OtYCIIgdkh6797d29jx5yEEv3iP4BfvcebyTbFDolyACWguE/nxI6ZMGIsSJUuJHQp9hvdFWh4/DsS0GT74sV0H5MufH337DcCD+3fFDkvvqVQq/NS2JSpVqozL124hKDAAWzb5ih2WXktJSUFQYABq1KoDK2trWFlbw8LCQuywcj05ZDpdpICDkHKZyRPGwqtVGyQmJIgdCn2G90VamjVvobX+9OljFCteQqRoKM3xY0ehjI7GnPkLYWZmhukzfDBi2GD06NVb7ND0VsCjh1Cr1fihZhW8fvUSNWvXxcJlq1DYsYjYoVEOxwpoLnLx/FmcP3cG02fOFjsU+gzvi7QlJSVh2eJF6NOPj+DF9vDBfVSr7gEzMzMAQHk3NwQFBogclX57HBSI4iVKYuXajTh/7Q4UBgYYNXSg2GHleuwDmg0SExNx5coV/P777/jxxx+Rmpqqtb1Ro0ZYt26dVtuGDRvQsWPHdOfq168fpk2bpstwJSsxMREjhw3CgiXL+XhEQnhfpO/336bBzNwcPXv3FTsUvadUKuHs7KJZl8lkUCgUiIyMFDEq/da+YxecvngdVavXQLHiJTBv0TKcO3MKMUql2KFRDidaAqpWq9GgQQMULFgQnp6eCA8PR9++fZGcnIyZM2fCz88PAGBsbAwDA+2eAsbGxjA2Nk53ThMTE5iYmGRL/FIzb/ZMVKxUBU2aeokdCn2G90Xazp89g7VrVmLDpq0wNDQUOxy9Z2BgAKMvvrcbm5ggPj5epIjoS/Z580GtVuPNm9dih5KryXT8RwpE6wMql8uxe/du2NraombNmujUqRPq168PAKhfvz5atWqFM2fOaB2TmpqK1NRUyOVyyOVyqFQq7N69G0uWLIGBgQHCwsJgZGSEAwcOQK1Wo1KlSli9erUIV5f99u7eiQ8R7+FU0A4AkBAfjwP79uD27ZtYsHi5yNHpL94X6QoNCUHvnl2xYPEylHYtI3Y4BMDG1hYB/v5abbExMTAyMhIpIvKe9CvKV3BHuw6dAQA3r1+DXC5HocKOIkdGOZ1oCahardb080mT9vi9du3amDZtGpYuXaq1/fr16+jQoQNUKhUSEhJw4sQJnD59Gps2bYJCocCsWbPg4OCA3r17Q61W61VF48jJc0hNSdGsT5k4DlWqVkeXbj1FjIp4X6QpISEB7X9sBa8WrdCydVvExsYCAMzNzSXznmR9VKVKVWxcv1azHhoSApVKBVtbWxGj0m9ly7th1m/eyJc3P1LVqRg/ZgQ6dumW7uc3ZS1d9tWUyrc40RLQp0+fwt3dHaampoiKikLr1q2hUCiwZcsWvHv3DkOGDAEAtGrVSnNMzZo18eLFC+zcuRPHjh2Dr68v1Go1UlJSYGhoCBsbG+TNmxelS//7JLkqlQoqlUqzrszh/VkKFSqstW5ungd2dvaws7cXKSICeF+k6vSpEwgKDEBQYAB8N/x/H3P/oGA4OTuLF5ieq12nLmKUSmz23YgevXpj7mwfNGjoCYVCIXZoeqtDp654HBiAXt06QKFQoH3HLpg0babYYVEuIBNEnuU3LCwMRYsWxcGDB2Fvbw9XV1d4enqiZMmS8PX1Rdu2bdGuXTv06tVLc8zOnTuxevVqmJubY8CAAejRoweMjIyQN29eAJ+Sy5CQELx58wb23/hBP23aNEyfPj19PK8/wtLSUifXSpRbGCgk8is0aTFQiD6u9H/m99ch9OzWGaamppDL5Th+6hxcy+TsLhJxqpR/34myTYxSCZeCdoiOjpbcz3ulUgkrKyvsvRYM8zy6GbgaFxuDdh7FRL9+0b9bLVu2DGq1Gk+ePEHbtm1x8+ZNnDx5En///Tf27t2r2S81NRUqlQp+fn5YtmwZwsLC0KdPH7Ro0QKbNm1CnTp14O/vD39/f4wcORINGzb8ZvIJABMmTEB0dLRmCQ8Pz47LJSKi72jRshUePQ7G2g2bcPdhYI5PPono60StgAYHB6NRo0bIkycPli5dCpVKhejoaNStWxcPHjzA48ePsWTJEqhUKsjlcvTt2xc7duyAh4cH1Go1fH19AXyax8/JyQkPHjyAvb09ypYti3nz5sHLK+Mjj9N+62AFlOjfsQIqTbmhApobsQIqLTmhAvrndd1WQH+qrscV0MTERHTt2hXjxo3TdGauUKECBg4ciNq1a2Pz5s1ISEiApaUlfv31V4SFhWHSpEnw9/dH48aNtc5lZGSE/v37Y+bMmVi+fDny5cuXqeSTiIiIiLKPaIOQ/v77b+TLlw+//PKLppLp4OCAx48faz06v3DhAvLkyQPg09RN3zJ27FgULVoUSUlJuHuX73QmIiKinEkfRsGLVgEtV64cDh06BLlcDkEQkNYT4Mt+m6mpqVCr1VptMTExWlOl3Lx5E507d4alpSUcHR0xYcIEBAcH6/4iiIiIiCjTJNFhKCkpCYmJiV/dlpCQgKSkJM169+7dMWzYMLi7u+Pq1asoXbo0WrRogRo1auDBgwe4desWihUrhgoVKqB27dqIjo7OrssgIiIi+p/pw5uQRJ+GKbPu3bsHMzMzlCxZEoIg4PDhw2jUqFG6V3NGRkbi0qVLaNmyZYbOy0FIRBnHQUjSxEFI0sRBSNKSEwYh7b/xTKeDkNpWKyr69YvWB/S/cnd31/xdJpOhRYsWX93PxsYmw8knERERkVTIZZ8WXZ1bCvjrMhERERFlqxxXASUiIiLKzXTZV1MqfUBZASUiIiKibMUKKBEREZGEcB5QIiIiIqIsxgooERERkYTIoLu+mhIpgLICSkRERETZixVQIiIiIgnhPKBERERERFmMFVAiIiIiCeE8oEREREREWYwVUCIiIiIJ4TygRERERERZjBVQIiIiIgmRQXfzdUqkAMoKKBERERFlL1ZAiYiIiCREDhnkOuqsKZdIDZQVUCIiIiLKVqyAEhEREUkI+4ASEREREWUxVkCJiIiIpEQPSqCsgBIRERFRtmIFlIiIiEhC+C54IiIiIqIsxgooERERkZTo8F3wEimAsgJKRERERNmLFVAiIiIiCdGDQfBMQImIiIgkRQ8yUD6CJyIiIqJsxQooERERkYRwGiYiIiIioizGCigRERGRhMh0OA2TzqZ3yiRWQImIiIjoqw4ePIiiRYvCwMAA7u7uCAwMBAD4+/ujatWqsLGxwdixYyEIQqbOywSUiIiISEJkOl4yKjg4GL1798bs2bPx8uVLlCxZEn379oVKpULLli1RuXJl3Lp1CwEBAfD19c3UNTIBJSIiIqJ0AgMDMXv2bHTo0AH58+fHwIEDcffuXRw9ehTR0dFYuHAhihUrBh8fH6xfvz5T52YfUCIiIiIpyYZ5QJVKpVazsbExjI2NtdpatGihtf748WOUKFEC9+/fh4eHB8zMzAAAbm5uCAgIyFQYrIASERER6RlHR0dYWVlpllmzZn13/6SkJCxYsAADBgyAUqmEi4uLZptMJoNCoUBkZGSGP58VUCIiIiIJyY55QMPDw2Fpaalp/7L6+SVvb2+Ym5ujb9++mDx5crr9TUxMEB8fDxsbmwzFwQSUiIiISM9YWlpqJaDfc+bMGaxYsQLXrl2DoaEhbG1t4e/vr7VPTEwMjIyMMvz5fARPREREJCFp84DqasmMkJAQdO7cGStWrECZMmUAAFWrVsXVq1e19lGpVLC1tc3weZmAEhEREVE6CQkJaNGiBVq3bo22bdsiNjYWsbGxqFOnDpRKJTZu3AgA8PHxgaenJxQKRYbPzUfwRERERBKSDYPgM+TEiRMICAhAQEAA1q5dq2kPCQnBunXr0LlzZ4wdOxZyuRznzp3LVBxMQImIiIgondatW3/zDUfOzs4IDg7G7du34eHhATs7u0ydmwnoF3T5/lX6bwwV7CkiNQnJqWKHQF9hwH8rklS42QyxQ6DPCCkqsUP4d1Ipgf4LBwcHeHl5/adj+d2KiIiIiLIVK6BEREREEpId84CKjRVQIiIiIspWrIASERERSYgux6NIZZwLK6BERERElK1YASUiIiKSkBwyCP5/wgooEREREWUrVkCJiIiIpEQPSqCsgBIRERFRtmIFlIiIiEhCOA8oEREREVEWYwWUiIiISEI4DygRERERURZjBZSIiIhIQvRgEDwroERERESUvVgBJSIiIpISPSiBsgJKRERERNmKFVAiIiIiCeE8oEREREREWYwVUCIiIiIJ4TygRERERERZjBVQIiIiIgnRg0HwrIASERERUfZiBZSIiIhISvSgBMoKKBERERFlK1ZAiYiIiCSE84ASEREREWUxVkCJiIiIpESH84BKpADKCigRERERZS9WQImIiIgkRA8GwbMCSkRERETZixVQIiIiIinRgxIoK6BERERElK1YASUiIiKSEM4DSkRERESUxVgBJSIiIpIQmQ7nAdXZ/KKZxAooEREREWUrVkCJiIiIJEQPBsGzAkpERERE2YsJaC4UFRWFWzeuIyoyUuxQiIiIKLNkOl4kgAloLnNg3164uRbDsMH9UaaEEw7s2yt2SAQgIiICZUoWRVhoqNih0D8mjBkB+zyGmqWqW2mxQyKSjF5elfB07yh8ODEJx5f0gnMBGwBA92buuOU7CK8Pj8emqe1gZ2UmcqSUUzEBzUWio6MxesQQHDlxFldu3sO8RcswZeKvYoel9yIiItCubUuEhYWKHQp95t7d29jx5yEEv3iP4BfvcebyTbFDIgCP/P1Ry6MqCuS1wYRfx0IQBLFD0jsuBW0wsVc9tJ+4A+7dluPZq0isndgGP1QuigXDm2Pc8mOo1nsVLMyNsWtmJ7HDzZVkOv4jBUxAc5GYGCVmzV2IcuXdAAAV3Csi8uMHkaOint06o0PHzmKHQZ9JSUlBUGAAatSqAytra1hZW8PCwkLssPSeSqXCT21bolKlyrh87RaCAgOwZZOv2GHpHfcSBXDj0Qvce/Ia4e+isfnwHRQrZIuuTSpg69F7OHPrGcLfRWPiyhOoVcEJNhamYodMORAT0FykcGFHdOjUBQCQnJyMlcuWwKtVG3GDIqxY9QcGDRkmdhj0mYBHD6FWq/FDzSoobG+BDm288CL8udhh6b3jx45CGR2NOfMXomixYpg+wwe+G9eLHZbeCQx9j3qVXOBW3AGW5sb4pW01nL71DHbWZgh/G63ZL1Wt1vovZR0Z/n8u0CxfxL64f0giAQ0MDEz3mOXBgweIiYn512NTUlJQv359HDt2TFfh5TgPH9xHSZdCOH3yOObMXyx2OHrP2cVF7BDoC4+DAlG8REmsXLsR56/dgcLAAKOGDhQ7LL338MF9VKvuATOzT/0Ky7u5ISgwQOSo9E9Q2HvsPx+A6xsG4u3RiahetjAmrDiOe09eo1nNkpD9M5N592YVcSvwBZRxKpEjppxI9AQ0OTkZNWrUwJMnT7Tap02bhmnTpv3r8QYGBnB2dsbx48d1FGHOU668G/YfOoqixYtj2KBfxA6HSHLad+yC0xevo2r1GihWvATmLVqGc2dOIUapFDs0vaZUKuHs/P+/sMlkMigUCkRyRo9sVcW1ELxqlkLd/n8gfzMf7D7ljwNzu2HJziuQy2S4uq4/zq3si7Hd6mDln9fFDjdX0oNB8OImoA8fPsT06dNRoEAB3Lx5ExcvXoT6n1L+jBkz8OLFC01lNK3dw8MDBgYGWsvWrVuxbNmydO3z5s0T7drEJJPJ4F6pMlat3Yi/Du5HVFSU2CERSZp93nxQq9V48+a12KHoNQMDAxgZG2u1GZuYID4+XqSI9FOHhuWx54w/bga+hDJOhWnrTsOlkA2KOFjDc+gGdJm6Gw+C3yAo7D12nXoodriUQ4magPr5+eHmzZvo2bMnLly4gCVLlmDmzJkoVKgQvLy8cP36dbi4uKBIkSIoU6bMp4Dlcqxbtw4pKSl48OABUlJSNEtCQoLm77Vr14aBgX696OnSxfOYMnGcZt3I0AgymQxyueiFbiJJ8Z70K/bu3qFZv3n9GuRyOQoVdhQxKrKxtUXE+/dabbExMTAyMhIpIv0kl8uQ19pcs25hZgwzY0Mo5J9qZ68jYtC6riumrjkFtZqzFOiCzvp/6vAd85klamZiYmICNzc3PHv2DF26fBo8M3XqVLx8+RKhoaGa5fnz5wgKCgIANGzYEMWKFcOxY8dQsWJFrFixAsCnvqBubm74+eefER4ejj59+qBatWqiXZsYihcviU0b1sF3/Vq8eBGO36ZNRoOGjWBpaSl2aESSUra8G2b95o0LZ8/g7OmTGDNiMDp26abpe0jiqFKlKq5fv6pZDw0JgUqlgq2trYhR6Z/L98PQuq4rhravgY6e5bHbpxPefozFw+C3AIBBP1XHk+cR+OtSkMiRUk4magIqk8lgZWUFf39/PHr0SNN+6NAhLF68WLOEhIRots2YMQP37t1Dq1atMHHiRAwePBjAp0c327Ztw71791C6dGk8f/4c1atX/+Znq1QqKJVKrSWncyhQAJu27cLqlctQo7IbEuLjsXqdr9hhEUlOh05d0ean9ujVrQN+6d0NDT0bY/aCpWKHpfdq16mLGKUSm303AgDmzvZBg4aeUCgUIkemX/afD8D8bZcwpL0H/pjQBlZ5TNBx8k6kpKphnccEIzvXwvgVHHehW7m/F6hMEGmW35SUFCxbtgxxcXHo1KkTgoODsXbtWuzduxft2rWDkZERypQpg82bN2PlypXw9PREcnIyGjVqhOvXr2PDhg3o3Dn93IopKSnw9vbG7NmzMX36dEyePPmrnz9t2jRMnz49XfvzNx9ZMZQYQwW7EEhNQnKq2CHQV5gb5/xuR35/HULPbp1hamoKuVyO46fOwfWfLlg5lU0Db7FDoM8IKSqors5BdHS05H7eK5VKWFlZISD0PSx0FFuMUokyznlFv37Rvlvt2bMHs2fPBgDs3LkTcXFxqFy5MgDA2NgY7dq1Q9u2bXHp0iVNX05DQ0O0bdsWkydPRo0aNZCampruN2NBEDBy5EjUqlULNWvW/ObnT5gwAaNGjdKsK5VKODqy/xcRkZhatGyFR4+DcffObVSr7gE7OzuxQyLKdrrsqymVPqCiJaCdO3dGeHg4oqOj0axZM6SkpGD58uUAPlUxDQ0Nv3rc8OHD0a5dO7Ro0QJGRkaQy+WIjY2FoaEhjI2NNYORrl+/Dmtr629+vrGxMYy/GG1JRETic3BwQLPmXmKHQUQ6JOqzzdjYWJiYmKBv375aUwVFRkbCysrqm8ft3LkTiYmJUCqViIqKQu3atTFr1ixERUUhNjYWycnJqFSpUjZcAREREVHWyv09QEWsgAJASEgI2rdvDycnJ3z48Omd5ampqbh79y5KlSqltW9YWBicnJwA4F+nV+K0Q0RERETSJVqmJggCzp49Czc3N3Ts2BHW1taQy+XYuHEjypUrh3z58gH4NFJeqVSie/fuOHToUKY/Q8131BIREVEOwnlAdWjfvn3Ily8fnJ2dNSPa8+fPjzFjxmDu3Lma/Tw9PTF8+HAIgoDIyEgYGhrC0tIS1tbWmuXSpUuYMGGCVpuFhQUMDQ1x4cIFsS6RiIiIiL5CtGmY4uLi8PTpU7i7u0OlUkGtVsPU1BR37tz5Zv/NxMREpKSkwNTU9F/nhUsbjGRsbJyht2ikTX3AaZikh9MwSQ+nYZKm3DANU27EaZikJSdMw/TkeYROp2EqWcRe9OsX7buVubk53N3dAUBrNPr3Bg+ZmJhk+PwGBgawsLD4z/ERERERkW7w12UiIiIiKdHlcHV97wNKRERERPqJFVAiIiIiCdGDAigroERERESUvVgBJSIiIpIQfXgXPCugRERERJStWAElIiIikhDZP390dW4pYAWUiIiIiLIVK6BEREREUqIHw+BZASUiIiKibMUKKBEREZGE6EEBlBVQIiIiIsperIASERERSQjnASUiIiIiymKsgBIRERFJiu7mAZVKL1BWQImIiIgoW7ECSkRERCQh7ANKRERERJTFmIASERERUbZiAkpERERE2Yp9QImIiIgkhH1AiYiIiIiyGCugRERERBIi0+E8oLqbXzRzWAElIiIiomzFCigRERGRhLAPKBERERFRFmMFlIiIiEhCZNDdG9slUgBlBZSIiIiIshcroERERERSogclUFZAiYiIiChbsQJKREREJCGcB5SIiIiIKIuxAkpEREQkIZwHlIiIiIgoi7ECSkRERCQhejAInhVQIiIiIsperIASERERSYkelEBZASUiIiKibMUElIiIiEhCZDr+kxn+/v6oWrUqbGxsMHbsWAiCkCXXyASUiIiIiNJRqVRo2bIlKleujFu3biEgIAC+vr5Zcm4moEREREQSkjYPqK6WjDp69Ciio6OxcOFCFCtWDD4+Pli/fn2WXCMHIf0jraQcE6MUORL6kqGCvydJTWJyqtgh0FekGvNbuhQJKSqxQ6DPpN2PrHqUrAtKpe5ykbRzf/kZxsbGMDY21mq7f/8+PDw8YGZmBgBwc3NDQEBAlsTB71b/iImJAQCULeEsbiBERESkczExMbCyshI7DC1GRkZwcHBACRdHnX5Onjx54Oio/Rne3t6YNm2aVptSqYSLi4tmXSaTQaFQIDIyEjY2Nv9TDExA/1GwYEGEh4fDwsICMqm8p+o/UiqVcHR0RHh4OCwtLcUOh8B7IlW8L9LE+yJNueW+CIKAmJgYFCxYUOxQ0jExMUFISAiSkpJ0+jmCIKTLdb6sfgKAgYFBunYTExPEx8czAc0qcrkchQsXFjuMLGVpaZmjv0nkRrwn0sT7Ik28L9KUG+6L1CqfnzMxMYGJiYnYYQAAbG1t4e/vr9UWExMDIyOj//nc7FxHREREROlUrVoVV69e1ayHhIRApVLB1tb2fz43E1AiIiIiSqdu3bpQKpXYuHEjAMDHxweenp5QKBT/87n5CD4XMjY2hre391f7c5A4eE+kifdFmnhfpIn3Rf8YGBhg3bp16Ny5M8aOHQu5XI5z585lybllgpTnISAiIiIiUb158wa3b9+Gh4cH7OzssuScTECJiIiIKFuxDygRERERZSsmoERERESUrZiAEhEREVG2YgKqJxITE8UOgUjSVCoV3rx5I3YYRER6gQmoHggODsa2bdsQHh4udij0j9TUVACfkh4SX0xMDNzd3XHmzBmxQ6GvSElJAQCdv56QMk6tVosdAuVwTEBzub///huXLl3Cu3fvkDdvXrHDIQDJyclQKBQICAjA4MGD8eDBA7FD0msxMTFo0qQJmjdvji5dumjameyILyUlBUqlEgYGBnj69ClGjhyJV69eiR2W3lOr1ZDLP6UPV69excuXL0WOiHIiJqC5lCAICA0NxaNHj3D9+nWo1WrJvFtWX6nVaqjVahgaGuL+/fuoU6cOtm7divnz57M6LZKYmBh4enqiTp06WLBggaZ9w4YNaNSoEZKTk0WMTr8lJydj/Pjx2L59O+7fv49+/fohX758mlcAcgZBcXyefI4dOxaenp7w9fVFRESEyJFRTsMENBdKTEzEvn37cPPmTfz111/4888/sX79evTt2xcJCQn8xi2C6OhojBkzBuHh4Xj48CEaN26MxYsXIzExEY8ePcKUKVOYhGazxMRENGvWDHXr1sWcOXM07fv27cPkyZMxZswYGBoaAmCyIwa5XA5HR0ecOXMGnTp1Qt26deHt7Q1DQ0NERERAJpPxMXA2+/Dhg6b70JAhQ7Bz506MHDkS8fHxSEhIEDk6ymk4EX0u5OPjgw0bNsDV1RW3bt3CyZMn8fr1azRp0gT+/v4oWbIkEhMTERkZCUdHR7HD1Qvh4eHo1KkTihcvjsOHD8Pb2xtDhw7VbPvxxx9RunRp/P777yhSpIjI0eZ+SUlJCAwMxK1bt9CnTx9N+5EjR9C+fXucOXMG1atXx5UrV1CzZk3NdkEQIJPJxAhZryQlJcHIyAhPnz5Fy5YtYWFhgWHDhqF169bw9PREQkIC7t+/r6nEke7du3cPY8eORdOmTXH79m1cvnwZgYGBMDMzw549eyAIAt69e4cuXbpoqtRE38MENBcRBAHh4eF4/PgxJk2aBH9/f/j4+KB27doYN24cBg8ejCdPnuDevXtwc3NDfHw8Ro4cCXt7e7FDz9XSfpgeO3YMbdu2Rc2aNXH69GmtfV68eIGWLVuiQoUKmDFjBn8x0KGYmBiUL18etWvXxtatWzXtBw4cQPfu3eHk5ITRo0ejXLly6NKlC8qWLYvSpUtjyJAhKFy4sIiR536pqalQKBQAPvVf79q1K1q0aIH8+fPj2rVrePjwIYoVKwYAGDlyJKpXr671SJh0a8eOHRg+fDisrKxw69YtLF68GGfOnMHly5dhYWGBqlWrws/PD0ZGRmKHSjkAE9BcJDg4GPfv38fRo0dx5MgRNGnSBOHh4Xj16hW8vb3x5s0b/P777zA0NESJEiXQs2dP9OzZkxUdHUr7gXrv3j00bdoU/fr1w/bt2/HTTz8hX758ePfunebR+5gxYzBo0CCUKlUKM2bMgJOTk8jR5z5KpRINGjSAo6MjQkJCMGrUKPTo0QN79uzBgAEDsH79ehgaGmLdunUoU6YM2rZti7179+LUqVMoVaoUVqxYAWtra7EvI1dKSUnBuHHjUKJECQwcOBAnT55EWFgY+vbti9TUVFSrVg2dOnXC2LFj8eOPP6JEiRJaXSdINz5P8EePHo39+/fj+vXryJs3L4YOHYqSJUuiZMmSqFq1KoKCglCiRAkOeKUMMRA7AMoagYGBuH37Nm7cuIH9+/fj2LFjyJcvH2rXro1ChQrhwoULOHToEMaOHQtnZ2cMHz4cly9fRosWLWBnZ8ckVEcUCgX8/f3RpEkTTJ06FYMHD0bDhg3RsGFDNG/eHKVLl0atWrXw5s0bVK5cGQcPHkSDBg2waNEiLF68WOzwc53mzZsjIiICt27dwuzZs3H58mVUqVIFy5Ytw59//on69evj4sWLaN26Nfbs2QNXV1fMnj0bwKd/Y0w+dUepVKJw4cK4ceMGHB0d4efnh0mTJiE2Nhb16tXDx48f0bJlSwDAL7/8ggMHDmiO3b9/PywtLdGwYUORos+dPk8+hw4din379uHBgwews7MDACxbtkyzb1BQEOrVq4f9+/fDy8tL8zMlISEBpqam2R88SR4T0BwuNTUVSUlJCA4ORlBQEAoWLAgvLy/cuHEDu3btwpo1a7B8+XJs3LgR7du3R+nSpXH37l2o1WpER0cjJCSEj+CzmEqlQnBwMMqUKYO3b9+iZcuWaNKkCQYPHgwAKFWqFCpVqoTJkyejevXqmuNSU1Ph4OCAunXr4vr164iPj4eZmZlYl5GrqFQqREdHY8WKFahfvz6WLl0KT09PdOrUCR06dMCmTZvg4uKCrVu34tixY5gzZw7kcjm2bt2Kt2/fYvTo0XB1dQXAfqC6YmtriwEDBsDPzw+jRo2CTCbD6tWrcenSJc1j+CZNmqB79+54+vQp/P39MWbMGLx9+xZ79+7FrFmzUK9ePRgY8MdaVklLPidMmIBdu3bh9u3bGDNmDCpUqIARI0YgOTkZhoaGCAsLQ+PGjTF+/Hi0aNFCc/ySJUsQHR2N8ePH87E8pSdQjqVUKoVOnToJCxYsEF6/fi0IgiC8fftWGDNmjFCmTBlh586dwtKlSwVnZ2ehQYMGQu3atYXOnTsLRYoUES5duiRy9LlTTEyMUKdOHaF9+/bC9evXhaioKOHHH38U+vbtKxw8eFCzX+PGjYXFixcLgiAIycnJmva7d+8K9erVE27cuJHtsedWMTExQu3atYU2bdoIL168EO7fvy/Y2NgIa9asEVauXCk4OTkJ7dq1E6ZOnSq8efNGyJ8/v3Du3DkhISFB+P333wUvLy8hNDRU7MvIlZKSkoQXL15otTVq1Ehwc3MTunfvLrRv314YOXKkZtuVK1eE/fv3C+3btxdkMpkwfvx4YdOmTUJQUFB2h643Ll68KCgUCmHlypWCIAhCmTJlhC1btmi2h4eHC46OjsLYsWO1jlu9erVgZGQknD17NjvDpRyEPbdzKKVSiapVq+LixYvw9/fH06dPAQD58uXDkCFDcPDgQYSFhWHx4sXo3bs3fvvtNwDAwYMHMWDAANSqVUszhYnAbsBZIjY2Fq1atUKxYsVQokQJ7NixA2/fvsWaNWsgk8mwY8cO/PXXX1Cr1UhMTNRMqP15xcbd3R1//vknqlatKtZl5Cpp96R48eJwdXXFvHnzYGdnh3PnzuHXX3+FQqHA8ePH0b9/f6xcuRLLly9H9+7dcf36dZiYmODly5eIiIiAhYWF2JeS66SmpmLQoEFYunQpQkNDAXzqx16uXDmcP38eXbp0wdOnTxEfH685pkaNGmjTpg3Kly+PPn36YNasWejRowdKlSol0lXkXmlz4NauXRtTpkzBzZs3ceHCBbx9+1bzZCY0NBS1atVCZGQkypcvjw8fPgAAVq5ciSlTpuDatWuoX7++WJdAEscENAdSKpWoXr06mjVrhhcvXqBDhw5a34CdnJwQHx+PuXPnomvXrqhWrRoOHz6MFy9eoH///jh79izCw8M1j1f4OPF/Fxsbi+bNm6NTp07YuHEjqlatCrVajeXLl+Pjx4+YNWsWLCwssH37duzbtw+tWrVCxYoVoVarNb8ApP03rX8V/W++vCfVqlWDIAiYPXs27OzscP78eYwfPx779++Hp6cn2rZti/DwcLi4uGDz5s0AgPr162Pr1q2cVkYHFAoFvLy84O/vjx07diAkJATFihXDwoULYW1tDVtbW8jlcrx8+RL79+/XOjY4OBgVK1YEwFdCZrW0N4AZGhrixo0b6NOnD7y9vTFo0CCULFkSMpkMpUqVwt9//43atWtj8ODBmDNnDv744w8cPXoUc+bMwbRp03D8+HHNPSL6GiagOUxMTAyqVauG+vXrY9GiRQA+/bb55STmTk5OGDVqFBo0aIDTp09j9+7d2Lx5M37++WecOnUKMTExYoSfK6UlOl26dEGLFi3g6OiIQoUKoU+fPpDJZFi2bBkiIiLg4+ODPHny4NixYzA3N0enTp0gl8s1P0D5i0DW+d49kcvlmDVrliYJnTt3Lvr37w9bW1vUr18fAwYMwMSJEwEA7du3R/HixUW+mtzp48ePaNKkCYYOHYpr165h7969CAkJ0WyPi4tDSkoK6tevj3379mHHjh0AAD8/P+zevRtNmzYFAE7BlIWuX7+O4cOHY8eOHQgODkaPHj1Qvnx5AECVKlVw4cIF5M2bF2/fvkX9+vXRq1cvjBs3DoMGDUKXLl0wYsQIzJs3DydOnGDySf+K/3JzkJiYGDRo0AAlS5bEqlWrAACtWrXCrVu3ND8k4+LiAABGRkYoUqQI7t69i40bN2LBggWoU6cOYmJisGbNGpQpU0a068hNPq+ytW/fHs2aNcOIESNQtWpVuLm5YciQIZDJZFixYgU+fvwIHx8fyGQyXLhwAUePHgUAzbyHlDUyck8+T0IvXryIP//8EyqVCt26dYNcLte8E57VtaylUqkQGRmJsLAw/Pbbb3BxccG+fftgb2+P06dPY+vWrYiJicH79+9x48YNTJgwASNGjECjRo1w+PBhTSV07ty5KFq0qMhXk/uYmZmhatWqOHDgAOrVq4dJkyZhxIgRUKlUAIAOHTpg9erVMDc3h4+PD2bOnKl5cpP2qufz58/D3d1drEugnETUHqiUYdHR0UKZMmUET09PYdGiRcLHjx+FDh06CLVq1dLsM3XqVGHZsmWCSqUSBEEQ4uLiBEEQhKdPnwqCIAhqtTr7A8/F0gYcrV69Wvjw4YPg6uoqdO3aVbPdzc1NCAgIEB4+fCgMGTJEGDFihBAQECBEREQIAwcOFJo2bSocP35cxCvIfTJ7T4YPHy6EhoYKDx8+FGxsbIQxY8aIGH3ulpqaKowbN07w9vYW1Gq18O7dO+H69evC7du3BUEQhBs3bggtWrQQJk6cKBQpUkT4448/tI5t27atMG7cOLHCz/VSU1MFQRCEhw8fCsWLFxcOHTokpKamCsuWLRO2bNkifPjw4ZvHLl++XMibN69w586d7AqXcgFWQHOAmJgYVK9eHQ0bNsT27duxceNGuLu7IywsDGvXrgUAzJw5EzNmzICnpyeMjIxw4MABtG7dGoIgaCoFfMSbdeLi4tCkSRN07doVrVq1QuXKleHu7o6UlBTN48HExETkzZsX5cqVg5ubGwwMDLBy5Uq8e/cO3t7eyJcvHyvRWei/3BNDQ0PMnTsX1tbWOHnyJLZs2YL379+LfSm5ivBPhezFixf4+PEjihYtCplMhrx586Js2bIICQnB/Pnz8fbtW9SqVQu7du1C6dKl0bFjR83xoaGhCAwMRK1atcS8lFwpOjoawKcnB8+fP8fEiRMxZswYtGzZEkuXLsXZs2cxb948HDlyBEqlMt3xq1atwm+//cY+n5RpTEAlLjExEfXq1UPRokWxdOlS5M2bF2q1GsWLF8e2bduwdetWVKlSBfPmzUNoaChKly6NEydOYMCAAejRowdkMhn7SGUxQRAwduxYJCcno2XLlli0aBEGDRqE7du3w8vLCwMGDAAALF++HOfPn0eFChVw584ddOzYEVZWVvD29kZCQgI2bNjAVztmkf/lnlhbW2PEiBFwdHREWFgY3+KSxdJ+8Z03bx42bdqEt2/fAvjUl9PPzw/37t3DhQsXsGrVKhQuXBgeHh6IjY3FihUr8OzZM8hkMhQtWlRzLynrREZGomHDhpg/fz4OHTqEGTNmYNiwYejfvz/Wr1+Pq1evYujQoVi8eDG2bt2KgwcPQqlU4sOHD7hy5Qo2bdqEwYMH48iRI0w+KdOYmUhcZGSkZtRheHg42rVrh0ePHsHV1RXFihXTTMPUo0cPFClSBBcuXEC3bt0008kInGIpy8lkMgwbNgxubm7Ytm0bmjdvjrFjx0KtVmPp0qWoWLEiLC0tYW5ujh07dsDGxgZLly5FlSpVIAgC7t69C0NDQ/b9zEL/yz0BgHv37iE5ORnGxsYiX0nutH79epw+fRpbtmzB8ePH0a9fP7Rp0wZmZmbo1asXDh06hD179uDZs2do2bIlJk6ciMuXL2P16tWaKeYqVqzIfzNZzMbGBg0bNsThw4dx9+5dWFhYYPfu3VAqlShYsCDevXuHuLg4/PDDDxg6dCi2bdsGPz8/HDt2DIMHD4apqSlu376NypUri30plAPxlRESV6BAAezatQsLFy7EpUuX4Orqip07dyI6OhrLly/HvXv3MH78eISGhqJHjx44duwY1q9fj5YtW/KNLTpUunRpjBs3DvPmzYNKpYKjoyOuX7+OokWLYteuXThy5AhatWqFcuXK4eTJkzA0NMSGDRtw4sQJ7N+/H4UKFRL7EnKd/+WeHDhwgPdEhzw9PVGnTh2ULFkSjx49wu+//47u3bsjJSUFjRs3xoIFC7B48WLY2tpi0qRJUCgUSEhIwLp16/j6Ux2Ki4uDvb098ufPDzs7O5QqVQpXrlzBuHHjsGzZMkRHR2PTpk2Qy+Xw8vJCUlIS1qxZg2LFiiE+Ph516tRBgQIFxL4MyqnE635KmZGUlKT5u6+vryCTyQRra2shLCxMEARBGDJkiGBsbCx07txZsx8HHene06dPhb59+wozZ84U7t27p2kfOnSo0KBBA81927Bhg+Du7i74+/uLFare4D2Rrq1btwpyuVwYNmyYIJPJhMmTJwsnTpwQ7ty5IzRr1kyIjIwUBOH/B8TExMSIGG3up1KphJUrVwq9e/cW+vbtK9StW1d48OCB4OXlJYwZM0ZQqVTC5s2bhR9++EHztr0TJ04Ic+bM4dun6H8mEwQ+o80JhM+qmQcOHMD06dM1g5HOnz+Pdu3aoV27dggKCkLDhg0xadIkVj+zydOnTzF37lw4OTmhT58+WLJkCU6dOoXLly/D2NgYGzduxNKlS7F161aULVtW7HD1Au+JNB06dAgmJiZo3LgxXF1dYWhoiFGjRqFTp06aaXxSUlKgUCggk8n4FCcbfPz4EXv27IFSqYSDgwNiYmKwcuVKNGzYEImJiVi9ejVGjx6Nhw8f4uTJkwA+TU/GsQX0v2ICmkOFh4fD0dERJ0+eRNeuXbFu3Tq0atUKs2bNQqdOneDi4iJ2iHrl77//xuzZs1GyZEl8/PgRs2fPBgBs2LABy5YtY6IjAt4TaRs0aBCCgoKQkJCAjh07olevXnzcLpKPHz/i2LFjWLNmDd6+fYvly5fDzMwMR48ehVKpRPfu3TF//nysX78e5ubmYodLuQR/hclh0n5fcHR0xF9//YWePXtixYoVaNWqFQBg3LhxTD5FULx4cfz6668ICwtDnjx5IAgCdu7cyURHRLwn0pT2PczJyQlNmjTBypUrsXfvXqxYsQIREREiR6efbG1tYWtri1evXsHDwwNnz57FwIED4erqCktLS8yePRvnz5/Hs2fPxA6VchFWQHOo9+/fw93dHXPmzEG3bt0039T5uEpcT58+xezZs/H27VsEBwfjzz//5FyfIuM9kabz589j9uzZOHr0KA4ePIgFCxZg//79sLOzEzs0vZQ2vdKpU6cQEREBd3d31K9fH9OnT8fVq1exefNmFClShD9jKMswAc3B3rx5AwcHB/aTkpjAwEBMnjwZU6dORYUKFcQOh8B7IkVqtRpv377VjKKOj4+HmZmZyFHRy5cvMX36dDg6OmLKlClYsmQJqlWrhho1aogdGuUyTECJdEClUnFOSYnhPZGmtF+g+Yu0dDx79gzVq1fHrl270KBBA7HDoVyKfUCJdICJjvTwnkhTWtLJ5FM6ihYtinHjxiEuLg5qtVrscCiXYgWUiIiItKSmpvLNU6RTTECJiIiIKFvxETwRERERZSsmoERERESUrZiAEhEREVG2YgJKRDlGfHw8UlJStNrUajXi4+MBAHFxcRk6z4sXL/Do0aMsiSk5ORlnz55NN1r40aNHGY6HiEjfcBASEUmSg4MDrKysYGpqiujoaLRv3x737t3Dy5cvERsbi8jISBQtWhSpqamws7PDmTNn4ObmhtatW2PGjBmYPXu2VlJYvnx5tG7dGgCwZMkS3Lx5E1u3btVsnzJlChITEzFv3jykpqYiOTkZJiYmWjElJydDLpdrjQ5es2YNJkyYAD8/P1hYWMDMzAyFCxdGsWLF4O3tjX79+kGtViM5OZlTQRER/cNA7ACIiL7mzZs3AIDg4GDUqFEDvXv3hqurKwBg7dq1uHjxIjZv3qx1zP79+9GuXTt4eXlh9uzZWLhwIQDgypUreP78OQoVKoTnz5/D2NgYBgba3/5MTU0hl396KHTx4kU0atQIZmZmmvkpU1JSkJCQgNOnT6N+/foAgMePH2PChAkoWLAgmjZtCldXV9SrVw9WVlZQKpWYNGkSRo0aBSsrK7Ru3RorVqzQ2deLiCgnYQJKRJIUFxeHiRMn4vnz5/Dx8dEknwDw9u1bFC9ePN0xJUqUwJ07d6BQKGBkZIS2bdvi9OnTqFu3Lq5du4YHDx7g8uXLqFq1quaYN2/eIDo6GlFRUVCpVAgKCkLFihWRnJz83fguXbqEDh06YNSoURg0aBCcnZ1x8uRJPH36FC1btsTNmzeRkpKC1q1b48mTJ5rkloiI2AeUiCTKyMgIb968wYULF9CtWzcAnyqTzs7OWLNmDTZu3Ihy5cqhaNGi2LNnD549e4YJEyZonSM6Ohr9+vXTrMvl8nRv3Dlz5gwWLFgAX19fXLlyBfPmzUNgYOA340pNTQUAlCpVCgsWLMDkyZNha2uLZ8+eYe3atahfvz5WrVqFUqVKoWzZstiwYQPf8kNE9AUmoEQkOampqVCr1di2bRsGDhyItK7qMpkMzs7OCA8Px+7du3H79m3UrFkTarUapqamOHv2LFq3bq2pXhoaGsLKyuq7n9WlSxesXr0aKpUKXl5emD9/Pn755ReYm5vD2toa5ubmMDMzg7W1NSwsLFCkSBEAQN68edG5c2cAQGRkJKZOnYrly5dj586dmDlzJqZMmYKoqCjUrVuXCSgR0ReYgBKR5Ny9exfly5eHq6srFixYgKpVq0KhUGhGuwuCgOrVq2tGmSsUChQoUAAnT55EgwYNYGhoCOBTImtqavqvn3f69GkolUps3rwZPXv2xN27dxEXF4eoqChMmDABgwYNQlRUFGJiYvDy5UsAn/qEXr58GWPHjoWLiwtUKhXu3r0LLy8vXLp0CZaWlqhUqRJ++eUXHDx4EH///beOvlpERDkPE1AikpwqVargyZMn+Ouvv1CqVCns27cPZcqUgaWlJYBP0zFZWlrC1tZW6zgLCwu0bt0agiAgNTUV7969Q968eQH8/6Pzr1m6dCmKFSuGn376CdeuXcP58+dx6NAhTbIJAE+ePMHVq1c163PmzEGjRo0QGRmJkSNHYsuWLXBxcYG9vT0KFSoEb29vuLu7o169eti4cWO67gFERPqMg5CISPLy58+PHTt2ICYmBgDw/v17FCxYULP98+mWOnbsiCFDhiAhIQEBAQGa/RITE6FWq9Mlon5+frh79y769esHQRCwc+dOVKxYEUWLFtUaZb9v3z6sXbsWDx8+hJmZGcaMGYOhQ4fC0tISSUlJ8Pb2xrNnz/D8+XPNKPlVq1ahXr166Nq1q66+NEREORIroEQkeVZWVihXrhxUKhUA4MaNG1qj4hMTEwEAly9fxvPnz9G+fXuEhYXh8OHDqF69Ojw8PLBu3TqkpKQgKSlJ69x//PEH1q5dq5mjs0GDBjh16hTy5cuHFi1aaPYbPXo0jI2N8fvvvwMAjI2NYWlpidevX6NChQpISUlBWFiYptIZGhqKkSNHglMtExGlxwSUiHKMChUqYNGiRVixYgWaN2+OXbt2Yf78+Wjbti0AwNvbG+PGjYO5uTmUSiX8/PyQP39+1KtXD69evcIvv/yCbdu2aZ1z3759aNasmWY9OTkZ3t7eGDFihNbgIUNDQ0yePBkrV67UVGIBoECBAihevDgOHTqEWrVqwd/fHwkJCdizZw/at28PR0dHHX9ViIhyHiagRCRJSqUSr1690pow3sLCAhs3bkRSUhJ+/PFHbN68Gf369UNqaio2btyIW7duYcCAAUhJScHgwYPRt29fdOvWDX379kXXrl2RmpoKlUqFt2/fapLLtPMnJycjJSUFiYmJ6NatG7p164aDBw/i0qVLmoFMHTp0gL+/PywsLAD8f7/SqVOnokyZMjAyMsK5c+dgYGCAdevW4eeff4YgCP86pygRkb5hH1AikqR58+Zh06ZNGD9+PADg5s2b6NOnD0qVKoUTJ07AwsIChw8fhre3N+rVqwc/Pz8sWbIEefLkwd69exEeHo69e/cC+PSazbi4OCQkJGDGjBlYunQp1q5dq/V5KpUKiYmJsLCwwMSJEzUxWFpaokePHgA+JauFChUC8GkUvImJCUxNTbVezZkmJSUFbdq0QXJyMpKSkhAbG5vu1Z5ERPqK74InohwhNTUVt27dQvXq1dNtCw8PT/eoOzEx8asJX2xsLAwNDflediIiETEBJSIiIqJsxT6gRERERJStmIASERERUbZiAkpERERE2YoJKBERERFlKyagRERERJStmIASERERUbZiAkpERERE2YoJKBERERFlq/8DeLnGxVeetoEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "分类评估报告如下:\n", + "\n", + " precision recall f1-score support\n", + "\n", + " 军事 0.67 0.80 0.73 118\n", + " 国内 0.81 0.67 0.73 117\n", + " 国际 0.72 0.60 0.65 118\n", + " 科技 0.00 0.00 0.00 15\n", + " 航空 0.68 0.91 0.78 98\n", + "\n", + " accuracy 0.71 466\n", + " macro avg 0.58 0.59 0.58 466\n", + "weighted avg 0.70 0.71 0.70 466\n", + "\n" + ] + } + ], + "source": [ + "# 绘制混淆矩阵函数\n", + "def plot_confusion_matrix(cm, classes,\n", + " normalize=False,\n", + " title='Confusion matrix',\n", + " cmap=plt.cm.Blues):\n", + " plt.figure(figsize=(8,6))\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, rotation=45)\n", + " plt.yticks(tick_marks, classes)\n", + "\n", + " fmt = '.2f' if normalize else 'd'\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, format(cm[i, j], fmt),\n", + " horizontalalignment=\"center\",\n", + " color=\"white\" if cm[i, j] > thresh else \"black\")\n", + "\n", + " plt.tight_layout()\n", + " plt.ylabel('真实标签')\n", + " plt.xlabel('预测标签')\n", + " plt.show()\n", + "class_names=['军事','国内','国际','科技','航空']\n", + "cm= confusion_matrix(y_test, y_pred)\n", + "title=\"分类准确率:{:.2f}%\".format(accuracy_score(y_test,y_pred)*100)\n", + "plot_confusion_matrix(cm,classes=class_names,title=title)\n", + "print(\"分类评估报告如下:\\n\")\n", + "print(classification_report(y_test,y_pred))\n" + ] + } + ], + "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.10.7" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}