├── .gitignore ├── README.md ├── news_categories.zip └── text_classification_tutorial.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | news_categories.txt 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # text-classification-tutorial 2 | Tutorial phân loại văn bản sử dụng một số thuật toán học máy 3 | # Demo 4 | [Click vào đây để xem demo](https://colab.research.google.com/github/nguyenvanhieuvn/text-classification-tutorial/blob/master/text_classification_tutorial.ipynb) 5 | 6 | # Tham khảo 7 | 1. Cảm ơn bạn [Hien Hoang](http://github.com/hienhoang272) đã tài trợ dữ liệu cho tutorial này! 8 | -------------------------------------------------------------------------------- /news_categories.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/behitek/text-classification-tutorial/d0914828ef1408a1cf2c88e21a9245c36ab1e14c/news_categories.zip -------------------------------------------------------------------------------- /text_classification_tutorial.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "kernelspec": { 6 | "display_name": "Python 3", 7 | "language": "python", 8 | "name": "python3" 9 | }, 10 | "language_info": { 11 | "codemirror_mode": { 12 | "name": "ipython", 13 | "version": 3 14 | }, 15 | "file_extension": ".py", 16 | "mimetype": "text/x-python", 17 | "name": "python", 18 | "nbconvert_exporter": "python", 19 | "pygments_lexer": "ipython3", 20 | "version": "3.7.3" 21 | }, 22 | "colab": { 23 | "name": "text_classification_tutorial.ipynb", 24 | "provenance": [] 25 | } 26 | }, 27 | "cells": [ 28 | { 29 | "cell_type": "markdown", 30 | "metadata": { 31 | "id": "sSBUWv_XNRtt", 32 | "colab_type": "text" 33 | }, 34 | "source": [ 35 | "# Thực hành phân loại văn bản sử dụng Machine learning\n", 36 | "[![](https://nguyenvanhieu.vn/wp-content/uploads/2020/08/phan-loai-van-ban-tieng-viet.jpg)](https://nguyenvanhieu.vn/phan-loai-van-ban-tieng-viet/)\n", 37 | "\n", 38 | "> Bài hướng dẫn: https://nguyenvanhieu.vn/phan-loai-van-ban-tieng-viet/\n" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": { 44 | "id": "auTRaD5iMwxk", 45 | "colab_type": "text" 46 | }, 47 | "source": [ 48 | "\n", 49 | "# Tiền xử lý dữ liệu\n", 50 | "- Xóa HTML code (nếu có)\n", 51 | "- Chuẩn hóa bảng mã Unicode\n", 52 | "- Chuẩn hóa kiểu gõ dấu tiếng Việt\n", 53 | "=> Xem thêm: [Xử lý tiếng Việt trong Python](https://nguyenvanhieu.vn/xu-ly-tieng-viet-trong-python/)\n", 54 | "- Thực hiện tách từ tiếng Việt (sử dụng thư viện tách từ như pyvi, underthesea, vncorenlp,...)\n", 55 | "- đưa về văn bản lower (viết thường)\n", 56 | "- Xóa các ký tự đặc biệt: \".\", \",\", \";\", \")\", ...\n", 57 | "\n", 58 | "## Một số tập dữ liệu có thể tham khảo\n", 59 | "- https://github.com/duyvuleo/VNTC\n", 60 | "- http://github.com/binhvq/news-corpus\n", 61 | "\n", 62 | "> Phần này mình chỉ hướng dẫn cách xử lý 1 bài báo. Sau đó, mình sẽ cung cấp tập dữ liệu tin tức đã được xử lý" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "metadata": { 68 | "id": "Koy7eu1dMwxn", 69 | "colab_type": "code", 70 | "colab": {}, 71 | "outputId": "c8870b8c-0e74-409c-bf8e-1e566dbd9029" 72 | }, 73 | "source": [ 74 | "# Cài đặt một số hàm tiền xử lý văn bản cần thiết\n", 75 | "!pip3 install --user underthesea\n", 76 | "import regex as re\n", 77 | "from underthesea import word_tokenize\n", 78 | " \n", 79 | "uniChars = \"àáảãạâầấẩẫậăằắẳẵặèéẻẽẹêềếểễệđìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹỵÀÁẢÃẠÂẦẤẨẪẬĂẰẮẲẴẶÈÉẺẼẸÊỀẾỂỄỆĐÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸỴÂĂĐÔƠƯ\"\n", 80 | "unsignChars = \"aaaaaaaaaaaaaaaaaeeeeeeeeeeediiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAAAAAAAAAAAAAAAEEEEEEEEEEEDIIIOOOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYYAADOOU\"\n", 81 | " \n", 82 | "def loaddicchar():\n", 83 | " dic = {}\n", 84 | " char1252 = 'à|á|ả|ã|ạ|ầ|ấ|ẩ|ẫ|ậ|ằ|ắ|ẳ|ẵ|ặ|è|é|ẻ|ẽ|ẹ|ề|ế|ể|ễ|ệ|ì|í|ỉ|ĩ|ị|ò|ó|ỏ|õ|ọ|ồ|ố|ổ|ỗ|ộ|ờ|ớ|ở|ỡ|ợ|ù|ú|ủ|ũ|ụ|ừ|ứ|ử|ữ|ự|ỳ|ý|ỷ|ỹ|ỵ|À|Á|Ả|Ã|Ạ|Ầ|Ấ|Ẩ|Ẫ|Ậ|Ằ|Ắ|Ẳ|Ẵ|Ặ|È|É|Ẻ|Ẽ|Ẹ|Ề|Ế|Ể|Ễ|Ệ|Ì|Í|Ỉ|Ĩ|Ị|Ò|Ó|Ỏ|Õ|Ọ|Ồ|Ố|Ổ|Ỗ|Ộ|Ờ|Ớ|Ở|Ỡ|Ợ|Ù|Ú|Ủ|Ũ|Ụ|Ừ|Ứ|Ử|Ữ|Ự|Ỳ|Ý|Ỷ|Ỹ|Ỵ'.split(\n", 85 | " '|')\n", 86 | " charutf8 = \"à|á|ả|ã|ạ|ầ|ấ|ẩ|ẫ|ậ|ằ|ắ|ẳ|ẵ|ặ|è|é|ẻ|ẽ|ẹ|ề|ế|ể|ễ|ệ|ì|í|ỉ|ĩ|ị|ò|ó|ỏ|õ|ọ|ồ|ố|ổ|ỗ|ộ|ờ|ớ|ở|ỡ|ợ|ù|ú|ủ|ũ|ụ|ừ|ứ|ử|ữ|ự|ỳ|ý|ỷ|ỹ|ỵ|À|Á|Ả|Ã|Ạ|Ầ|Ấ|Ẩ|Ẫ|Ậ|Ằ|Ắ|Ẳ|Ẵ|Ặ|È|É|Ẻ|Ẽ|Ẹ|Ề|Ế|Ể|Ễ|Ệ|Ì|Í|Ỉ|Ĩ|Ị|Ò|Ó|Ỏ|Õ|Ọ|Ồ|Ố|Ổ|Ỗ|Ộ|Ờ|Ớ|Ở|Ỡ|Ợ|Ù|Ú|Ủ|Ũ|Ụ|Ừ|Ứ|Ử|Ữ|Ự|Ỳ|Ý|Ỷ|Ỹ|Ỵ\".split(\n", 87 | " '|')\n", 88 | " for i in range(len(char1252)):\n", 89 | " dic[char1252[i]] = charutf8[i]\n", 90 | " return dic\n", 91 | "dicchar = loaddicchar()\n", 92 | "\n", 93 | "# Hàm chuyển Unicode dựng sẵn về Unicde tổ hợp (phổ biến hơn)\n", 94 | "def convert_unicode(txt):\n", 95 | " return re.sub(\n", 96 | " r'à|á|ả|ã|ạ|ầ|ấ|ẩ|ẫ|ậ|ằ|ắ|ẳ|ẵ|ặ|è|é|ẻ|ẽ|ẹ|ề|ế|ể|ễ|ệ|ì|í|ỉ|ĩ|ị|ò|ó|ỏ|õ|ọ|ồ|ố|ổ|ỗ|ộ|ờ|ớ|ở|ỡ|ợ|ù|ú|ủ|ũ|ụ|ừ|ứ|ử|ữ|ự|ỳ|ý|ỷ|ỹ|ỵ|À|Á|Ả|Ã|Ạ|Ầ|Ấ|Ẩ|Ẫ|Ậ|Ằ|Ắ|Ẳ|Ẵ|Ặ|È|É|Ẻ|Ẽ|Ẹ|Ề|Ế|Ể|Ễ|Ệ|Ì|Í|Ỉ|Ĩ|Ị|Ò|Ó|Ỏ|Õ|Ọ|Ồ|Ố|Ổ|Ỗ|Ộ|Ờ|Ớ|Ở|Ỡ|Ợ|Ù|Ú|Ủ|Ũ|Ụ|Ừ|Ứ|Ử|Ữ|Ự|Ỳ|Ý|Ỷ|Ỹ|Ỵ',\n", 97 | " lambda x: dicchar[x.group()], txt)\n", 98 | "\n", 99 | "bang_nguyen_am = [['a', 'à', 'á', 'ả', 'ã', 'ạ', 'a'],\n", 100 | " ['ă', 'ằ', 'ắ', 'ẳ', 'ẵ', 'ặ', 'aw'],\n", 101 | " ['â', 'ầ', 'ấ', 'ẩ', 'ẫ', 'ậ', 'aa'],\n", 102 | " ['e', 'è', 'é', 'ẻ', 'ẽ', 'ẹ', 'e'],\n", 103 | " ['ê', 'ề', 'ế', 'ể', 'ễ', 'ệ', 'ee'],\n", 104 | " ['i', 'ì', 'í', 'ỉ', 'ĩ', 'ị', 'i'],\n", 105 | " ['o', 'ò', 'ó', 'ỏ', 'õ', 'ọ', 'o'],\n", 106 | " ['ô', 'ồ', 'ố', 'ổ', 'ỗ', 'ộ', 'oo'],\n", 107 | " ['ơ', 'ờ', 'ớ', 'ở', 'ỡ', 'ợ', 'ow'],\n", 108 | " ['u', 'ù', 'ú', 'ủ', 'ũ', 'ụ', 'u'],\n", 109 | " ['ư', 'ừ', 'ứ', 'ử', 'ữ', 'ự', 'uw'],\n", 110 | " ['y', 'ỳ', 'ý', 'ỷ', 'ỹ', 'ỵ', 'y']]\n", 111 | "bang_ky_tu_dau = ['', 'f', 's', 'r', 'x', 'j']\n", 112 | "\n", 113 | "nguyen_am_to_ids = {}\n", 114 | "\n", 115 | "for i in range(len(bang_nguyen_am)):\n", 116 | " for j in range(len(bang_nguyen_am[i]) - 1):\n", 117 | " nguyen_am_to_ids[bang_nguyen_am[i][j]] = (i, j)\n", 118 | "\n", 119 | "def chuan_hoa_dau_tu_tieng_viet(word):\n", 120 | " if not is_valid_vietnam_word(word):\n", 121 | " return word\n", 122 | "\n", 123 | " chars = list(word)\n", 124 | " dau_cau = 0\n", 125 | " nguyen_am_index = []\n", 126 | " qu_or_gi = False\n", 127 | " for index, char in enumerate(chars):\n", 128 | " x, y = nguyen_am_to_ids.get(char, (-1, -1))\n", 129 | " if x == -1:\n", 130 | " continue\n", 131 | " elif x == 9: # check qu\n", 132 | " if index != 0 and chars[index - 1] == 'q':\n", 133 | " chars[index] = 'u'\n", 134 | " qu_or_gi = True\n", 135 | " elif x == 5: # check gi\n", 136 | " if index != 0 and chars[index - 1] == 'g':\n", 137 | " chars[index] = 'i'\n", 138 | " qu_or_gi = True\n", 139 | " if y != 0:\n", 140 | " dau_cau = y\n", 141 | " chars[index] = bang_nguyen_am[x][0]\n", 142 | " if not qu_or_gi or index != 1:\n", 143 | " nguyen_am_index.append(index)\n", 144 | " if len(nguyen_am_index) < 2:\n", 145 | " if qu_or_gi:\n", 146 | " if len(chars) == 2:\n", 147 | " x, y = nguyen_am_to_ids.get(chars[1])\n", 148 | " chars[1] = bang_nguyen_am[x][dau_cau]\n", 149 | " else:\n", 150 | " x, y = nguyen_am_to_ids.get(chars[2], (-1, -1))\n", 151 | " if x != -1:\n", 152 | " chars[2] = bang_nguyen_am[x][dau_cau]\n", 153 | " else:\n", 154 | " chars[1] = bang_nguyen_am[5][dau_cau] if chars[1] == 'i' else bang_nguyen_am[9][dau_cau]\n", 155 | " return ''.join(chars)\n", 156 | " return word\n", 157 | "\n", 158 | " for index in nguyen_am_index:\n", 159 | " x, y = nguyen_am_to_ids[chars[index]]\n", 160 | " if x == 4 or x == 8: # ê, ơ\n", 161 | " chars[index] = bang_nguyen_am[x][dau_cau]\n", 162 | " # for index2 in nguyen_am_index:\n", 163 | " # if index2 != index:\n", 164 | " # x, y = nguyen_am_to_ids[chars[index]]\n", 165 | " # chars[index2] = bang_nguyen_am[x][0]\n", 166 | " return ''.join(chars)\n", 167 | "\n", 168 | " if len(nguyen_am_index) == 2:\n", 169 | " if nguyen_am_index[-1] == len(chars) - 1:\n", 170 | " x, y = nguyen_am_to_ids[chars[nguyen_am_index[0]]]\n", 171 | " chars[nguyen_am_index[0]] = bang_nguyen_am[x][dau_cau]\n", 172 | " # x, y = nguyen_am_to_ids[chars[nguyen_am_index[1]]]\n", 173 | " # chars[nguyen_am_index[1]] = bang_nguyen_am[x][0]\n", 174 | " else:\n", 175 | " # x, y = nguyen_am_to_ids[chars[nguyen_am_index[0]]]\n", 176 | " # chars[nguyen_am_index[0]] = bang_nguyen_am[x][0]\n", 177 | " x, y = nguyen_am_to_ids[chars[nguyen_am_index[1]]]\n", 178 | " chars[nguyen_am_index[1]] = bang_nguyen_am[x][dau_cau]\n", 179 | " else:\n", 180 | " # x, y = nguyen_am_to_ids[chars[nguyen_am_index[0]]]\n", 181 | " # chars[nguyen_am_index[0]] = bang_nguyen_am[x][0]\n", 182 | " x, y = nguyen_am_to_ids[chars[nguyen_am_index[1]]]\n", 183 | " chars[nguyen_am_index[1]] = bang_nguyen_am[x][dau_cau]\n", 184 | " # x, y = nguyen_am_to_ids[chars[nguyen_am_index[2]]]\n", 185 | " # chars[nguyen_am_index[2]] = bang_nguyen_am[x][0]\n", 186 | " return ''.join(chars)\n", 187 | "\n", 188 | "\n", 189 | "def is_valid_vietnam_word(word):\n", 190 | " chars = list(word)\n", 191 | " nguyen_am_index = -1\n", 192 | " for index, char in enumerate(chars):\n", 193 | " x, y = nguyen_am_to_ids.get(char, (-1, -1))\n", 194 | " if x != -1:\n", 195 | " if nguyen_am_index == -1:\n", 196 | " nguyen_am_index = index\n", 197 | " else:\n", 198 | " if index - nguyen_am_index != 1:\n", 199 | " return False\n", 200 | " nguyen_am_index = index\n", 201 | " return True\n", 202 | "\n", 203 | "\n", 204 | "def chuan_hoa_dau_cau_tieng_viet(sentence):\n", 205 | " \"\"\"\n", 206 | " Chuyển câu tiếng việt về chuẩn gõ dấu kiểu cũ.\n", 207 | " :param sentence:\n", 208 | " :return:\n", 209 | " \"\"\"\n", 210 | " sentence = sentence.lower()\n", 211 | " words = sentence.split()\n", 212 | " for index, word in enumerate(words):\n", 213 | " cw = re.sub(r'(^\\p{P}*)([p{L}.]*\\p{L}+)(\\p{P}*$)', r'\\1/\\2/\\3', word).split('/')\n", 214 | " # print(cw)\n", 215 | " if len(cw) == 3:\n", 216 | " cw[1] = chuan_hoa_dau_tu_tieng_viet(cw[1])\n", 217 | " words[index] = ''.join(cw)\n", 218 | " return ' '.join(words)\n", 219 | "\n", 220 | "def remove_html(txt):\n", 221 | " return re.sub(r'<[^>]*>', '', txt)" 222 | ], 223 | "execution_count": null, 224 | "outputs": [ 225 | { 226 | "output_type": "stream", 227 | "text": [ 228 | "Requirement already satisfied: underthesea in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (1.1.17)\n", 229 | "Requirement already satisfied: python-crfsuite==0.9.6 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from underthesea) (0.9.6)\n", 230 | "Requirement already satisfied: languageflow==1.1.13a1 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from underthesea) (1.1.13a1)\n", 231 | "Requirement already satisfied: nltk<3.5,>=3.4 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from underthesea) (3.4.5)\n", 232 | "Requirement already satisfied: Click>=6.0 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from underthesea) (7.1.2)\n", 233 | "Requirement already satisfied: joblib==0.13.2 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from languageflow==1.1.13a1->underthesea) (0.13.2)\n", 234 | "Requirement already satisfied: scikit-learn==0.20.3 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from languageflow==1.1.13a1->underthesea) (0.20.3)\n", 235 | "Requirement already satisfied: clint in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from languageflow==1.1.13a1->underthesea) (0.5.1)\n", 236 | "Requirement already satisfied: tabulate in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from languageflow==1.1.13a1->underthesea) (0.8.7)\n", 237 | "Requirement already satisfied: requests in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from languageflow==1.1.13a1->underthesea) (2.24.0)\n", 238 | "Requirement already satisfied: tqdm in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from languageflow==1.1.13a1->underthesea) (4.48.1)\n", 239 | "Requirement already satisfied: six in /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages (from nltk<3.5,>=3.4->underthesea) (1.12.0)\n", 240 | "Requirement already satisfied: numpy>=1.8.2 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from scikit-learn==0.20.3->languageflow==1.1.13a1->underthesea) (1.19.1)\n", 241 | "Requirement already satisfied: scipy>=0.13.3 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from scikit-learn==0.20.3->languageflow==1.1.13a1->underthesea) (1.5.2)\n", 242 | "Requirement already satisfied: args in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from clint->languageflow==1.1.13a1->underthesea) (0.1.0)\n", 243 | "Requirement already satisfied: idna<3,>=2.5 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from requests->languageflow==1.1.13a1->underthesea) (2.10)\n", 244 | "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from requests->languageflow==1.1.13a1->underthesea) (1.25.10)\n", 245 | "Requirement already satisfied: chardet<4,>=3.0.2 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from requests->languageflow==1.1.13a1->underthesea) (3.0.4)\n", 246 | "Requirement already satisfied: certifi>=2017.4.17 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from requests->languageflow==1.1.13a1->underthesea) (2020.6.20)\n", 247 | "\u001b[33mYou are using pip version 19.0.3, however version 20.2 is available.\n", 248 | "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" 249 | ], 250 | "name": "stdout" 251 | } 252 | ] 253 | }, 254 | { 255 | "cell_type": "code", 256 | "metadata": { 257 | "id": "QtpeIjbcMwx3", 258 | "colab_type": "code", 259 | "colab": {}, 260 | "outputId": "49ae8a0d-ca3c-45c1-8af5-c631cebf49f5" 261 | }, 262 | "source": [ 263 | "def text_preprocess(document):\n", 264 | " # xóa html code\n", 265 | " document = remove_html(document)\n", 266 | " # chuẩn hóa unicode\n", 267 | " document = convert_unicode(document)\n", 268 | " # chuẩn hóa cách gõ dấu tiếng Việt\n", 269 | " document = chuan_hoa_dau_cau_tieng_viet(document)\n", 270 | " # tách từ\n", 271 | " document = word_tokenize(document, format=\"text\")\n", 272 | " # đưa về lower\n", 273 | " document = document.lower()\n", 274 | " # xóa các ký tự không cần thiết\n", 275 | " document = re.sub(r'[^\\s\\wáàảãạăắằẳẵặâấầẩẫậéèẻẽẹêếềểễệóòỏõọôốồổỗộơớờởỡợíìỉĩịúùủũụưứừửữựýỳỷỹỵđ_]',' ',document)\n", 276 | " # xóa khoảng trắng thừa\n", 277 | " document = re.sub(r'\\s+', ' ', document).strip()\n", 278 | " return document\n", 279 | "\n", 280 | "document = \"\"\"\n", 281 | "TP HCM phạt người không đeo khẩu trang nơi công cộng\n", 282 | "Người dân ở thành phố không đeo khẩu trang nơi công cộng sẽ bị xử phạt mức cao nhất 300.000 đồng, từ ngày 5/8.\n", 283 | "\n", 284 | "Yêu cầu này được Chủ tịch UBND thành phố Nguyễn Thành Phong đưa ra tại cuộc họp Ban chỉ đạo phòng chống dịch bệnh Covid-19 của TP HCM chiều 3/8.\n", 285 | "\n", 286 | "Việc xử phạt không đeo khẩu trang nơi công cộng được TP HCM cũng như các địa phương khác thực hiện từ cuối tháng 3 khi Covid-19 bùng phát. Tuy nhiên, sau khi hết thực hiện cách ly xã hội từ ngày 23/4, việc đeo khẩu trang nơi công cộng chỉ dừng lại ở mức khuyến cáo.\n", 287 | "\n", 288 | "Theo Nghị định số 176/2013, người dân không đeo khẩu trang nơi công cộng sẽ bị xử phạt từ 100.000 đến 300.000 đồng. Trong khoảng một tháng áp dụng trước đó, TP HCM đã xử phạt hơn 4.300 trường hợp với gần 870 triệu đồng.\n", 289 | "\n", 290 | "Theo ông Phong, việc đeo khẩu trang đã được khẳng định có thể tránh lây lan dịch bệnh cho người khác và bảo vệ sức khỏe cho người sử dụng. \"Sở Công thương phải nắm nguồn cung ứng khẩu trang, chủ động thông báo các điểm bán để người dân dễ dàng mua vì đã xử phạt thì phải bảo đảm đủ nguồn cung\", ông Phong nói.\n", 291 | "\n", 292 | "Đội trật tự đô thị phường Bến Nghé, quận 1, xử phạt người không đeo khẩu trang trên phố đi bộ Nguyễn Huệ, chiều 15/4. Ảnh: Quỳnh Trần.\n", 293 | "Đội trật tự đô thị phường Bến Nghé, quận 1, xử phạt người không đeo khẩu trang trên phố đi bộ Nguyễn Huệ, chiều 15/4. Ảnh: Quỳnh Trần.\n", 294 | "\n", 295 | "Bí thư Thành uỷ Nguyễn Thiện Nhân cũng cho rằng việc đeo khẩu trang là một trong những biện pháp cơ bản để tránh dịch bệnh lây lan. Việc này rất dễ làm, không tốn nhiều tiền nhưng nhiều nước bỏ lơi và đã bị \"vỡ trận\".\n", 296 | "\n", 297 | "\"Ngoài đường hiện có ít nhất 20% người không đeo khẩu trang. Người không đeo không những tự rước bệnh vào mình mà còn nguy cơ lây cho người khác. Đeo khẩu trang hơi cực tí thôi nhưng đi đâu cũng nên đeo để giữ an toàn\", ông Nhân nói và khẳng định thành phố bảo đảm không thiếu khẩu trang cho người dân.\n", 298 | "\n", 299 | "Chủ tịch UBND thành phố Nguyễn Thành Phong cũng cho biết đã đồng ý việc tái lập các chốt kiểm soát ở cửa ngõ TP HCM để phòng chống Covid-19.\n", 300 | "\n", 301 | "Trước đó, thành phố đã lập 62 chốt kiểm soát, hoạt động 24/24 từ ngày 4/4 để phòng chống dịch. Lực lượng tham gia là Công an thành phố, Sở Y tế, Bộ Tư lệnh thành phố, Thanh tra giao thông, Ban Quản lý An toàn thực phẩm, quản lý thị trường.\n", 302 | "\n", 303 | "Trong đó, 16 chốt chính (cấp thành phố) đặt tại: Trạm thu phí Long Phước (cao tốc TP HCM - Long Thành - Dầu Giây), cao tốc Trung Lương, cầu Đôi (đường Trần Văn Giàu), đường Ba Làng, đường Xuyên Á (quốc lộ 22), cầu Phú Cường, cầu Vĩnh Bình, cầu vượt Sóng Thần, quốc lộ 1K, quốc lộ 50, quốc lộ 1A, cầu Đồng Nai, Bến xe Miền Tây, Bến xe miền Đông, sân bay Tân Sơn Nhất, cảng Cát Lái.\n", 304 | "\n", 305 | "Đến ngày 23/4, chính quyền thành phố dừng hoạt động các chốt này vì dịch bệnh đã được khống chế, TP HCM dừng cách ly xã hội theo Chỉ thị 19 của Thủ tướng.\n", 306 | "\n", 307 | "Sau 19 ngày hoạt động, các chốt chính đã kiểm tra gần 270.000 xe, trong đó có 235.000 ôtô; gần 600.000 người được kiểm tra y tế, đo thân nhiệt, bao gồm cả 3.000 người nước ngoài; hơn 130.000 người được yêu cầu khai báo y tế.\n", 308 | "\"\"\"\n", 309 | "\n", 310 | "document = text_preprocess(document)\n", 311 | "print(document)" 312 | ], 313 | "execution_count": null, 314 | "outputs": [ 315 | { 316 | "output_type": "stream", 317 | "text": [ 318 | "tp hcm phạt người không đeo khẩu_trang nơi công_cộng người dân ở thành_phố không đeo khẩu_trang nơi công_cộng sẽ bị xử_phạt mức cao nhất 300 000 đồng từ ngày 58 yêu_cầu này được chủ_tịch ubnd thành_phố nguyễn_thành phong đưa ra tại cuộc họp ban chỉ_đạo phòng_chống dịch_bệnh covid 19 của tp hcm chiều 38 việc xử_phạt không đeo khẩu_trang nơi công_cộng được tp hcm cũng như các địa_phương khác thực_hiện từ cuối tháng 3 khi covid 19 bùng_phát tuy_nhiên sau khi hết thực_hiện cách_ly xã_hội từ ngày 234 việc đeo khẩu_trang nơi công_cộng chỉ dừng lại ở mức khuyến_cáo theo nghị_định số 1762013 người_dân không đeo khẩu_trang nơi công_cộng sẽ bị xử_phạt từ 100 000 đến 300 000 đồng trong khoảng một tháng áp_dụng trước đó tp hcm đã xử_phạt hơn 4 300 trường_hợp với gần 870 triệu đồng theo ông phong việc đeo khẩu_trang đã được khẳng_định có_thể tránh lây_lan dịch_bệnh cho người khác và bảo_vệ sức_khỏe cho người sử_dụng sở công_thương phải nắm nguồn cung_ứng_khẩu_trang chủ_động thông_báo các điểm bán để người dân dễ_dàng mua vì đã xử_phạt thì phải bảo_đảm đủ nguồn cung ông phong nói đội trật_tự đô_thị phường bến_nghé quận 1 xử_phạt người không đeo khẩu_trang trên phố đi bộ nguyễn_huệ chiều 154 ảnh quỳnh trần đội trật_tự đô_thị phường bến_nghé quận 1 xử_phạt người không đeo khẩu_trang trên phố đi bộ nguyễn_huệ chiều 154 ảnh quỳnh trần bí_thư thành_ủy nguyễn_thiện_nhân cũng cho rằng việc đeo khẩu_trang là một trong những biện_pháp cơ_bản để tránh dịch_bệnh lây_lan việc này rất dễ làm không tốn nhiều tiền nhưng nhiều nước bỏ_lơi và đã bị vỡ trận ngoài đường hiện có ít_nhất 20 người không đeo khẩu_trang người không đeo không_những tự rước bệnh vào mình mà_còn nguy_cơ lây cho người khác đeo khẩu_trang hơi cực tí thôi nhưng đi đâu cũng nên đeo để giữ an_toàn ông nhân nói và khẳng_định thành_phố bảo_đảm không thiếu khẩu_trang cho người dân chủ_tịch ubnd thành_phố nguyễn_thành phong cũng cho biết đã đồng_ý việc tái_lập các chốt kiểm_soát ở cửa_ngõ tp hcm để phòng_chống covid 19 trước đó thành_phố đã lập 62 chốt kiểm_soát hoạt_động 2424 từ ngày 44 để phòng_chống dịch lực_lượng tham_gia là công_an thành_phố sở y_tế bộ_tư_lệnh thành_phố thanh_tra giao_thông ban quản_lý an_toàn thực_phẩm quản_lý thị_trường trong đó 16 chốt chính cấp thành_phố đặt tại trạm thu phí long phước cao_tốc tp hcm long thành dầu giây cao_tốc trung_lương cầu đôi đường trần_văn_giàu đường ba làng đường xuyên á quốc_lộ 22 cầu phú_cường cầu vĩnh_bình cầu_vượt sóng_thần quốc_lộ 1k quốc_lộ 50 quốc_lộ 1a cầu đồng nai bến_xe miền tây bến_xe miền đông sân_bay tân_sơn nhất cảng cát_lái đến ngày 234 chính_quyền thành_phố dừng hoạt_động các chốt này vì dịch_bệnh đã được khống_chế tp hcm dừng cách_ly xã_hội theo chỉ_thị 19 của thủ_tướng sau 19 ngày hoạt_động các chốt chính đã kiểm_tra gần 270 000 xe trong đó có 235 000 ôtô gần 600 000 người được kiểm_tra y_tế đo thân_nhiệt bao_gồm cả 3 000 người nước_ngoài hơn 130 000 người được yêu_cầu khai_báo y_tế\n" 319 | ], 320 | "name": "stdout" 321 | } 322 | ] 323 | }, 324 | { 325 | "cell_type": "markdown", 326 | "metadata": { 327 | "id": "kA3UXNiZMwx9", 328 | "colab_type": "text" 329 | }, 330 | "source": [ 331 | "# Thực hành phân loại văn bản\n", 332 | "- Tải tập dữ liệu đã tiền xử lý về\n", 333 | "- Quan sát tập dữ liệu\n", 334 | "- Loại bỏ stopword\n", 335 | "\n", 336 | "- Xây dựng tập train/test\n", 337 | "\n", 338 | "- Phân loại văn bản sử dụng thuật toán Naive Bayes\n", 339 | "- Phân loại văn bản sử dụng thuật toán SVM\n", 340 | "- Phân loại văn bản sử dụng Fasttext\n", 341 | "\n", 342 | "- Tổng kết/ Nhận xét" 343 | ] 344 | }, 345 | { 346 | "cell_type": "code", 347 | "metadata": { 348 | "id": "aadjUdF8Mwx_", 349 | "colab_type": "code", 350 | "colab": {}, 351 | "outputId": "ab75d660-8d8e-4e52-9776-081880a96e85" 352 | }, 353 | "source": [ 354 | "# Download data\n", 355 | "# Dữ liệu đã tiền xử lý có dạng: mỗi bài báo là một dòng, từ đầu tiên là nhãn (chủ đề) của dòng đó\n", 356 | "!wget -nc \"https://github.com/nguyenvanhieuvn/text-classification-tutorial/raw/master/news_categories.zip\"\n", 357 | "!unzip -n \"news_categories.zip\"\n", 358 | "!head \"news_categories.txt\"" 359 | ], 360 | "execution_count": null, 361 | "outputs": [ 362 | { 363 | "output_type": "stream", 364 | "text": [ 365 | "File ‘news_categories.zip’ already there; not retrieving.\n", 366 | "\n", 367 | "Archive: news_categories.zip\n", 368 | "__label__thể_thao sanchez không dự trận khai màn nh anh cùng arsenal bóng_đá anh zing vn tuyển_thủ chile không kịp hồi_phục thể_lực để cùng pháo thủ_thành london tham_dự trận đầu_tiên tại premier_league 2015 2016 diễn ra ngày 9 8 arsenal tới singapore liverpool đổ_bộ xuống thái_lan hai đội_bóng danh_tiếng tại giải ngoại_hạng_anh bắt_đầu có chuyến du_đấu châu á thầy_trò hlv brendan_rodgers có_mặt tại thái_lan chuẩn_bị cho trận_đấu diễn ra ngày 14 7 trả_lời phỏng_vấn trong chuyến du_đấu tại singapore hlv arsene_wenger xác_nhận tiền_đạo alexis_sanchez sẽ vắng_mặt trong trận khai màn premier_league theo chiến_lược gia người pháp cựu ngôi_sao barca cần được nghỉ_ngơi sau khi tham_dự copa_america trên quê_hương alexis sẽ trở_lại arsenal ngày 3 8 các cầu_thủ thường lấy lại thể_lực trong khoảng 3 tuần mới có_thể thi_đấu alexis có_thể nghỉ ít hơn tuy_nhiên anh ấy chắc_chắn không tham_dự trận_đấu đầu_tiên của mùa_giải mới trang bbc dẫn lại bài phỏng_vấn của hlv wenger ngoài trận xông đất premier_league sanchez cũng không góp_mặt trong trận tranh community_shield với chelsea bởi trận_đấu này diễn ra ngày 2 8 một ngày trước khi chân_sút 26 tuổi trở_lại arsenal sanchez là nhân_tố then_chốt giúp chile lần đầu vô_địch copa_america ảnh bbc mùa_giải vừa_qua cựu tiền_đạo barcelona thi_đấu rất thuyết_phục anh ghi 25 bàn sau 52 trận giúp pháo_thủ vô_địch fa_cup và cán đích vị_trí thứ 3 tại premier_league theo đó arsenal giành vé dự vòng bảng champions_league mùa tới tại copa_america vừa_qua sanchez chỉ ghi 1 bàn tuy_nhiên giới chuyên_môn đánh_giá anh là một trong những mắt_xích quan_trọng nhất giúp chủ_nhà chile tiến tới chung_kết ở trận_đấu cuối_cùng sanchez và đồng_đội xuất_sắc đánh_bại argentina để lần đầu vô_địch giải_đấu danh_giá nhất nam_mỹ theo lịch arsenal sẽ nổ tiếng súng lệnh tại premier_league mùa này khi tiếp west_ham trên sân_nhà lúc 19h30 ngày 9 8 giống alexis_sanchez bộ đôi hậu_vệ pablo_zabaleta và martin_demichelis cũng không kịp cùng manchester_city đá trận khai_mạc premier_league manchester_united không nhận được sự phục_vụ của angel_di_maria và marcos_rojo bốn cầu_thủ này đều đá trọn trận chung_kết copa_america cùng đội_tuyển argentina arsenal f c câu_lạc_bộ bóng_đá arsenal còn được biết đến với biệt_danh pháo_thủ là một câu_lạc_bộ bóng_đá lớn tại anh có trụ_sở ở holloway london câu_lạc_bộ hiện đang chơi ở giải bóng_đá ngoại_hạng_anh là một trong những câu_lạc_bộ thành_công nhất của bóng_đá anh arsenal đã giành được tổng_cộng 13 danh_hiệu vô_địch quốc_gia năm 1913 đội_bóng chuyển về phía bắc lấy sân_vận_động highbury làm sân_nhà và thi_đấu tại đó trong suốt 93 năm năm 2006 đội_bóng chuyển đến sân_vận_động emirates và lấy đó làm sân_nhà cho đến nay arsenal là câu_lạc_bộ kình_địch với đội_bóng cùng khu_vực tottenham_hotspur bạn có biết thierry_henry là cầu_thủ ghi_bàn nhiều nhất cho câu_lạc_bộ với 228 bàn_thắng trong những năm 1999 đến 2007 và đầu năm 2012 thành_lập 1886 biệt_danh pháo_thủ sân_vận_động emirates \n", 369 | "__label__âm_nhạc những sao việt hóa_thân thành phó nháy trong mv nhạc_việt zing vn miu_lê tiêu_châu_như_quỳnh phùng_ngọc_huy đều chọn hình_tượng nhiếp_ảnh_gia khi xuất_hiện trong sản_phẩm riêng những sao việt hóa_thân thành phó nháy trong mv miu_lê tiêu_châu_như_quỳnh phùng_ngọc_huy đều chọn hình_tượng nhiếp_ảnh_gia khi xuất_hiện trong sản_phẩm riêng miu lê trong lặng thầm yêu lặng_thầm yêu là một trong những mv đánh_dấu sự trưởng_thành của miu_lê trong năm 2012 trong sản_phẩm này cô hóa_thân thành một nàng nhiếp_ảnh_gia xinh_đẹp và cá_tính công_việc dường_như chỉ dành cho phái_mạnh này đã khiến cô có cơ_duyên gặp_gỡ tình_yêu của mình hot boy tuấn_kiệt sau những lần chụp ảnh cho anh cô đã đem_lòng yêu chàng hot boy với nụ_cười tỏa nắng này tuy_nhiên khoảng_cách giữa hai người quá lớn miu lê chỉ là một cô_gái làm nghề nhiếp_ảnh cá_tính còn tuấn_kiệt lại là một hot boy điển_trai với tương_lai rộng_mở điều quan_trọng nhất là trước khi biết cô nhiếp_ảnh chàng_trai đã tìm được một_nửa của mình chấp_nhận là người đến sau miu lê chôn giấu tình_yêu sâu trong lòng và cầu_chúc cho tình_yêu của người_thương mỗi lúc nhớ tuấn_kiệt miu_lê thường ngắm lại những bức hình đã chụp về anh tất_cả những tấm ảnh đó chỉ làm cô thêm đau_lòng và cào xé tâm_can cuối_cùng cô quyết_định đi xa để tìm sự bình_yên trong tâm_hồn will 365 trong nơi anh không thuộc về nơi anh không thuộc về là một trong những mv khá đặc_biệt của 365 vì đây là lần đầu_tiên ngô_thanh_vân cho_phép các học_trò tình_tứ với gái lạ với mô típ mới 5 chàng_trai của 365 hóa_thân thành những hình_tượng khác nhau đáng chú_ý nhất phải kể đến will với hình_ảnh một chàng nhiếp_ảnh_gia điển_trai và đầy cá_tính anh có thói_quen lưu_giữ lại những hình_ảnh của người mình yêu điều đó đã khiến hình_ảnh của will trở_nên nổi_bật và ấn_tượng nhất so với các thành_viên trong mv này vì điều đó khi hai người chia_tay anh là người đau_đớn nhất khi nhớ về những kỷ_niệm chẳng thể_nào quên của hai người khi xưa rainboy_boys trong ước_mơ trong anh ước_mơ trong anh là mv thứ 2 của nhóm nhạc rainboy_boys sau mv ra_mắt đầu_tiên ấn_tượng walk_away trong mv này 7 chàng_trai_hóa_thân vào những câu_chuyện tình khá dễ_thương trong số đó chàng_trai điển_trai ryan_hải_đăng hô biến mình thành một chàng nhiếp_ảnh_gia đường_phố ghi lại những khoảnh_cách của cuộc_sống và con_người sài_gòn bên cạnh đó chàng còn ghi lại những khoảnh_khắc tình_yêu tuyệt_diệu của 6 thành_viên rainboy_boys nổi_bật và gây ấn_tượng đặc_biệt với khán_giả chính là hình_ảnh cuối_cùng của anh_chàng ira_hoàng_thy giúp người bạn gái đang ngồi trên xe_lăn đi dạo trên phố_phường đây cũng là khoảnh_khắc đầy ý_nghĩa khép lại ước_mơ trong anh v music trong xinh_tươi việt_nam là một trong những mv nổi_tiếng nhất của v music khi lê_thiên_bảo chưa tách nhóm xinh_tươi việt_nam cũng góp_phần giúp học_trò của hồ_ngọc_hà gây_dựng được hình_ảnh đẹp trong lòng công_chúng bốn chàng_trai hóa_thân thành những chàng nhiếp_ảnh_gia dễ_thương và điển_trai đi khắp miền để ghi lại những hình_ảnh đẹp về quê_hương đất_nước trong hành_trình đó các anh đã ghi lại những khoảnh_khắc khó quên về người con_gái việt_nam trong tà áo_dài một mv với những khoảnh_khắc ý_nghĩa 4 chàng nhiếp_ảnh_gia v music thực_sự đã mang đến một sản_phẩm đáng nhớ cho người xem tiêu_châu_như_quỳnh trong có bao điều hợp_tác cùng rapper antonio_maximus có bao điều là mv của tiêu_châu_như quỳnh sau khi rời khỏi giọng hát việt 2012 mv mang đến cho khán_giả những hình_ảnh về cuộc_sống thường_nhật của sài_gòn năng_động ồn_ã nhưng vẫn đầy bình_yên hóa_thân là một nữ nhiếp_ảnh_gia đường_phố cá_tính xinh_đẹp như quỳnh đã ghi lại nhiều khoảnh_khắc ấn_tượng qua thông_qua ống_kính của mình trong hành_trình rong_ruổi của mình một ngày nọ cô gặp một em bé bán hoa dạo sự trong_trẻo ngây_thơ và sự lam_lũ của cô_bé đã để lại nhiều suy_nghĩ trong nhiếp_ảnh_gia trẻ tuổi về những con_người thầm_lặng tạo nên sắc_màu rực_rỡ cho thủ_đô tươi đẹp mv chuyển_tải tới mọi người thông_điệp ý_nghĩa nếu chịu_khó quan_sát bạn sẽ thấy cuộc_sống quanh mình thật đẹp_đẽ và ấm_áp biết_bao phùng_ngọc_huy trong déjà_vu déjà_vu là mv đánh_dấu sự trở_lại của hồng_mơ giải 3 tiếng hát truyền_hình sau thời_gian ở ẩn trong mv bạn diễn của cô là nam ca_sĩ điển_trai phùng_ngọc_huy trong mv phùng_ngọc_huy vào vai anh_chàng nhiếp_ảnh đẹp_trai vô_tình thấy cô_gái bán hàng nước giỏi đàn hát đêm về anh mơ thấy cô xuất_hiện trên sân_khấu ca_nhạc với vai_trò ca_sĩ nổi_tiếng cảm_giác đó chỉ thoáng qua nhưng sau đó đã là hiện_thực khi anh_chàng vô_tình gặp lại cô theo đất_việt \n", 370 | "__label__nhịp_sống vợ phải quỳ gối mới được nói_chuyện cười zing vn hai bợm nhậu nói_chuyện với nhau dạo này mày đi nhậu mà không sợ vợ la_ó sao ôi trời vợ tao sợ tao lắm vậy là mày bản_lĩnh giống tao rồi mày biết không khi tao đi nhậu về vợ phải quỳ gối mới nói_chuyện được với tao thế thì mày hơn đứt tao rồi chỉ tao cách với dễ ợt khi nhậu về tao chui xuống gầm giường định_nghĩa kết_hôn với mỗi phái định_nghĩa kết_hôn lại khác nhau hoàn_toàn \n", 371 | "__label__công_nghệ lumia 520 sẽ có giá 3 9 triệu đồng tại việt_nam công_nghệ zing vn dự_kiến sản_phẩm sẽ được bán ra vào ngày 1 4 và việt_nam chính là thị_trường đầu_tiên nokia chọn để phát_hành chiếc điện_thoại chạy windows_phone 8 này lumia 520 sẽ có giá 3 9 triệu đồng tại việt_nam dự_kiến sản_phẩm sẽ được bán ra vào ngày 1 4 và việt_nam chính là thị_trường đầu_tiên nokia chọn để phát_hành chiếc điện_thoại chạy windows_phone 8 này lumia 520 là một trong 2 chiếc smartphone của nokia ra_mắt tại triển_lãm mwc vừa_qua sản_phẩm này được nhắm vào phân_khúc smartphone tầm thấp nhưng cấu_hình khá ấn_tượng cụ_thể lumia 520 tích_hợp màn_hình 4 inch độ_phân_giải 480x800 pixel chip lõi kép tốc_độ 1 ghz ram 512 mb và camera sau 5 megapixel không có đèn flash khi bán ra lumia 520 sẽ là điện_thoại windows_phone 8 rẻ nhất trên thị_trường đây được xem là cấu_hình mơ_ước đối_với một sản_phẩm tầm thấp đó là chưa kể đến việc nó còn được tích_hợp tính_năng cảm_ứng siêu_nhạy super_sensitive_touch cho khả_năng thao_tác cả bằng găng_tay dày bộ_nhớ_trong của máy là 8 gb máy mỏng 9 1 mm và nặng 124 gram bên cạnh đó chiếc lumia 720 cũng sẽ ra_mắt thị_trường việt trong đợt phát_hành này với giá 7 4 triệu đồng lumia 720 được đánh_giá cao tại mwc vừa_qua model này hướng đến phân_khúc smartphone tầm trung với màn_hình 4 3 inch độ_phân_giải wvga 480 x 800 pixel chip lõi kép tộc độ 1 2 ghz ram 512 mb và camera sau 6 7 megapixel camera của lumia 720 sử_dụng cùng ống_kính góc rộng carl_zeiss f 1 9 mà theo quảng_cáo của nokia là cho chất_lượng ảnh chụp ngang_ngửa với những smartphone có giá cao hơn nhiều lumia 720 sẽ có giá 7 4 triệu đồng lumia 720 được đánh_giá là chiếc smartphone đẹp nhất từ trước đến nay trong gia_đình nhà lumia với độ mỏng hợp_lý 9 mm nặng 128 gram và thiết_kế nguyên khối chắc_chắn model này cũng được tích_hợp tính_năng sạc không dây nhưng phải qua một bộ vỏ ngoài dự_kiến bộ đôi này sẽ được phát_hành ra thị_trường từ ngày 1 4 hiện_tại chuỗi cửa_hàng viettel_store đã chuẩn_bị nhận đặt trước sản_phẩm này 15 31 3 với nhiều phần quà hấp_dẫn chẳng_hạn như tặng phiếu mua hàng hoặc trúng một chiếc lumia 520 hoặc 720 miễn_phí thành_duy_theo infonet \n", 372 | "__label__thể_thao hà_nội t t chốt danh_sách dự afc cup thể_thao việt_nam zing vn tiền_vệ có lối chơi sáng_tạo bậc nhất của hà_nội t t benicio được hlv phan_thanh_hùng loại khỏi danh_sách dự afc cup để giành sức cho sân_chơi v league hà_nội t t chốt danh_sách dự afc cup tiền_vệ có lối chơi sáng_tạo bậc nhất của hà_nội t t benicio được hlv phan_thanh_hùng loại khỏi danh_sách dự afc cup để giành sức cho sân_chơi v league ngày hôm_qua hà_nội t t đã chính_thức chốt danh_sách cầu_thủ tham_dự sân_chơi afc_cup bất_chấp việc có lực_lượng khá mỏng ở mùa_giải năm nay hlv phan_thanh_hùng vẫn quyết_định sử_dụng những quân bài tốt nhất của mình cho sân_chơi châu_lục nội_binh có hồng_sơn hồng_minh văn_biển công_vinh ngoại_binh có cristiano gonzalo matias sự vắng_mặt đáng tiếc duy_nhất trong danh_sách dự afc_cup của hà_nội t t là tiền_vệ có lối chơi rất sáng_tạo benicio có_lẽ hlv phan_thanh_hùng quyết_định cất cầu_thủ con cưng này cho mục_tiêu bảo_vệ chức vô_địch v league theo kết_quả chia bảng afc_cup 2011 mới được lđbđ châu_á afc công_bố đương_kim vô_địch v league hà_nội t t sẽ nằm bảng g cùng clb muang_thong_united của thái_lan tampines_rovers singapore victory sc maldives đây là bảng đấu khá cân_bằng và thầy_trò hlv phan_thanh_hùng sẽ phải vất_vả tranh 2 vé đi tiếp với các đội mạnh của thái_lan và singapore dù vậy nếu chơi đúng sức hà_nội t t hoàn_toàn có khả_năng ghi tên vào vòng đấu_loại trực_tiếp giống như thành_tích mà b bình dương và shb_đà_nẵng đã làm được_mùa trước ngày 2 3 tới thầy_trò hlv phan_thanh_hùng sẽ chính_thức bước ra sân_chơi châu_lục với chuyến làm_khách của clb muang_thong_united lâm_thỏa_theo bưu_điện việt_nam \n", 373 | "__label__thời_sự vụ xe điên gây tai_nạn ở sài_gòn tài_xế bị tâm_thần thời_sự zing vn bị khống_chế sau khi gây tai_nạn liên_hoàn tài_xế xe bmw phun nước_bọt vung chân đạp loạn_xạ các cảnh_sát gia_đình cho_hay ông này bị bệnh_tâm_thần tâm_lý bất_ổn tối 21 11 công_an quận 3 tp hcm cho biết đã làm rõ một_số tình_tiết liên_quan đến vụ xe điên gây tai_nạn rồi tông csgt bỏ chạy tài_xế là ông phạm_cao_v ngụ quận 2 vẫn mất_tích gia_đình cùng cơ_quan_chức_năng đang truy_tìm 13h30 cùng ngày anh v lái_xe bmw màu trắng bks 63a lưu_thông trên đường điện_biên_phủ hướng từ nam_kỳ_khởi_nghĩa ra ngã tư hàng_xanh quận bình_thạnh trên đường đi tài_xế này gây tai_nạn với xe_máy do chị đỗ_thị_liên_h 29 tuổi ngụ quận tân_bình điều_khiển thấy ôtô không dừng lại mà bỏ chạy nhiều người đi đường đuổi theo tài_xế tông vào xe đặc_chủng để bỏ chạy ảnh nguyễn_thành chiếc bmw chạy đến giao_lộ điện_biên_phủ hai_bà_trưng thì bị một csgt chặn bắt tuy_nhiên tài_xế cố_tình tông vào xe đặc_chủng để thoát_thân csgt rút súng bắn chỉ_thiên cảnh_cáo do đường tắc nên tài_xế phải tấp vào lề_đường hai_bà_trưng nhưng lại chốt cửa cố_thủ trong xe hơn 30 phút sau trung_tá lê_văn_thanh tổ_trưởng điều_tra xử_lý tai_nạn đội csgt công_an quận 3 đến thuyết_phục ông v mới chịu mở_cửa tuy_nhiên anh ta phun nước_miếng vào anh_em vung chân đạp loạn_xạ và cào_cấu tôi ông thanh nói một_số người đi đường bức_xúc xông vào đánh tài_xế nhưng được csgt can_ngăn một lúc sau người_nhà xuất_hiện ông v mới dần bình_tâm rồi bỏ đi clip csgt khống_chế tài_xế ôtô điên tài_xế ôtô tông một cô_gái đi xe_máy rồi bỏ chạy khi bị cảnh_sát giao_thông yêu_cầu dừng thì nghi_can tông vào lực_lượng chức_năng cố_thủ trong xe sau đó gia_đình cung_cấp giấy_tờ xe bmw cùng giấy_tờ cá_nhân liên_quan đến ông v theo đó ôtô đứng_tên một công_ty ở tiền_giang nơi mẹ ông v làm_việc ông v có bệnh_án bệnh nan_y và được bệnh_viện xác_nhận bị tâm_thần trước khi bị bệnh người đàn_ông này có giấy_phép lái ôtô theo gia_đình ông v sau khi bị bệnh nan_y do dùng nhiều thuốc để điều_trị nên người này có dấu_hiệu tâm_thần tâm_lý bất_ổn gần đây ông ta liên_tục đòi lấy ôtô đi chơi gia_đình không cho thì đòi tuyệt_thực từ mặt mẹ và vợ_con trưa 21 11 thấy mọi người đi vắng ông v lấy ôtô đi lòng_vòng và gây ra vụ_việc lái_xe bmw tông cảnh_sát giao_thông ở sài_gòn tài_xế xe bmw tông một cô_gái đi xe_máy rồi bỏ chạy khi bị lực_lượng chức_năng yêu_cầu dừng tài_xế này tông xe vào cảnh_sát giao_thông và xe đặc_chủng sau đó cố_thủ bên trong \n", 374 | "__label__thế_giới lính nga nhảy_dù xuống tảng băng trôi trên bắc_cực thế_giới zing vn 50 binh_sĩ nga vừa đồng_loạt nhảy khỏi máy_bay ilyushin 76 xuống một tảng băng trôi gần bắc_cực trong cuộc tập_trận tìm_kiếm cứu nạn nguy_hiểm đại_tá yevgeny_meshkov phát_ngôn_viên lực_lượng lính_dù cho biết dù thời_tiết giá_lạnh kèm theo gió lớn nhưng các binh_sĩ vẫn thực_hiện tốt nhiệm_vụ tiếp đất và nhận hàng_hóa họ sử_dụng hệ_thống dù arbalet cho_phép nhảy ra từ máy_bay đang di_chuyển với vận_tốc 400 km h binh_sĩ nhảy_dù khỏi máy_bay ilyushin 76 ảnh itar tass theo quân_đội nga cuộc tập_trận này nhằm mục_đích tăng_cường khả_năng tìm_kiếm cứu nạn để ứng_phó kịp_thời với những tình_huống khẩn_cấp ở bắc_cực những người tham_gia tập_trận phải dựng trại trong điều_kiện khắc_nghiệt dao và súng_trường giúp họ chống lại các loài động_vật hoang_dã ngoài những con gấu_bắc_cực đói ăn sự va_chạm của các tảng băng trôi hay bề_mặt băng sụt lún có_thể khiến họ phải trả_giá bằng mạng sống cờ crimea tung bay ảnh rt những binh_sĩ tham_gia huấn_luyện sẽ cắm cờ crimea ở khu_vực đích_thân thủ_tướng crimea ông sergey_aksyonov trao lá cờ này cho các binh_sĩ bán bán_đảo crimea cũng là nơi đặt trụ_sở của hạm_đội biển_đen của nga \n", 375 | "__label__thời_trang ngắm vĩnh_thụy đầy chất chơi thời_trang zing vn những khoảnh_khắc ngẫu_hứng chụp tình_cờ vĩnh_thụy tại một nơi công_cộng đã vẽ nên một giải bạc siêu_mẫu mạnh_mẽ nam_tính và đầy chất chơi ngắm vĩnh_thụy đầy chất chơi những khoảnh_khắc ngẫu_hứng chụp tình_cờ vĩnh_thụy tại một nơi công_cộng đã vẽ nên một giải bạc siêu_mẫu mạnh_mẽ nam_tính và đầy chất chơi sau hơn hai tháng ròng_rã cùng đoàn phim và gần một tháng quay ngoại_cảnh ở đà_lạt vai diễn của vĩnh_thụy trong bộ phim nhật_ký bạch_tuyết đã kết_thúc hiện_tại vĩnh_thụy đang dành thời_gian nghỉ_ngơi để chuẩn_bị bước vào giai_đoạn tập_luyện cao_độ cho cuộc thi mister_international 2009 mà vĩnh_thụy sẽ là người_mẫu đại_diện việt_nam tham_dự mister_international là cuộc_thi mà tiến_đoàn đã từng đăng_quang năm 2008 năm nay cuộc thi sẽ diễn ra vào tháng 11 tại đài_loan chia_sẻ thêm những kế_hoạch sắp tới vĩnh_thụy tâm_sự hiện_tại có vài bộ phim đang mời thụy tham_gia nhưng thụy đang cân_nhắc về mặt thời_gian để đảm_bảo việc tập_luyện cho cuộc_thi mister_international sắp tới với cuộc_thi này thụy mong mình sẽ có cơ_hội tự trao dồi thêm kiến_thức về nghề cũng như có thêm dịp bước ra ngoài cọ_xát và hội_nhập cùng người_mẫu các nước khác mời bạn cùng ngắm bộ ảnh mới_mẻ của vĩnh_thụy theo dân_trí \n", 376 | "__label__du_lịch bố_mẹ dừng tàu lượn siêu_tốc vì lo cho con_gái du_lịch zing vn quá giận vì con chơi trò mạo_hiểm mà không được phép hai vị phụ_huynh đã cho dừng cả đoàn tàu lượn siêu_tốc trong một công_viên giải_trí ở trung_quốc theo scmp sự_việc diễn ra ở công_viên giải_trí queershan tại liễu_châu khu_tự_trị dân_tộc choang_quảng_tây hôm 6 2 một thiếu_nữ 14 tuổi rất muốn được đi tàu lượn siêu_tốc nhưng bố_mẹ không đồng_ý trong lúc họ sơ_ý em đã lẻn vào ngồi trên xe lo_lắng tức_giận vì hành_động của con_gái bố_mẹ em đã vào trung_tâm điều_khiển trò_chơi và yêu_cầu dừng tàu lượn lại ngay_lập_tức để họ đưa con_gái ra khỏi đoàn tàu nhân_viên khu giải_trí phải trèo lên đường_ray để đưa cô_gái xuống ảnh scmp đoàn tàu lượn dừng lại khi đã lăn bánh được một đoạn ngắn sự_việc bất_ngờ khiến các hành_khách tưởng có sự_cố về kỹ_thuật nhưng nhân_viên khu giải_trí giải_thích rằng chuyến đi bị ngừng lại do phụ_huynh không đồng_ý cho con_gái tham_gia sau sự_việc nhiều người lên_tiếng chỉ_trích cho_rằng ông bố bà mẹ hành_động thái quá tuy_vậy cũng có người tỏ ra thông_cảm trước sự lo_lắng của cặp vợ_chồng này đặc_biệt sau vụ tai_nạn về một thiếu_nữ 14 tuổi văng khỏi đu_quay và thiệt_mạng xảy ra hôm 3 2 ở công_viên zhaohua trùng_khánh trung_quốc \n", 377 | "__label__thời_sự cụ bà 84 tuổi đặc_trị bệnh chó dại thời_sự zing vn người bị chó dại cắn chưa phát bệnh thì chỉ cần liều duy_nhất kèm theo hướng_dẫn của bà cụ phạm_thị_trinh 84 tuổi là có_thể khỏi bệnh liều thuốc đặc_trị bệnh chó dại cắn nhiều năm trở_lại đây người_dân vùng núi nam_dương bắc_giang vẫn thường rỉ_tai nhau về cách điều_trị bệnh chó dại cắn độc_đáo bằng thuốc_nam của cụ bà phạm_thị_trinh sn 1931 ở thôn biềng xã nam_dương dù năm nay đã bước qua cái tuổi xưa_nay hiếm nhưng đôi mắt cụ vẫn rất tinh hàm_răng hạt bắp đen_láy không giống hình_ảnh chống gậy lưng còng như các cụ cùng độ tuổi khác tự tay pha ấm trà vùng nam_dương mời khách cụ trinh vừa kể về cơ_duyên với phương_thuốc đặc_biệt này cụ bảo mình sinh ra và lớn lên ở quỳnh_thái quỳnh_phụ thái_bình vào những năm 30 thế_kỷ trước trong một gia_đình đông anh_em gia_đình có truyền_thống bốc thuốc chữa bệnh từ nhiều đời trong nhà có rất nhiều các loại thuốc khác nhau hàng ngày có nhiều người tới khám bệnh trước đây các anh_chị tôi đi làm_ăn và lập gia_đình sớm chỉ còn tôi ở nhà hầu đèn nước cho thầy chữa bệnh thỉnh_thoảng hết thuốc thầy lại đeo bị dẫn tôi đi hái thuốc về sao thầy tôi có kể lại nghề bốc thuốc chữa bệnh được cụ nội truyền lại năm 9 tuổi tôi cũng có xin thầy được học bốc thuốc chữa bệnh nhưng thầy mắng con_gái học làm gì cụ kể thời đó cứ vào mùa hè nắng_nóng là bệnh chó dại lại tăng đột_biến trong vùng lại không ai chữa được bệnh nên hầu_như ngày nào cũng có người tới xin thuốc bà thường được bố cho l đi chế_biến thuốc theo hướng_dẫn do phương_thuốc đơn_giản nên bà còn nhớ rõ bà cụ phạm_thị_trinh 84 tuổi với phương_thuốc đặc_trị bệnh dại do chó cắn đến năm 14 tuổi chiến_tranh khiến cả gia_đình bà trinh phải sơ_tán lên vùng nam_dương huyện lục_nam để sinh_sống và nhanh_chóng hòa_nhập với môi_trường ở đây bằng nghề buôn các mặt_hàng nông_sản vào mùa nắng_nóng nhiều người_dân ở trong vùng bị chó dại cắn chứng_kiến cảnh người dân_nghèo không có tiền điều_trị nên phát dại không kiểm_soát được hành_vi và gây nguy_hại cho những người xung_quanh bà trinh bắt_đầu điều_chế liều thuốc chữa_trị mà từng phụ thầy chữa bệnh trước đó những viên thuốc đặc_trị virus dại do chó cắn được điều_chế vê thành từng viên màu đen như hạt nhãn liều thuốc được lấy từ những nguyên_liệu rất đơn_giản và gần_gũi gồm nhọ_nồi nọc_độc con cành cành gạo_nếp cơm nhão trong đó quan_trọng nhất là nọc_độc của con cành cành hay còn gọi là con văn_liệu có đầu màu đỏ thường thấy ở ruộng rau_muống khi bắt được con cành cành chỉ cần lấy phần nọc_độc ở đuôi đem phơi khô và tán nhuyễn thành bột gạo_nếp được sao vàng và tán nhuyễn nhọ_nồi chỉ được lấy từ chảo nấu bếp củi không được lấy từ các nồi khác ba nguyên_liệu trên cùng với cơm nhão kết_hợp theo tỉ_lệ 1 1 1 1 sau đó dùng tay vê thành từng viên bằng đầu đũa rồi đem phơi khô là dùng được viên thuốc khi điều_chế xong sẽ có màu xám đen giống như hạt nhãn cứu người bị chó dại cắn cầm lọ thuốc trên tay cụ trinh cho_biết mỗi lần chế thuốc đều làm sẵn một lọ dự_phòng loại thuốc này không mùi không vị khi uống vào sẽ có cảm_giác say người nôn_nao rất mệt_mỏi tùy vào thể_trạng của mỗi người sẽ sử_dụng liều_lượng phù_hợp người bình_thường sẽ được dùng một liều 6 7 viên cùng một lúc nếu ai có_thể trạng béo tốt sẽ dùng tới 10 viên hay người thể_trạng yếu hơn sẽ chỉ dùng 4 5 viên sau bữa cơm thuốc sẽ cho tác_dụng về cảm_giác khắp cơ_thể chỉ sau vài phút uống người mệt_mỏi nôn_nao khó_chịu sau khi sử_dụng liều thuốc cần phải kiêng_kỵ nhạc đám_ma hai ba tháng ngoài_ra người_bệnh cũng cần phải ăn_uống điều_độ bồi_bổ sức_khỏe mới nhanh hồi lại sức với loại thuốc này người bình_thường uống vào cũng sẽ có cảm_giác mệt_mỏi như người_bệnh tuy_nhiên nếu không thực_sự bị chó dại cắn thì không nên dùng thuốc bởi nó sẽ gây tình_trạng mệt_mỏi nhiều ngày cụ trinh chia_sẻ nghe thì phương_thuốc khá đơn_giản với những nguyên_liệu sẵn có nhưng khi bắt_tay vào làm không hề như_vậy vì trong thành_phần có nọc_độc của côn_trùng nếu làm không đúng tỉ_lệ và quy_trình thì sẽ phản_tác_dụng anh nguyễn_thọ_ngát phải ảnh con_trai út cụ trinh kể về những kỷ_niệm người_bệnh tới điều_trị tại nhà nhắc tới những bệnh_nhân mình từng chữa_trị bà trinh cho_hay cách đây vài năm có một người đàn_ông ở cùng xã nhưng khác thôn bị chó dại cắn sau nhiều ngày mới đến xin thuốc lúc đó số thuốc dự_phòng không đủ liều chữa_trị mà vào mùa khô nguyên_liệu gần_như không có tôi khuyên người_nhà đưa đi bệnh_viện tiêm vắc xin cho kịp tuy_nhiên gia_đình khó_khăn và biết tôi từng điều_trị cứu nhiều người nên đã xin được tôi chữa_trị lúc đó thấy hoàn_cảnh bệnh_nhân khó_khăn tôi đi khắp các ruộng rau nhưng cũng chỉ bắt được vài con cành cành về sao cùng các nguyên_liệu khác làm thuốc may_mắn là cộng với số thuốc còn lại trong lọ vừa đủ một liều điều_trị phải mất hai ngày sau người_bệnh đó mới được uống thuốc và không có biểu_hiện gì lạ anh nguyễn_thọ_ngát 42 tuổi con_trai út cụ trinh chia_sẻ thuốc của mẹ tôi chỉ có tác_dụng với những người mới bị chó dại cắn nghĩa_là chưa phát dại người nào có biểu_hiện xùi bọt mép không điều_khiển được hành_vi bản_thân nữa thì thuốc vô tác_dụng tính ra cũng hàng ngàn viên thuốc được điều_chế và chữa cho hàng trăm người trong vùng mẹ tôi cũng từng thử thuốc cho một con chó mới bị cắn bởi con chó dại khác kết_quả con chó được cứu sống và khỏe_mạnh còn ông nguyễn_văn_kính chủ_tịch ubnd xã nam_dương cho biết bà_phạm_thị_trinh đã sống ở đây nhiều năm và được người_dân trong vùng biết đến với phương_thuốc đặc_trị virus dại rất nhiều người không_chỉ trong xã mà các vùng lân_cận cũng tới xin được điều_trị bà trinh thường cho thuốc miễn_phí và chữa khỏi hoàn_toàn cho họ \n" 378 | ], 379 | "name": "stdout" 380 | } 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "metadata": { 386 | "scrolled": true, 387 | "id": "jpZ60BlfMwyF", 388 | "colab_type": "code", 389 | "colab": {}, 390 | "outputId": "7832b310-c7ea-4dd2-e04a-12690af7039f" 391 | }, 392 | "source": [ 393 | "# Thống kê số lượng data theo nhãn\n", 394 | "count = {}\n", 395 | "for line in open('news_categories.txt'):\n", 396 | " key = line.split()[0]\n", 397 | " count[key] = count.get(key, 0) + 1\n", 398 | "\n", 399 | "for key in count:\n", 400 | " print(key, count[key])" 401 | ], 402 | "execution_count": null, 403 | "outputs": [ 404 | { 405 | "output_type": "stream", 406 | "text": [ 407 | "__label__thể_thao 2611\n", 408 | "__label__âm_nhạc 2595\n", 409 | "__label__nhịp_sống 2613\n", 410 | "__label__công_nghệ 2595\n", 411 | "__label__thời_sự 2607\n", 412 | "__label__thế_giới 2602\n", 413 | "__label__thời_trang 2596\n", 414 | "__label__du_lịch 2593\n", 415 | "__label__sống_trẻ 2602\n", 416 | "__label__giáo_dục 2603\n", 417 | "__label__kinh_doanh 2597\n", 418 | "__label__pháp_luật 2592\n", 419 | "__label__giải_trí 2604\n", 420 | "__label__phim_ảnh 2596\n", 421 | "__label__xe_360 2602\n", 422 | "__label__ẩm_thực 2482\n", 423 | "__label__xuất_bản 2599\n", 424 | "__label__sức_khỏe 2589\n" 425 | ], 426 | "name": "stdout" 427 | } 428 | ] 429 | }, 430 | { 431 | "cell_type": "code", 432 | "metadata": { 433 | "id": "ClZ0AZOoMwyL", 434 | "colab_type": "code", 435 | "colab": {}, 436 | "outputId": "b1e7b2df-2cd7-4a34-ab26-6034d43e3880" 437 | }, 438 | "source": [ 439 | "# Thống kê các word xuất hiện ở tất cả các nhãn\n", 440 | "total_label = 18\n", 441 | "vocab = {}\n", 442 | "label_vocab = {}\n", 443 | "for line in open('news_categories.txt'):\n", 444 | " words = line.split()\n", 445 | " # lưu ý từ đầu tiên là nhãn\n", 446 | " label = words[0]\n", 447 | " if label not in label_vocab:\n", 448 | " label_vocab[label] = {}\n", 449 | " for word in words[1:]:\n", 450 | " label_vocab[label][word] = label_vocab[label].get(word, 0) + 1\n", 451 | " if word not in vocab:\n", 452 | " vocab[word] = set()\n", 453 | " vocab[word].add(label)\n", 454 | "\n", 455 | "count = {}\n", 456 | "for word in vocab:\n", 457 | " if len(vocab[word]) == total_label:\n", 458 | " count[word] = min([label_vocab[x][word] for x in label_vocab])\n", 459 | " \n", 460 | "sorted_count = sorted(count, key=count.get, reverse=True)\n", 461 | "for word in sorted_count[:100]:\n", 462 | " print(word, count[word])" 463 | ], 464 | "execution_count": null, 465 | "outputs": [ 466 | { 467 | "output_type": "stream", 468 | "text": [ 469 | "và 14255\n", 470 | "của 13177\n", 471 | "là 9983\n", 472 | "có 9162\n", 473 | "được 9131\n", 474 | "trong 8654\n", 475 | "một 7575\n", 476 | "cho 7483\n", 477 | "với 7195\n", 478 | "không 6591\n", 479 | "các 6300\n", 480 | "người 6088\n", 481 | "khi 6011\n", 482 | "này 5301\n", 483 | "đến 5165\n", 484 | "để 5123\n", 485 | "đã 4431\n", 486 | "nhiều 4167\n", 487 | "trên 3842\n", 488 | "từ 3820\n", 489 | "vào 3617\n", 490 | "đó 3207\n", 491 | "những 3097\n", 492 | "ở 2943\n", 493 | "ra 2767\n", 494 | "tại 2756\n", 495 | "vn 2738\n", 496 | "lại 2673\n", 497 | "cũng 2622\n", 498 | "phải 2615\n", 499 | "còn 2589\n", 500 | "theo 2565\n", 501 | "nhưng 2545\n", 502 | "zing 2519\n", 503 | "về 2170\n", 504 | "sau 2047\n", 505 | "làm 1983\n", 506 | "lên 1921\n", 507 | "hơn 1755\n", 508 | "đây 1692\n", 509 | "năm 1654\n", 510 | "sẽ 1597\n", 511 | "chỉ 1569\n", 512 | "cả 1534\n", 513 | "cùng 1490\n", 514 | "ngày 1484\n", 515 | "như 1467\n", 516 | "mà 1458\n", 517 | "vẫn 1386\n", 518 | "đi 1373\n", 519 | "2 1358\n", 520 | "mới 1357\n", 521 | "khác 1300\n", 522 | "3 1296\n", 523 | "hai 1278\n", 524 | "qua 1250\n", 525 | "bạn 1138\n", 526 | "bên 1137\n", 527 | "1 1136\n", 528 | "khiến 1122\n", 529 | "5 1114\n", 530 | "lần 1051\n", 531 | "mình 1045\n", 532 | "lớn 1030\n", 533 | "bị 1022\n", 534 | "biết 1013\n", 535 | "trước 1000\n", 536 | "rất 991\n", 537 | "tới 968\n", 538 | "bằng 948\n", 539 | "mang 929\n", 540 | "nên 897\n", 541 | "4 896\n", 542 | "đang 870\n", 543 | "nước 863\n", 544 | "cách 863\n", 545 | "việt_nam 861\n", 546 | "đầu 849\n", 547 | "10 847\n", 548 | "việc 840\n", 549 | "nếu 835\n", 550 | "vừa 826\n", 551 | "thấy 824\n", 552 | "hàng 807\n", 553 | "vì 806\n", 554 | "ảnh 799\n", 555 | "đều 796\n", 556 | "nhau 788\n", 557 | "thời_gian 787\n", 558 | "sự 764\n", 559 | "anh 760\n", 560 | "6 737\n", 561 | "nhất 733\n", 562 | "ngoài 720\n", 563 | "điều 712\n", 564 | "hay 706\n", 565 | "giữa 699\n", 566 | "số 699\n", 567 | "từng 697\n", 568 | "thêm 692\n" 569 | ], 570 | "name": "stdout" 571 | } 572 | ] 573 | }, 574 | { 575 | "cell_type": "code", 576 | "metadata": { 577 | "id": "nL9ZaOgNMwyO", 578 | "colab_type": "code", 579 | "colab": {} 580 | }, 581 | "source": [ 582 | "# loại stopword khỏi dữ liệu\n", 583 | "# lưu file dùng về sau\n", 584 | "stopword = set()\n", 585 | "with open('stopwords.txt', 'w') as fp:\n", 586 | " for word in sorted_count[:100]:\n", 587 | " stopword.add(word)\n", 588 | " fp.write(word + '\\n')\n", 589 | " \n", 590 | "def remove_stopwords(line):\n", 591 | " words = []\n", 592 | " for word in line.strip().split():\n", 593 | " if word not in stopword:\n", 594 | " words.append(word)\n", 595 | " return ' '.join(words)\n", 596 | " \n", 597 | " \n", 598 | "with open('news_categories.prep', 'w') as fp:\n", 599 | " for line in open('news_categories.txt'):\n", 600 | " line = remove_stopwords(line)\n", 601 | " fp.write(line + '\\n')" 602 | ], 603 | "execution_count": null, 604 | "outputs": [] 605 | }, 606 | { 607 | "cell_type": "code", 608 | "metadata": { 609 | "id": "2C-K8a0qMwyR", 610 | "colab_type": "code", 611 | "colab": {}, 612 | "outputId": "ceaf0f2a-418f-4ed8-c0e1-16f95487a8b2" 613 | }, 614 | "source": [ 615 | "!head news_categories.prep" 616 | ], 617 | "execution_count": null, 618 | "outputs": [ 619 | { 620 | "output_type": "stream", 621 | "text": [ 622 | "__label__thể_thao sanchez dự trận khai màn nh arsenal bóng_đá tuyển_thủ chile kịp hồi_phục thể_lực pháo thủ_thành london tham_dự trận đầu_tiên premier_league 2015 2016 diễn 9 8 arsenal singapore liverpool đổ_bộ xuống thái_lan đội_bóng danh_tiếng giải ngoại_hạng_anh bắt_đầu chuyến du_đấu châu á thầy_trò hlv brendan_rodgers có_mặt thái_lan chuẩn_bị trận_đấu diễn 14 7 trả_lời phỏng_vấn chuyến du_đấu singapore hlv arsene_wenger xác_nhận tiền_đạo alexis_sanchez vắng_mặt trận khai màn premier_league chiến_lược gia pháp cựu ngôi_sao barca cần nghỉ_ngơi tham_dự copa_america quê_hương alexis trở_lại arsenal 8 cầu_thủ thường lấy thể_lực khoảng tuần có_thể thi_đấu alexis có_thể nghỉ ít tuy_nhiên ấy chắc_chắn tham_dự trận_đấu đầu_tiên mùa_giải trang bbc dẫn bài phỏng_vấn hlv wenger trận xông đất premier_league sanchez góp_mặt trận tranh community_shield chelsea bởi trận_đấu diễn 8 chân_sút 26 tuổi trở_lại arsenal sanchez nhân_tố then_chốt giúp chile vô_địch copa_america bbc mùa_giải vừa_qua cựu tiền_đạo barcelona thi_đấu thuyết_phục ghi 25 bàn 52 trận giúp pháo_thủ vô_địch fa_cup cán đích vị_trí thứ premier_league arsenal giành vé dự vòng bảng champions_league mùa copa_america vừa_qua sanchez ghi bàn tuy_nhiên giới chuyên_môn đánh_giá mắt_xích quan_trọng giúp chủ_nhà chile tiến chung_kết trận_đấu cuối_cùng sanchez đồng_đội xuất_sắc đánh_bại argentina vô_địch giải_đấu danh_giá nam_mỹ lịch arsenal nổ tiếng súng lệnh premier_league mùa tiếp west_ham sân_nhà lúc 19h30 9 8 giống alexis_sanchez bộ đôi hậu_vệ pablo_zabaleta martin_demichelis kịp manchester_city đá trận khai_mạc premier_league manchester_united nhận phục_vụ angel_di_maria marcos_rojo bốn cầu_thủ đá trọn trận chung_kết copa_america đội_tuyển argentina arsenal f c câu_lạc_bộ bóng_đá arsenal biệt_danh pháo_thủ câu_lạc_bộ bóng_đá trụ_sở holloway london câu_lạc_bộ hiện chơi giải bóng_đá ngoại_hạng_anh câu_lạc_bộ thành_công bóng_đá arsenal giành tổng_cộng 13 danh_hiệu vô_địch quốc_gia 1913 đội_bóng chuyển phía bắc lấy sân_vận_động highbury sân_nhà thi_đấu suốt 93 2006 đội_bóng chuyển sân_vận_động emirates lấy sân_nhà nay arsenal câu_lạc_bộ kình_địch đội_bóng khu_vực tottenham_hotspur thierry_henry cầu_thủ ghi_bàn câu_lạc_bộ 228 bàn_thắng 1999 2007 2012 thành_lập 1886 biệt_danh pháo_thủ sân_vận_động emirates\r\n", 623 | "__label__âm_nhạc sao việt hóa_thân thành phó nháy mv nhạc_việt miu_lê tiêu_châu_như_quỳnh phùng_ngọc_huy chọn hình_tượng nhiếp_ảnh_gia xuất_hiện sản_phẩm riêng sao việt hóa_thân thành phó nháy mv miu_lê tiêu_châu_như_quỳnh phùng_ngọc_huy chọn hình_tượng nhiếp_ảnh_gia xuất_hiện sản_phẩm riêng miu lê lặng thầm yêu lặng_thầm yêu mv đánh_dấu trưởng_thành miu_lê 2012 sản_phẩm cô hóa_thân thành nàng nhiếp_ảnh_gia xinh_đẹp cá_tính công_việc dường_như dành phái_mạnh cô cơ_duyên gặp_gỡ tình_yêu hot boy tuấn_kiệt chụp cô đem_lòng yêu chàng hot boy nụ_cười tỏa nắng tuy_nhiên khoảng_cách quá miu lê cô_gái nghề nhiếp_ảnh cá_tính tuấn_kiệt hot boy điển_trai tương_lai rộng_mở quan_trọng cô nhiếp_ảnh chàng_trai tìm một_nửa chấp_nhận miu lê chôn giấu tình_yêu sâu lòng cầu_chúc tình_yêu người_thương mỗi lúc nhớ tuấn_kiệt miu_lê thường ngắm bức hình chụp tất_cả tấm cô đau_lòng cào xé tâm_can cuối_cùng cô quyết_định xa tìm bình_yên tâm_hồn will 365 nơi thuộc nơi thuộc mv khá đặc_biệt 365 đầu_tiên ngô_thanh_vân cho_phép học_trò tình_tứ gái lạ mô típ chàng_trai 365 hóa_thân thành hình_tượng đáng chú_ý kể will hình_ảnh chàng nhiếp_ảnh_gia điển_trai đầy cá_tính thói_quen lưu_giữ hình_ảnh yêu hình_ảnh will trở_nên nổi_bật ấn_tượng so thành_viên mv chia_tay đau_đớn nhớ kỷ_niệm chẳng thể_nào quên xưa rainboy_boys ước_mơ ước_mơ mv thứ nhóm nhạc rainboy_boys mv ra_mắt đầu_tiên ấn_tượng walk_away mv 7 chàng_trai_hóa_thân câu_chuyện tình khá dễ_thương chàng_trai điển_trai ryan_hải_đăng hô biến thành chàng nhiếp_ảnh_gia đường_phố ghi khoảnh_cách cuộc_sống con_người sài_gòn cạnh chàng ghi khoảnh_khắc tình_yêu tuyệt_diệu thành_viên rainboy_boys nổi_bật gây ấn_tượng đặc_biệt khán_giả chính hình_ảnh cuối_cùng anh_chàng ira_hoàng_thy giúp gái ngồi xe_lăn dạo phố_phường khoảnh_khắc đầy ý_nghĩa khép ước_mơ v music xinh_tươi mv nổi_tiếng v music lê_thiên_bảo chưa tách nhóm xinh_tươi góp_phần giúp học_trò hồ_ngọc_hà gây_dựng hình_ảnh đẹp lòng công_chúng bốn chàng_trai hóa_thân thành chàng nhiếp_ảnh_gia dễ_thương điển_trai khắp miền ghi hình_ảnh đẹp quê_hương đất_nước hành_trình ghi khoảnh_khắc khó quên con_gái tà áo_dài mv khoảnh_khắc ý_nghĩa chàng nhiếp_ảnh_gia v music thực_sự sản_phẩm đáng nhớ xem tiêu_châu_như_quỳnh bao hợp_tác rapper antonio_maximus bao mv tiêu_châu_như quỳnh rời khỏi giọng hát việt 2012 mv khán_giả hình_ảnh cuộc_sống thường_nhật sài_gòn năng_động ồn_ã đầy bình_yên hóa_thân nữ nhiếp_ảnh_gia đường_phố cá_tính xinh_đẹp quỳnh ghi khoảnh_khắc ấn_tượng thông_qua ống_kính hành_trình rong_ruổi nọ cô gặp em bé bán hoa dạo trong_trẻo ngây_thơ lam_lũ cô_bé suy_nghĩ nhiếp_ảnh_gia trẻ tuổi con_người thầm_lặng tạo sắc_màu rực_rỡ thủ_đô tươi đẹp mv chuyển_tải mọi thông_điệp ý_nghĩa chịu_khó quan_sát cuộc_sống quanh thật đẹp_đẽ ấm_áp biết_bao phùng_ngọc_huy déjà_vu déjà_vu mv đánh_dấu trở_lại hồng_mơ giải tiếng hát truyền_hình ẩn mv diễn cô nam ca_sĩ điển_trai phùng_ngọc_huy mv phùng_ngọc_huy vai anh_chàng nhiếp_ảnh đẹp_trai vô_tình cô_gái bán giỏi đàn hát đêm mơ cô xuất_hiện sân_khấu ca_nhạc vai_trò ca_sĩ nổi_tiếng cảm_giác thoáng hiện_thực anh_chàng vô_tình gặp cô đất_việt\r\n", 624 | "__label__nhịp_sống vợ quỳ gối nói_chuyện cười bợm nhậu nói_chuyện dạo mày nhậu sợ vợ la_ó sao ôi trời vợ tao sợ tao lắm vậy mày bản_lĩnh giống tao rồi mày tao nhậu vợ quỳ gối nói_chuyện tao thế thì mày đứt tao rồi tao dễ ợt nhậu tao chui xuống gầm giường định_nghĩa kết_hôn mỗi phái định_nghĩa kết_hôn hoàn_toàn\r\n", 625 | "__label__công_nghệ lumia 520 giá 9 triệu đồng công_nghệ dự_kiến sản_phẩm bán chính thị_trường đầu_tiên nokia chọn phát_hành chiếc điện_thoại chạy windows_phone 8 lumia 520 giá 9 triệu đồng dự_kiến sản_phẩm bán chính thị_trường đầu_tiên nokia chọn phát_hành chiếc điện_thoại chạy windows_phone 8 lumia 520 chiếc smartphone nokia ra_mắt triển_lãm mwc vừa_qua sản_phẩm nhắm phân_khúc smartphone tầm thấp cấu_hình khá ấn_tượng cụ_thể lumia 520 tích_hợp màn_hình inch độ_phân_giải 480x800 pixel chip lõi kép tốc_độ ghz ram 512 mb camera megapixel đèn flash bán lumia 520 điện_thoại windows_phone 8 rẻ thị_trường xem cấu_hình mơ_ước đối_với sản_phẩm tầm thấp chưa kể nó tích_hợp tính_năng cảm_ứng siêu_nhạy super_sensitive_touch khả_năng thao_tác găng_tay dày bộ_nhớ_trong máy 8 gb máy mỏng 9 mm nặng 124 gram cạnh chiếc lumia 720 ra_mắt thị_trường việt đợt phát_hành giá 7 triệu đồng lumia 720 đánh_giá cao mwc vừa_qua model hướng phân_khúc smartphone tầm trung màn_hình inch độ_phân_giải wvga 480 x 800 pixel chip lõi kép tộc độ ghz ram 512 mb camera 7 megapixel camera lumia 720 sử_dụng ống_kính góc rộng carl_zeiss f 9 quảng_cáo nokia chất_lượng chụp ngang_ngửa smartphone giá cao lumia 720 giá 7 triệu đồng lumia 720 đánh_giá chiếc smartphone đẹp nay gia_đình nhà lumia độ mỏng hợp_lý 9 mm nặng 128 gram thiết_kế nguyên khối chắc_chắn model tích_hợp tính_năng sạc dây bộ vỏ dự_kiến bộ đôi phát_hành thị_trường hiện_tại chuỗi cửa_hàng viettel_store chuẩn_bị nhận đặt sản_phẩm 15 31 phần quà hấp_dẫn chẳng_hạn tặng phiếu mua hoặc trúng chiếc lumia 520 hoặc 720 miễn_phí thành_duy_theo infonet\r\n", 626 | "__label__thể_thao hà_nội t t chốt danh_sách dự afc cup thể_thao tiền_vệ lối chơi sáng_tạo bậc hà_nội t t benicio hlv phan_thanh_hùng loại khỏi danh_sách dự afc cup giành sức sân_chơi v league hà_nội t t chốt danh_sách dự afc cup tiền_vệ lối chơi sáng_tạo bậc hà_nội t t benicio hlv phan_thanh_hùng loại khỏi danh_sách dự afc cup giành sức sân_chơi v league hôm_qua hà_nội t t chính_thức chốt danh_sách cầu_thủ tham_dự sân_chơi afc_cup bất_chấp lực_lượng khá mỏng mùa_giải nay hlv phan_thanh_hùng quyết_định sử_dụng quân bài tốt sân_chơi châu_lục nội_binh hồng_sơn hồng_minh văn_biển công_vinh ngoại_binh cristiano gonzalo matias vắng_mặt đáng tiếc duy_nhất danh_sách dự afc_cup hà_nội t t tiền_vệ lối chơi sáng_tạo benicio có_lẽ hlv phan_thanh_hùng quyết_định cất cầu_thủ con cưng mục_tiêu bảo_vệ chức vô_địch v league kết_quả chia bảng afc_cup 2011 lđbđ châu_á afc công_bố đương_kim vô_địch v league hà_nội t t nằm bảng g clb muang_thong_united thái_lan tampines_rovers singapore victory sc maldives bảng đấu khá cân_bằng thầy_trò hlv phan_thanh_hùng vất_vả tranh vé tiếp đội mạnh thái_lan singapore dù vậy chơi đúng sức hà_nội t t hoàn_toàn khả_năng ghi tên vòng đấu_loại trực_tiếp giống thành_tích b bình dương shb_đà_nẵng được_mùa thầy_trò hlv phan_thanh_hùng chính_thức bước sân_chơi châu_lục chuyến làm_khách clb muang_thong_united lâm_thỏa_theo bưu_điện\r\n", 627 | "__label__thời_sự vụ xe điên gây tai_nạn sài_gòn tài_xế tâm_thần thời_sự khống_chế gây tai_nạn liên_hoàn tài_xế xe bmw phun nước_bọt vung chân đạp loạn_xạ cảnh_sát gia_đình cho_hay ông bệnh_tâm_thần tâm_lý bất_ổn tối 21 11 công_an quận tp hcm rõ một_số tình_tiết liên_quan vụ xe điên gây tai_nạn rồi tông csgt bỏ chạy tài_xế ông phạm_cao_v ngụ quận mất_tích gia_đình cơ_quan_chức_năng truy_tìm 13h30 v lái_xe bmw màu trắng bks 63a lưu_thông đường điện_biên_phủ hướng nam_kỳ_khởi_nghĩa ngã tư hàng_xanh quận bình_thạnh đường tài_xế gây tai_nạn xe_máy do chị đỗ_thị_liên_h 29 tuổi ngụ quận tân_bình điều_khiển ôtô dừng bỏ chạy đường đuổi tài_xế tông xe đặc_chủng bỏ chạy nguyễn_thành chiếc bmw chạy giao_lộ điện_biên_phủ hai_bà_trưng thì csgt chặn bắt tuy_nhiên tài_xế cố_tình tông xe đặc_chủng thoát_thân csgt rút súng bắn chỉ_thiên cảnh_cáo do đường tắc tài_xế tấp lề_đường hai_bà_trưng chốt cửa cố_thủ xe 30 phút trung_tá lê_văn_thanh tổ_trưởng điều_tra xử_lý tai_nạn đội csgt công_an quận thuyết_phục ông v chịu mở_cửa tuy_nhiên ta phun nước_miếng anh_em vung chân đạp loạn_xạ cào_cấu tôi ông thanh nói một_số đường bức_xúc xông đánh tài_xế csgt can_ngăn lúc người_nhà xuất_hiện ông v dần bình_tâm rồi bỏ clip csgt khống_chế tài_xế ôtô điên tài_xế ôtô tông cô_gái xe_máy rồi bỏ chạy cảnh_sát giao_thông yêu_cầu dừng thì nghi_can tông lực_lượng chức_năng cố_thủ xe gia_đình cung_cấp giấy_tờ xe bmw giấy_tờ cá_nhân liên_quan ông v ôtô đứng_tên công_ty tiền_giang nơi mẹ ông v làm_việc ông v bệnh_án bệnh nan_y bệnh_viện xác_nhận tâm_thần bệnh đàn_ông giấy_phép lái ôtô gia_đình ông v bệnh nan_y do dùng thuốc điều_trị dấu_hiệu tâm_thần tâm_lý bất_ổn gần ông ta liên_tục đòi lấy ôtô chơi gia_đình thì đòi tuyệt_thực mặt mẹ vợ_con trưa 21 11 mọi vắng ông v lấy ôtô lòng_vòng gây vụ_việc lái_xe bmw tông cảnh_sát giao_thông sài_gòn tài_xế xe bmw tông cô_gái xe_máy rồi bỏ chạy lực_lượng chức_năng yêu_cầu dừng tài_xế tông xe cảnh_sát giao_thông xe đặc_chủng cố_thủ\r\n", 628 | "__label__thế_giới lính nga nhảy_dù xuống tảng băng trôi bắc_cực thế_giới 50 binh_sĩ nga đồng_loạt nhảy khỏi máy_bay ilyushin 76 xuống tảng băng trôi gần bắc_cực cuộc tập_trận tìm_kiếm cứu nạn nguy_hiểm đại_tá yevgeny_meshkov phát_ngôn_viên lực_lượng lính_dù dù thời_tiết giá_lạnh kèm gió binh_sĩ thực_hiện tốt nhiệm_vụ tiếp đất nhận hàng_hóa họ sử_dụng hệ_thống dù arbalet cho_phép nhảy máy_bay di_chuyển vận_tốc 400 km h binh_sĩ nhảy_dù khỏi máy_bay ilyushin 76 itar tass quân_đội nga cuộc tập_trận nhằm mục_đích tăng_cường khả_năng tìm_kiếm cứu nạn ứng_phó kịp_thời tình_huống khẩn_cấp bắc_cực tham_gia tập_trận dựng trại điều_kiện khắc_nghiệt dao súng_trường giúp họ chống loài động_vật hoang_dã con gấu_bắc_cực đói ăn va_chạm tảng băng trôi bề_mặt băng sụt lún có_thể họ trả_giá mạng sống cờ crimea tung bay rt binh_sĩ tham_gia huấn_luyện cắm cờ crimea khu_vực đích_thân thủ_tướng crimea ông sergey_aksyonov trao lá cờ binh_sĩ bán bán_đảo crimea nơi đặt trụ_sở hạm_đội biển_đen nga\r\n", 629 | "__label__thời_trang ngắm vĩnh_thụy đầy chất chơi thời_trang khoảnh_khắc ngẫu_hứng chụp tình_cờ vĩnh_thụy nơi công_cộng vẽ giải bạc siêu_mẫu mạnh_mẽ nam_tính đầy chất chơi ngắm vĩnh_thụy đầy chất chơi khoảnh_khắc ngẫu_hứng chụp tình_cờ vĩnh_thụy nơi công_cộng vẽ giải bạc siêu_mẫu mạnh_mẽ nam_tính đầy chất chơi tháng ròng_rã đoàn phim gần tháng quay ngoại_cảnh đà_lạt vai diễn vĩnh_thụy bộ phim nhật_ký bạch_tuyết kết_thúc hiện_tại vĩnh_thụy dành nghỉ_ngơi chuẩn_bị bước giai_đoạn tập_luyện cao_độ cuộc thi mister_international 2009 vĩnh_thụy người_mẫu đại_diện tham_dự mister_international cuộc_thi tiến_đoàn đăng_quang 2008 nay cuộc thi diễn tháng 11 đài_loan chia_sẻ kế_hoạch sắp vĩnh_thụy tâm_sự hiện_tại vài bộ phim mời thụy tham_gia thụy cân_nhắc mặt đảm_bảo tập_luyện cuộc_thi mister_international sắp cuộc_thi thụy mong cơ_hội tự trao dồi kiến_thức nghề dịp bước cọ_xát hội_nhập người_mẫu mời ngắm bộ mới_mẻ vĩnh_thụy dân_trí\r\n", 630 | "__label__du_lịch bố_mẹ dừng tàu lượn siêu_tốc lo con_gái du_lịch quá giận con chơi trò mạo_hiểm phép vị phụ_huynh dừng đoàn tàu lượn siêu_tốc công_viên giải_trí trung_quốc scmp sự_việc diễn công_viên giải_trí queershan liễu_châu khu_tự_trị dân_tộc choang_quảng_tây hôm thiếu_nữ 14 tuổi muốn tàu lượn siêu_tốc bố_mẹ đồng_ý lúc họ sơ_ý em lẻn ngồi xe lo_lắng tức_giận hành_động con_gái bố_mẹ em trung_tâm điều_khiển trò_chơi yêu_cầu dừng tàu lượn ngay_lập_tức họ đưa con_gái khỏi đoàn tàu nhân_viên khu giải_trí trèo đường_ray đưa cô_gái xuống scmp đoàn tàu lượn dừng lăn bánh đoạn ngắn sự_việc bất_ngờ hành_khách tưởng sự_cố kỹ_thuật nhân_viên khu giải_trí giải_thích rằng chuyến ngừng do phụ_huynh đồng_ý con_gái tham_gia sự_việc lên_tiếng chỉ_trích cho_rằng ông bố bà mẹ hành_động thái quá tuy_vậy tỏ thông_cảm lo_lắng cặp vợ_chồng đặc_biệt vụ tai_nạn thiếu_nữ 14 tuổi văng khỏi đu_quay thiệt_mạng xảy hôm công_viên zhaohua trùng_khánh trung_quốc\r\n", 631 | "__label__thời_sự cụ bà 84 tuổi đặc_trị bệnh chó dại thời_sự chó dại cắn chưa phát bệnh thì cần liều duy_nhất kèm hướng_dẫn bà cụ phạm_thị_trinh 84 tuổi có_thể khỏi bệnh liều thuốc đặc_trị bệnh chó dại cắn trở_lại người_dân vùng núi nam_dương bắc_giang thường rỉ_tai điều_trị bệnh chó dại cắn độc_đáo thuốc_nam cụ bà phạm_thị_trinh sn 1931 thôn biềng xã nam_dương dù nay bước cái tuổi xưa_nay hiếm đôi mắt cụ tinh hàm_răng hạt bắp đen_láy giống hình_ảnh chống gậy lưng còng cụ độ tuổi tự tay pha ấm trà vùng nam_dương mời khách cụ trinh kể cơ_duyên phương_thuốc đặc_biệt cụ bảo sinh quỳnh_thái quỳnh_phụ thái_bình 30 thế_kỷ gia_đình đông anh_em gia_đình truyền_thống bốc thuốc chữa bệnh đời nhà loại thuốc khám bệnh anh_chị tôi làm_ăn lập gia_đình sớm tôi nhà hầu đèn thầy chữa bệnh thỉnh_thoảng hết thuốc thầy đeo dẫn tôi hái thuốc sao thầy tôi kể nghề bốc thuốc chữa bệnh cụ nội truyền 9 tuổi tôi xin thầy học bốc thuốc chữa bệnh thầy mắng con_gái học gì cụ kể thời cứ mùa hè nắng_nóng bệnh chó dại tăng đột_biến vùng ai chữa bệnh hầu_như nào xin thuốc bà thường bố l chế_biến thuốc hướng_dẫn do phương_thuốc đơn_giản bà nhớ rõ bà cụ phạm_thị_trinh 84 tuổi phương_thuốc đặc_trị bệnh dại do chó cắn 14 tuổi chiến_tranh gia_đình bà trinh sơ_tán vùng nam_dương huyện lục_nam sinh_sống nhanh_chóng hòa_nhập môi_trường nghề buôn mặt_hàng nông_sản mùa nắng_nóng người_dân vùng chó dại cắn chứng_kiến cảnh dân_nghèo tiền điều_trị phát dại kiểm_soát hành_vi gây nguy_hại xung_quanh bà trinh bắt_đầu điều_chế liều thuốc chữa_trị phụ thầy chữa bệnh viên thuốc đặc_trị virus dại do chó cắn điều_chế vê thành viên màu đen hạt nhãn liều thuốc lấy nguyên_liệu đơn_giản gần_gũi gồm nhọ_nồi nọc_độc con cành cành gạo_nếp cơm nhão quan_trọng nọc_độc con cành cành gọi con văn_liệu màu đỏ thường ruộng rau_muống bắt con cành cành cần lấy phần nọc_độc đuôi đem phơi khô tán nhuyễn thành bột gạo_nếp sao vàng tán nhuyễn nhọ_nồi lấy chảo nấu bếp củi lấy nồi ba nguyên_liệu cơm nhão kết_hợp tỉ_lệ dùng tay vê thành viên đũa rồi đem phơi khô dùng viên thuốc điều_chế xong màu xám đen giống hạt nhãn cứu chó dại cắn cầm lọ thuốc tay cụ trinh cho_biết mỗi chế thuốc sẵn lọ dự_phòng loại thuốc mùi vị uống cảm_giác say nôn_nao mệt_mỏi tùy thể_trạng mỗi sử_dụng liều_lượng phù_hợp bình_thường dùng liều 7 viên lúc ai có_thể trạng béo tốt dùng viên thể_trạng yếu dùng viên bữa cơm thuốc tác_dụng cảm_giác khắp cơ_thể vài phút uống mệt_mỏi nôn_nao khó_chịu sử_dụng liều thuốc cần kiêng_kỵ nhạc đám_ma ba tháng ngoài_ra người_bệnh cần ăn_uống điều_độ bồi_bổ sức_khỏe nhanh hồi sức loại thuốc bình_thường uống cảm_giác mệt_mỏi người_bệnh tuy_nhiên thực_sự chó dại cắn thì dùng thuốc bởi nó gây tình_trạng mệt_mỏi cụ trinh chia_sẻ nghe thì phương_thuốc khá đơn_giản nguyên_liệu sẵn bắt_tay hề như_vậy thành_phần nọc_độc côn_trùng đúng tỉ_lệ quy_trình thì phản_tác_dụng nguyễn_thọ_ngát con_trai út cụ trinh kể kỷ_niệm người_bệnh điều_trị nhà nhắc bệnh_nhân chữa_trị bà trinh cho_hay vài đàn_ông xã thôn chó dại cắn xin thuốc lúc thuốc dự_phòng đủ liều chữa_trị mùa khô nguyên_liệu gần_như tôi khuyên người_nhà đưa bệnh_viện tiêm vắc xin kịp tuy_nhiên gia_đình khó_khăn tôi điều_trị cứu xin tôi chữa_trị lúc hoàn_cảnh bệnh_nhân khó_khăn tôi khắp ruộng rau bắt vài con cành cành sao nguyên_liệu thuốc may_mắn cộng thuốc lọ đủ liều điều_trị mất người_bệnh uống thuốc biểu_hiện gì lạ nguyễn_thọ_ngát 42 tuổi con_trai út cụ trinh chia_sẻ thuốc mẹ tôi tác_dụng chó dại cắn nghĩa_là chưa phát dại nào biểu_hiện xùi bọt mép điều_khiển hành_vi bản_thân nữa thì thuốc vô tác_dụng tính ngàn viên thuốc điều_chế chữa trăm vùng mẹ tôi thử thuốc con chó cắn bởi con chó dại kết_quả con chó cứu sống khỏe_mạnh ông nguyễn_văn_kính chủ_tịch ubnd xã nam_dương bà_phạm_thị_trinh sống người_dân vùng phương_thuốc đặc_trị virus dại không_chỉ xã vùng lân_cận xin điều_trị bà trinh thường thuốc miễn_phí chữa khỏi hoàn_toàn họ\r\n" 632 | ], 633 | "name": "stdout" 634 | } 635 | ] 636 | }, 637 | { 638 | "cell_type": "code", 639 | "metadata": { 640 | "id": "mVot0nxCMwyX", 641 | "colab_type": "code", 642 | "colab": {}, 643 | "outputId": "4b15729a-b4e3-423d-c482-6d826536af4c" 644 | }, 645 | "source": [ 646 | "# Chia tập train/test\n", 647 | "from sklearn.model_selection import train_test_split\n", 648 | "from sklearn.preprocessing import LabelEncoder\n", 649 | "test_percent = 0.2\n", 650 | "\n", 651 | "text = []\n", 652 | "label = []\n", 653 | "\n", 654 | "for line in open('news_categories.prep'):\n", 655 | " words = line.strip().split()\n", 656 | " label.append(words[0])\n", 657 | " text.append(' '.join(words[1:]))\n", 658 | "\n", 659 | "X_train, X_test, y_train, y_test = train_test_split(text, label, test_size=test_percent, random_state=42)\n", 660 | "\n", 661 | "# Lưu train/test data\n", 662 | "# Giữ nguyên train/test để về sau so sánh các mô hình cho công bằng\n", 663 | "with open('train.txt', 'w') as fp:\n", 664 | " for x, y in zip(X_train, y_train):\n", 665 | " fp.write('{} {}\\n'.format(y, x))\n", 666 | "\n", 667 | "with open('test.txt', 'w') as fp:\n", 668 | " for x, y in zip(X_test, y_test):\n", 669 | " fp.write('{} {}\\n'.format(y, x))\n", 670 | "\n", 671 | "# encode label\n", 672 | "label_encoder = LabelEncoder()\n", 673 | "label_encoder.fit(y_train)\n", 674 | "print(list(label_encoder.classes_), '\\n')\n", 675 | "y_train = label_encoder.transform(y_train)\n", 676 | "y_test = label_encoder.transform(y_test)\n", 677 | "\n", 678 | "print(X_train[0], y_train[0], '\\n')\n", 679 | "print(X_test[0], y_test[0])" 680 | ], 681 | "execution_count": null, 682 | "outputs": [ 683 | { 684 | "output_type": "stream", 685 | "text": [ 686 | "['__label__công_nghệ', '__label__du_lịch', '__label__giáo_dục', '__label__giải_trí', '__label__kinh_doanh', '__label__nhịp_sống', '__label__phim_ảnh', '__label__pháp_luật', '__label__sống_trẻ', '__label__sức_khỏe', '__label__thế_giới', '__label__thể_thao', '__label__thời_sự', '__label__thời_trang', '__label__xe_360', '__label__xuất_bản', '__label__âm_nhạc', '__label__ẩm_thực'] \n", 687 | "\n", 688 | "long_nhật chê chuyện phương_thanh cứu siu_black sao_việt cái nhìn ngược hoàn_toàn đông long_nhật rằng phương_thanh mọi chuyện rối_tung long_nhật chê chuyện phương_thanh cứu siu_black cái nhìn ngược hoàn_toàn đông long_nhật rằng phương_thanh mọi chuyện rối_tung chuyện siu_black vỡ_nợ thực_sự tạo cơn chấn_động giới giải_trí thay_vì máu_lửa sân_khấu giọng ca núi_rừng xuất_hiện gương_mặt bơ_phờ khóe miệng nở nụ_cười gượng_gạo phương_thanh duy_nhất phát_ngôn báo_chí thừa_nhận khoản nợ tỷ đồng siu_black hoàn_toàn im_lặng thay chị trả_lời tất_cả thắc_mắc giới truyền_thông chính nữ ca_sĩ hâm_mộ gọi cái tên chanh tin phương_thanh chấp_nhận đứng_mũi_chịu_sào thân nhìn chị đầy ái_ngại khen chị tốt_tính lúc khó_khăn ai ai bè cho_rằng giọng ca mèo hoang_dại quá chuyện nhảy chịu khổ ai đuổi suy_nghĩ đông cái nhìn hoạt_động giới showbiz nam ca_sĩ long_nhật đưa nhìn_nhận hoàn_toàn khác_biệt lời nam ca_sĩ huế thân_thiết chị siu sự_cố phương_thanh rối_tung mọi thứ chuyện phương_thanh nhận quản_lý siu_black trả_lời báo_chí chứ tin nóng như_thế làm_sao tôi bỏ_qua mọi nhìn_nhận hành_động nghĩa_hiệp thật_sự tôi nực_cười muốn đứng lo chuyện nợ_nần trước_hết tiền đủ sức trả nợ người_ta thì_thôi giúp giúp đừng nửa_chừng như_vậy ý phương_thanh tiền bản_thân cô ấy thời đỉnh_cao giờ cô ấy đóng phim kiếm tiền thù_lao đóng phim thấp lắm bộ phim 40 tập đóng tháng trời nhận khoản tiền ca_sĩ hát đêm ít_ra chị ấy dám đứng chịu_trận đâu ai gan chuyện vấn_đề nợ_nần tiền_bạc tiền giúp người_ta nói cái gì bây_giờ khả_năng sao nói tôi sẵn_sàng trả giúp siu_black siu hát trả nợ tôi như_thế chứ toàn nói chung_chung trả_lời rùm_beng báo_chí gì tổ nói nói lằng_nhằng mọi thứ thôi thương_siu như_thế mười_hại siu trả nợ siu phương_thanh khẳng_định giúp siu hát kiếm tiền một_cách đấy chứ chị siu bây_giờ nói rõ_ràng chị ấy tinh_thần hát siu_hát cháy hết_mình chị ấy hát cảm_xúc giờ tâm_trạng đâu cháy nợ_nần bủa_vây như_thế hay_là muốn hát dưới người_ta đòi nợ đông khán_giả tôi chắc_chắn cần bày treo băng_rôn chủ_nợ kéo liền ý phương_án hoàn_toàn hiệu_quả phương_thanh theo_đuổi việc_làm thực_tế cô ấy muốn anh_hùng muốn ra_tay nghĩa_hiệp càng sự_việc rối giờ phương_thanh bắt_đầu cảm_thấy mệt_mỏi muốn bỏ_của_chạy_lấy_người vậy gì giúp chị siu trường_hợp tôi thân_thiết quý_mến chị siu chúng_tôi mấy chục nay thời chưa nào nổi_tiếng tôi giờ muốn giúp siu tất_cả ngồi xuống bàn_bạc kỹ chứ không_thể sồn_sồn phương_thanh bấy_lâu_nay có_thể nghệ_sĩ đứng tổ_chức đêm nhạc bán vé lấy cát xê toàn_bộ tiền thu dùng ủng_hộ chị siu cần giúp_đỡ chính chân_thành tôi tin chị siu có_thể vượt khó_khăn trí_thức trẻ 3 \n", 689 | "\n", 690 | "thư_an_nguy gửi toàn_shinoda trái_tim muốn vỡ tung sống trẻ trưa hôm_nay 24 8 an_nguy đầu_tiên viết dòng tâm_sự cảm_xúc toàn_shinoda đột_ngột 27 7 an_nguy lập_tức quay mỹ vài dự tang_lễ toàn_shinoda đột_ngột bạn_trai an_nguy hoàn_toàn suy_sụp cô chưa nào tâm_sự mất_mát thời_điểm hiện_tại gần tháng toàn_shinoda mất an_nguy bộc_bạch cảm_xúc vui buồn tức_giận đau_khổ người_thân lặng nhìn toàn_shinoda giờ hỏa_táng trưa 27 7 linh_cữu vlogger toàn_shinoda di_chuyển đài_hóa_thân hoàn_vũ_văn_điển hà_nội 16h lễ hỏa_táng kết_thúc đau_thương lời tâm_sự an_nguy đăng_tải 30 phút thu_hút 80 000 lượt like thích ủng_hộ đồng_cảm cộng_đồng mạng an_nguy viết em giận em nghĩ giận đời chẳng bao_giờ tha_thứ em giận mãi im_lặng mãi chẳng dỗ em quay nữ hèn nữ lúc_nào sợ giận sợ thương em nữa nghe em chẳng tin ngàn em chẳng_thể tin chuyện gì xảy nửa vòng trái_đất em kẻ mất chân mất tay gọi chạy nhà em ngồi cái máy_tính nực_cười em trút giận tất_cả báo tin em em gào họ chừng nào gặp tin rồi họ gặp em ngồi đọc dòng chữ màn_hình đầu_tiên em cảm_thấy bất_lực thế cứ tuột dần khỏi tay em một_cách mơ_hồ em khóc em hiểu loại động_vật máu lạnh nào em em không_thể khóc em câm_lặng thôi chia_sẻ an_nguy facebook em kẻ hèn_nhát em muốn quay em sợ sợ khóc sợ người_ta thương_hại em em không_bao_giờ muốn ai thương_hại trên_hết em sợ đối_diện sự_thật sợ nhìn nằm em sợ em gọi không_bao_giờ nghe câu trả_lời nữa em tự_nhủ giấc_mơ giấc_mơ quá dài quá thật trở_về nghĩa_là tỉnh_giấc cơn ác_mộng trở_thành hiện_thực em suy_nghĩ ác_độc em nói em bảo_vệ bất_kì kẻ nào tổn_thương lợi_dụng động em thì động anh_em yên cười kệ rồi chúng_nó hiểu thôi à chúng_nó hiểu đâu rồi chúng_nó quyết chịu hiểu đâu em kệ em muốn giết chết kẻ thêu_dệt muốn tự tay giết hết chúng_nó súng vậy nhẹ_nhàng quá dao không_chỉ nhát chục trăm hình nữa em nói rồi cần em sợ bố con thằng nào hết em sống giận_dữ em giận ông trời giận giận giận tất_cả mọi xung_quanh giận ông trời sao đem mất giận sao bỏ mọi giận sao giữ người_ta viết em giận làm_sao viết cứ quay người_ta viết nữa em giận mấy hôm dám quên tức_giận vô_lý lúc_nào em muốn đập muốn phá tức_giận ấy đè nặng em kẻ nắm lấy trái_tim em bóp nghiến lấy nó em gì em sống cuộc_sống bình_thường ăn ngủ cười nói trái_tim muốn vỡ tung đêm ngồi dưới đường nhìn ban công phòng em gọi chờ tiếng xuống đợi một_tí em đợi mãi chẳng ai xuất_hiện em nghĩ rằng cần em đợi bao_lâu thôi em đợi rồi em nhận_ra cái bao_lâu ấy không_bao_giờ nữa em tiếp_tục mất thứ tốt_đẹp xảy có_điều mất mãi_mãi em tin kiếp kiếp thật em chắc_chắn gặp tiếp_tục em thành lâm_việt_anh việt lúc_nào lặng_lẽ quan_tâm giúp_đỡ bọn em bọn em đời quên vui_vẻ đau_đớn nhắc bây_giờ em ích_kỉ đòi nữa thanh_thản vướng_bận gì đừng lo em em yếu_đuối muốn mạnh_mẽ cần đường tình dang_dở an_nguy toàn_shinoda chính_thức công_khai tình_yêu tháng an_nguy gái toàn shinoda lặng_lẽ đột_ngột bạn_trai 8\n" 691 | ], 692 | "name": "stdout" 693 | } 694 | ] 695 | }, 696 | { 697 | "cell_type": "code", 698 | "metadata": { 699 | "id": "MrGOKZILMwya", 700 | "colab_type": "code", 701 | "colab": {} 702 | }, 703 | "source": [ 704 | "MODEL_PATH = \"models\"\n", 705 | "\n", 706 | "import os\n", 707 | "if not os.path.exists(MODEL_PATH):\n", 708 | " os.makedirs(MODEL_PATH)\n" 709 | ], 710 | "execution_count": null, 711 | "outputs": [] 712 | }, 713 | { 714 | "cell_type": "markdown", 715 | "metadata": { 716 | "id": "JnRnrWcMMwyd", 717 | "colab_type": "text" 718 | }, 719 | "source": [ 720 | "## Naive Bayes\n", 721 | "https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html" 722 | ] 723 | }, 724 | { 725 | "cell_type": "code", 726 | "metadata": { 727 | "id": "AkS3lqseMwye", 728 | "colab_type": "code", 729 | "colab": {}, 730 | "outputId": "3073eff8-0692-4bda-8f5b-333017981cf6" 731 | }, 732 | "source": [ 733 | "import pickle\n", 734 | "import time\n", 735 | "from sklearn.feature_extraction.text import CountVectorizer\n", 736 | "from sklearn.feature_extraction.text import TfidfTransformer\n", 737 | "from sklearn.naive_bayes import MultinomialNB\n", 738 | "from sklearn.pipeline import Pipeline\n", 739 | "\n", 740 | "start_time = time.time()\n", 741 | "text_clf = Pipeline([('vect', CountVectorizer(ngram_range=(1,1),\n", 742 | " max_df=0.8,\n", 743 | " max_features=None)), \n", 744 | " ('tfidf', TfidfTransformer()), \n", 745 | " ('clf', MultinomialNB())\n", 746 | " ])\n", 747 | "text_clf = text_clf.fit(X_train, y_train)\n", 748 | "\n", 749 | "train_time = time.time() - start_time\n", 750 | "print('Done training Naive Bayes in', train_time, 'seconds.')\n", 751 | "\n", 752 | "# Save model\n", 753 | "pickle.dump(text_clf, open(os.path.join(MODEL_PATH, \"naive_bayes.pkl\"), 'wb'))" 754 | ], 755 | "execution_count": null, 756 | "outputs": [ 757 | { 758 | "output_type": "stream", 759 | "text": [ 760 | "Done training Naive Bayes in 15.001639127731323 seconds.\n" 761 | ], 762 | "name": "stdout" 763 | } 764 | ] 765 | }, 766 | { 767 | "cell_type": "markdown", 768 | "metadata": { 769 | "id": "Flv2HtO2Mwyi", 770 | "colab_type": "text" 771 | }, 772 | "source": [ 773 | "## Linear Classifier\n", 774 | "http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html" 775 | ] 776 | }, 777 | { 778 | "cell_type": "code", 779 | "metadata": { 780 | "id": "6vlilOMzMwyi", 781 | "colab_type": "code", 782 | "colab": {}, 783 | "outputId": "29a33424-25ed-441c-cbb2-7a6a5a1eb077" 784 | }, 785 | "source": [ 786 | "from sklearn.linear_model import LogisticRegression\n", 787 | " \n", 788 | "start_time = time.time()\n", 789 | "text_clf = Pipeline([('vect', CountVectorizer(ngram_range=(1,1),\n", 790 | " max_df=0.8,\n", 791 | " max_features=None)), \n", 792 | " ('tfidf', TfidfTransformer()),\n", 793 | " ('clf', LogisticRegression(solver='lbfgs', \n", 794 | " multi_class='auto',\n", 795 | " max_iter=10000))\n", 796 | " ])\n", 797 | "text_clf = text_clf.fit(X_train, y_train)\n", 798 | "\n", 799 | "train_time = time.time() - start_time\n", 800 | "print('Done training Linear Classifier in', train_time, 'seconds.')\n", 801 | "\n", 802 | "# Save model\n", 803 | "pickle.dump(text_clf, open(os.path.join(MODEL_PATH, \"linear_classifier.pkl\"), 'wb'))" 804 | ], 805 | "execution_count": null, 806 | "outputs": [ 807 | { 808 | "output_type": "stream", 809 | "text": [ 810 | "Done training Linear Classifier in 181.10434103012085 seconds.\n" 811 | ], 812 | "name": "stdout" 813 | } 814 | ] 815 | }, 816 | { 817 | "cell_type": "markdown", 818 | "metadata": { 819 | "id": "V5DON6YQMwym", 820 | "colab_type": "text" 821 | }, 822 | "source": [ 823 | "## Support Vector Machine (SVM)\n", 824 | "https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html" 825 | ] 826 | }, 827 | { 828 | "cell_type": "code", 829 | "metadata": { 830 | "id": "G4z85ws5Mwyn", 831 | "colab_type": "code", 832 | "colab": {}, 833 | "outputId": "6cb33836-5f26-43d4-b0fc-536fc0b9fb7f" 834 | }, 835 | "source": [ 836 | "from sklearn.svm import SVC\n", 837 | "\n", 838 | "start_time = time.time()\n", 839 | "text_clf = Pipeline([('vect', CountVectorizer(ngram_range=(1,1),\n", 840 | " max_df=0.8,\n", 841 | " max_features=None)), \n", 842 | " ('tfidf', TfidfTransformer()),\n", 843 | " ('clf', SVC(gamma='scale'))\n", 844 | " ])\n", 845 | "text_clf = text_clf.fit(X_train, y_train)\n", 846 | "\n", 847 | "train_time = time.time() - start_time\n", 848 | "print('Done training SVM in', train_time, 'seconds.')\n", 849 | "\n", 850 | "# Save model\n", 851 | "pickle.dump(text_clf, open(os.path.join(MODEL_PATH, \"svm.pkl\"), 'wb'))" 852 | ], 853 | "execution_count": null, 854 | "outputs": [ 855 | { 856 | "output_type": "stream", 857 | "text": [ 858 | "Done training SVM in 2082.0848298072815 seconds.\n" 859 | ], 860 | "name": "stdout" 861 | } 862 | ] 863 | }, 864 | { 865 | "cell_type": "markdown", 866 | "metadata": { 867 | "id": "iDDiZxH4Mwyq", 868 | "colab_type": "text" 869 | }, 870 | "source": [ 871 | "## FastText\n", 872 | "https://github.com/facebookresearch/fasttext" 873 | ] 874 | }, 875 | { 876 | "cell_type": "code", 877 | "metadata": { 878 | "id": "wEmOxmxNMwyr", 879 | "colab_type": "code", 880 | "colab": {}, 881 | "outputId": "de2173a1-9337-49e0-8220-fdf4314dd5d3" 882 | }, 883 | "source": [ 884 | "# Cài đặt fastText cho Python\n", 885 | "!pip3 install --user numpy scipy pybind11 cmake\n", 886 | "!wget -nc \"https://github.com/facebookresearch/fastText/archive/v0.9.2.zip\" > /dev/null\n", 887 | "!unzip -n \"v0.9.2.zip\" > /dev/null\n", 888 | "!cd fastText-0.9.2 && pip3 install --user .\n", 889 | "!rm -rf v0.9.2.zip fastText-0.9.2" 890 | ], 891 | "execution_count": null, 892 | "outputs": [ 893 | { 894 | "output_type": "stream", 895 | "text": [ 896 | "Requirement already satisfied: numpy in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (1.19.1)\n", 897 | "Requirement already satisfied: scipy in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (1.5.2)\n", 898 | "Requirement already satisfied: pybind11 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (2.5.0)\n", 899 | "Requirement already satisfied: cmake in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (3.18.0)\n", 900 | "\u001b[33mYou are using pip version 19.0.3, however version 20.2 is available.\n", 901 | "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n", 902 | "--2020-08-05 23:07:26-- https://github.com/facebookresearch/fastText/archive/v0.9.2.zip\n", 903 | "Resolving github.com (github.com)... 52.74.223.119\n", 904 | "Connecting to github.com (github.com)|52.74.223.119|:443... connected.\n", 905 | "HTTP request sent, awaiting response... 302 Found\n", 906 | "Location: https://codeload.github.com/facebookresearch/fastText/zip/v0.9.2 [following]\n", 907 | "--2020-08-05 23:07:27-- https://codeload.github.com/facebookresearch/fastText/zip/v0.9.2\n", 908 | "Resolving codeload.github.com (codeload.github.com)... 54.251.140.56\n", 909 | "Connecting to codeload.github.com (codeload.github.com)|54.251.140.56|:443... connected.\n", 910 | "HTTP request sent, awaiting response... 200 OK\n", 911 | "Length: unspecified [application/zip]\n", 912 | "Saving to: ‘v0.9.2.zip’\n", 913 | "\n", 914 | "v0.9.2.zip [ <=> ] 4.17M 1.97MB/s in 2.1s \n", 915 | "\n", 916 | "2020-08-05 23:07:30 (1.97 MB/s) - ‘v0.9.2.zip’ saved [4369852]\n", 917 | "\n", 918 | "Processing /Volumes/resource/code/text-classification-tutorial/fastText-0.9.2\n", 919 | "Requirement already satisfied: pybind11>=2.2 in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from fasttext==0.9.2) (2.5.0)\n", 920 | "Requirement already satisfied: setuptools>=0.7.0 in /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages (from fasttext==0.9.2) (40.8.0)\n", 921 | "Requirement already satisfied: numpy in /Users/hieunv/Library/Python/3.7/lib/python/site-packages (from fasttext==0.9.2) (1.19.1)\n", 922 | "Building wheels for collected packages: fasttext\n", 923 | " Building wheel for fasttext (setup.py) ... \u001b[?25ldone\n", 924 | "\u001b[?25h Stored in directory: /Users/hieunv/Library/Caches/pip/wheels/db/5f/9f/8098159d3ea8b1ece5da5341fe5c03d6de6625a3681142cf61\n", 925 | "Successfully built fasttext\n", 926 | "Installing collected packages: fasttext\n", 927 | " Found existing installation: fasttext 0.9.2\n", 928 | " Uninstalling fasttext-0.9.2:\n", 929 | " Successfully uninstalled fasttext-0.9.2\n", 930 | "Successfully installed fasttext-0.9.2\n", 931 | "\u001b[33mYou are using pip version 19.0.3, however version 20.2 is available.\n", 932 | "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" 933 | ], 934 | "name": "stdout" 935 | } 936 | ] 937 | }, 938 | { 939 | "cell_type": "code", 940 | "metadata": { 941 | "id": "e_rhbogmMwyu", 942 | "colab_type": "code", 943 | "colab": {}, 944 | "outputId": "13667d71-91fd-4392-eefc-99ceb59b7eb5" 945 | }, 946 | "source": [ 947 | "import fasttext\n", 948 | "\n", 949 | "start_time = time.time()\n", 950 | "model = fasttext.train_supervised(\n", 951 | " input='train.txt',\n", 952 | " dim=100,\n", 953 | " epoch=5,\n", 954 | " lr=0.1,\n", 955 | " wordNgrams=2,\n", 956 | " label='__label__',\n", 957 | " minCount=5\n", 958 | ")\n", 959 | "\n", 960 | "train_time = time.time() - start_time\n", 961 | "print('Done training Fasttext in', train_time, 'seconds.')\n", 962 | "\n", 963 | "# Compress model files with quantization\n", 964 | "model.quantize(input='train.txt', retrain=True)\n", 965 | "model.save_model(os.path.join(MODEL_PATH,\"fasttext.ftz\"))" 966 | ], 967 | "execution_count": null, 968 | "outputs": [ 969 | { 970 | "output_type": "stream", 971 | "text": [ 972 | "Done training Fasttext in 19.906031131744385 seconds.\n" 973 | ], 974 | "name": "stdout" 975 | } 976 | ] 977 | }, 978 | { 979 | "cell_type": "markdown", 980 | "metadata": { 981 | "id": "UuSOImTRMwyy", 982 | "colab_type": "text" 983 | }, 984 | "source": [ 985 | "## Đánh giá các mô hình" 986 | ] 987 | }, 988 | { 989 | "cell_type": "code", 990 | "metadata": { 991 | "id": "0K04GPknMwyy", 992 | "colab_type": "code", 993 | "colab": {}, 994 | "outputId": "8d51e838-bafe-4a1e-a34c-38b36a0d2458" 995 | }, 996 | "source": [ 997 | "import numpy as np\n", 998 | "# Naive Bayes\n", 999 | "model = pickle.load(open(os.path.join(MODEL_PATH,\"naive_bayes.pkl\"), 'rb'))\n", 1000 | "y_pred = model.predict(X_test)\n", 1001 | "print('Naive Bayes, Accuracy =', np.mean(y_pred == y_test))\n", 1002 | "\n", 1003 | "# Linear Classifier\n", 1004 | "model = pickle.load(open(os.path.join(MODEL_PATH,\"linear_classifier.pkl\"), 'rb'))\n", 1005 | "y_pred = model.predict(X_test)\n", 1006 | "print('Linear Classifier, Accuracy =', np.mean(y_pred == y_test))\n", 1007 | "\n", 1008 | "# SVM\n", 1009 | "model = pickle.load(open(os.path.join(MODEL_PATH,\"svm.pkl\"), 'rb'))\n", 1010 | "y_pred = model.predict(X_test)\n", 1011 | "print('SVM, Accuracy =', np.mean(y_pred == y_test))\n", 1012 | "\n", 1013 | "# Fasttext\n", 1014 | "def print_results(N, p, r):\n", 1015 | " print(\"Fasttext, Precision = {}, Recall = {}\".format(p, r))\n", 1016 | " \n", 1017 | "model = fasttext.load_model(os.path.join(MODEL_PATH,\"fasttext.ftz\"))\n", 1018 | "print_results(*model.test('test.txt'))" 1019 | ], 1020 | "execution_count": null, 1021 | "outputs": [ 1022 | { 1023 | "output_type": "stream", 1024 | "text": [ 1025 | "Naive Bayes, Accuracy = 0.8324764353041988\n", 1026 | "Linear Classifier, Accuracy = 0.883140531276778\n", 1027 | "SVM, Accuracy = 0.8822836332476436\n" 1028 | ], 1029 | "name": "stdout" 1030 | }, 1031 | { 1032 | "output_type": "stream", 1033 | "text": [ 1034 | "Warning : `load_model` does not return WordVectorModel or SupervisedModel any more, but a `FastText` object which is very similar.\n" 1035 | ], 1036 | "name": "stderr" 1037 | }, 1038 | { 1039 | "output_type": "stream", 1040 | "text": [ 1041 | "Fasttext, Precision = 0.7548200514138818, Recall = 0.7548200514138818\n" 1042 | ], 1043 | "name": "stdout" 1044 | } 1045 | ] 1046 | }, 1047 | { 1048 | "cell_type": "code", 1049 | "metadata": { 1050 | "id": "o3KXn7zEMwy1", 1051 | "colab_type": "code", 1052 | "colab": {}, 1053 | "outputId": "ffe4898d-a0dd-4b26-e944-67529128398f" 1054 | }, 1055 | "source": [ 1056 | "# Xem kết quả trên từng nhãn\n", 1057 | "from sklearn.metrics import classification_report\n", 1058 | "\n", 1059 | "nb_model = pickle.load(open(os.path.join(MODEL_PATH,\"naive_bayes.pkl\"), 'rb'))\n", 1060 | "y_pred = nb_model.predict(X_test)\n", 1061 | "print(classification_report(y_test, y_pred, target_names=list(label_encoder.classes_)))" 1062 | ], 1063 | "execution_count": null, 1064 | "outputs": [ 1065 | { 1066 | "output_type": "stream", 1067 | "text": [ 1068 | " precision recall f1-score support\n", 1069 | "\n", 1070 | " __label__công_nghệ 0.91 0.92 0.92 532\n", 1071 | " __label__du_lịch 0.79 0.88 0.83 551\n", 1072 | " __label__giáo_dục 0.82 0.88 0.85 528\n", 1073 | " __label__giải_trí 0.59 0.74 0.66 487\n", 1074 | "__label__kinh_doanh 0.78 0.84 0.81 498\n", 1075 | " __label__nhịp_sống 0.85 0.49 0.62 497\n", 1076 | " __label__phim_ảnh 0.90 0.76 0.82 525\n", 1077 | " __label__pháp_luật 0.90 0.92 0.91 543\n", 1078 | " __label__sống_trẻ 0.62 0.64 0.63 510\n", 1079 | " __label__sức_khỏe 0.79 0.88 0.83 496\n", 1080 | " __label__thế_giới 0.91 0.83 0.87 549\n", 1081 | " __label__thể_thao 0.95 0.95 0.95 508\n", 1082 | " __label__thời_sự 0.82 0.77 0.79 496\n", 1083 | "__label__thời_trang 0.86 0.77 0.81 521\n", 1084 | " __label__xe_360 0.97 0.94 0.96 502\n", 1085 | " __label__xuất_bản 0.87 0.93 0.90 519\n", 1086 | " __label__âm_nhạc 0.83 0.87 0.85 554\n", 1087 | " __label__ẩm_thực 0.90 0.94 0.92 520\n", 1088 | "\n", 1089 | " micro avg 0.83 0.83 0.83 9336\n", 1090 | " macro avg 0.84 0.83 0.83 9336\n", 1091 | " weighted avg 0.84 0.83 0.83 9336\n", 1092 | "\n" 1093 | ], 1094 | "name": "stdout" 1095 | } 1096 | ] 1097 | }, 1098 | { 1099 | "cell_type": "code", 1100 | "metadata": { 1101 | "id": "78sdWuRjMwy5", 1102 | "colab_type": "code", 1103 | "colab": {}, 1104 | "outputId": "d5d878b3-dd9b-4cfe-ec88-efb51a3bddb7" 1105 | }, 1106 | "source": [ 1107 | "# xem kết quả cho 1 văn bản model naive bayes đã load ở trên\n", 1108 | "\n", 1109 | "document = \"đá bóng không mày?\"\n", 1110 | "\n", 1111 | "document = text_preprocess(document)\n", 1112 | "document = remove_stopwords(document)\n", 1113 | "\n", 1114 | "label = nb_model.predict([document])\n", 1115 | "print('Predict label:', label_encoder.inverse_transform(label))" 1116 | ], 1117 | "execution_count": null, 1118 | "outputs": [ 1119 | { 1120 | "output_type": "stream", 1121 | "text": [ 1122 | "Predict label: ['__label__thể_thao']\n" 1123 | ], 1124 | "name": "stdout" 1125 | } 1126 | ] 1127 | }, 1128 | { 1129 | "cell_type": "code", 1130 | "metadata": { 1131 | "id": "k-HqFwB_Mwy9", 1132 | "colab_type": "code", 1133 | "colab": {} 1134 | }, 1135 | "source": [ 1136 | "" 1137 | ], 1138 | "execution_count": null, 1139 | "outputs": [] 1140 | }, 1141 | { 1142 | "cell_type": "code", 1143 | "metadata": { 1144 | "id": "P4Qlbq7xMwzA", 1145 | "colab_type": "code", 1146 | "colab": {} 1147 | }, 1148 | "source": [ 1149 | "" 1150 | ], 1151 | "execution_count": null, 1152 | "outputs": [] 1153 | }, 1154 | { 1155 | "cell_type": "code", 1156 | "metadata": { 1157 | "id": "xESSg-OfMwzD", 1158 | "colab_type": "code", 1159 | "colab": {} 1160 | }, 1161 | "source": [ 1162 | "" 1163 | ], 1164 | "execution_count": null, 1165 | "outputs": [] 1166 | } 1167 | ] 1168 | } --------------------------------------------------------------------------------