Spaces:
Sleeping
Sleeping
HudsonArauj
commited on
Commit
·
aabc2fd
1
Parent(s):
cadd16d
add app
Browse files- .dockerignore +23 -0
- .gitignore +2 -0
- app/language_detection.csv +0 -0
- app/language_detection.ipynb +455 -0
- app/main.py +16 -0
- app/model/model.py +25 -0
- app/model/trained-01.pkl +3 -0
- app/schemas.py +9 -0
- requirements.txt +3 -0
.dockerignore
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__
|
| 2 |
+
*.pyc
|
| 3 |
+
*.pyo
|
| 4 |
+
*.pyd
|
| 5 |
+
.Python
|
| 6 |
+
env/
|
| 7 |
+
venv/
|
| 8 |
+
pip-log.txt
|
| 9 |
+
pip-delete-this-directory.txt
|
| 10 |
+
.tox/
|
| 11 |
+
.coverage
|
| 12 |
+
.coverage.*
|
| 13 |
+
.cache
|
| 14 |
+
nosetests.xml
|
| 15 |
+
coverage.xml
|
| 16 |
+
*.cover
|
| 17 |
+
*.log
|
| 18 |
+
.git
|
| 19 |
+
.gitignore
|
| 20 |
+
.mypy_cache
|
| 21 |
+
.pytest_cache
|
| 22 |
+
.hypothesis
|
| 23 |
+
.idea
|
.gitignore
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
venv
|
| 2 |
+
.DS_Store
|
app/language_detection.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
app/language_detection.ipynb
ADDED
|
@@ -0,0 +1,455 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": null,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [],
|
| 8 |
+
"source": [
|
| 9 |
+
"!unzip archive.zip\n",
|
| 10 |
+
"\n",
|
| 11 |
+
"#https://www.kaggle.com/datasets/basilb2s/language-detection\n",
|
| 12 |
+
"#https://github.com/basil-b2s/Language-Detector"
|
| 13 |
+
]
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"cell_type": "code",
|
| 17 |
+
"execution_count": 11,
|
| 18 |
+
"metadata": {},
|
| 19 |
+
"outputs": [],
|
| 20 |
+
"source": [
|
| 21 |
+
"import pandas as pd\n",
|
| 22 |
+
"import numpy as np\n",
|
| 23 |
+
"import matplotlib.pyplot as plt\n",
|
| 24 |
+
"import seaborn as sns\n",
|
| 25 |
+
"import warnings\n",
|
| 26 |
+
"import re\n",
|
| 27 |
+
"warnings.filterwarnings('ignore')"
|
| 28 |
+
]
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"cell_type": "code",
|
| 32 |
+
"execution_count": 1,
|
| 33 |
+
"metadata": {},
|
| 34 |
+
"outputs": [
|
| 35 |
+
{
|
| 36 |
+
"data": {
|
| 37 |
+
"text/plain": [
|
| 38 |
+
"'1.3.0'"
|
| 39 |
+
]
|
| 40 |
+
},
|
| 41 |
+
"execution_count": 1,
|
| 42 |
+
"metadata": {},
|
| 43 |
+
"output_type": "execute_result"
|
| 44 |
+
}
|
| 45 |
+
],
|
| 46 |
+
"source": [
|
| 47 |
+
"import sklearn\n",
|
| 48 |
+
"\n",
|
| 49 |
+
"sklearn.__version__"
|
| 50 |
+
]
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"cell_type": "code",
|
| 54 |
+
"execution_count": 7,
|
| 55 |
+
"metadata": {},
|
| 56 |
+
"outputs": [
|
| 57 |
+
{
|
| 58 |
+
"data": {
|
| 59 |
+
"text/html": [
|
| 60 |
+
"<div>\n",
|
| 61 |
+
"<style scoped>\n",
|
| 62 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
| 63 |
+
" vertical-align: middle;\n",
|
| 64 |
+
" }\n",
|
| 65 |
+
"\n",
|
| 66 |
+
" .dataframe tbody tr th {\n",
|
| 67 |
+
" vertical-align: top;\n",
|
| 68 |
+
" }\n",
|
| 69 |
+
"\n",
|
| 70 |
+
" .dataframe thead th {\n",
|
| 71 |
+
" text-align: right;\n",
|
| 72 |
+
" }\n",
|
| 73 |
+
"</style>\n",
|
| 74 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
| 75 |
+
" <thead>\n",
|
| 76 |
+
" <tr style=\"text-align: right;\">\n",
|
| 77 |
+
" <th></th>\n",
|
| 78 |
+
" <th>Text</th>\n",
|
| 79 |
+
" <th>Language</th>\n",
|
| 80 |
+
" </tr>\n",
|
| 81 |
+
" </thead>\n",
|
| 82 |
+
" <tbody>\n",
|
| 83 |
+
" <tr>\n",
|
| 84 |
+
" <th>0</th>\n",
|
| 85 |
+
" <td>Nature, in the broadest sense, is the natural...</td>\n",
|
| 86 |
+
" <td>English</td>\n",
|
| 87 |
+
" </tr>\n",
|
| 88 |
+
" <tr>\n",
|
| 89 |
+
" <th>1</th>\n",
|
| 90 |
+
" <td>\"Nature\" can refer to the phenomena of the phy...</td>\n",
|
| 91 |
+
" <td>English</td>\n",
|
| 92 |
+
" </tr>\n",
|
| 93 |
+
" <tr>\n",
|
| 94 |
+
" <th>2</th>\n",
|
| 95 |
+
" <td>The study of nature is a large, if not the onl...</td>\n",
|
| 96 |
+
" <td>English</td>\n",
|
| 97 |
+
" </tr>\n",
|
| 98 |
+
" <tr>\n",
|
| 99 |
+
" <th>3</th>\n",
|
| 100 |
+
" <td>Although humans are part of nature, human acti...</td>\n",
|
| 101 |
+
" <td>English</td>\n",
|
| 102 |
+
" </tr>\n",
|
| 103 |
+
" <tr>\n",
|
| 104 |
+
" <th>4</th>\n",
|
| 105 |
+
" <td>[1] The word nature is borrowed from the Old F...</td>\n",
|
| 106 |
+
" <td>English</td>\n",
|
| 107 |
+
" </tr>\n",
|
| 108 |
+
" <tr>\n",
|
| 109 |
+
" <th>...</th>\n",
|
| 110 |
+
" <td>...</td>\n",
|
| 111 |
+
" <td>...</td>\n",
|
| 112 |
+
" </tr>\n",
|
| 113 |
+
" <tr>\n",
|
| 114 |
+
" <th>10332</th>\n",
|
| 115 |
+
" <td>ನಿಮ್ಮ ತಪ್ಪು ಏನು ಬಂದಿದೆಯೆಂದರೆ ಆ ದಿನದಿಂದ ನಿಮಗೆ ಒ...</td>\n",
|
| 116 |
+
" <td>Kannada</td>\n",
|
| 117 |
+
" </tr>\n",
|
| 118 |
+
" <tr>\n",
|
| 119 |
+
" <th>10333</th>\n",
|
| 120 |
+
" <td>ನಾರ್ಸಿಸಾ ತಾನು ಮೊದಲಿಗೆ ಹೆಣಗಾಡುತ್ತಿದ್ದ ಮಾರ್ಗಗಳನ್...</td>\n",
|
| 121 |
+
" <td>Kannada</td>\n",
|
| 122 |
+
" </tr>\n",
|
| 123 |
+
" <tr>\n",
|
| 124 |
+
" <th>10334</th>\n",
|
| 125 |
+
" <td>ಹೇಗೆ ' ನಾರ್ಸಿಸಿಸಮ್ ಈಗ ಮರಿಯನ್ ಅವರಿಗೆ ಸಂಭವಿಸಿದ ಎ...</td>\n",
|
| 126 |
+
" <td>Kannada</td>\n",
|
| 127 |
+
" </tr>\n",
|
| 128 |
+
" <tr>\n",
|
| 129 |
+
" <th>10335</th>\n",
|
| 130 |
+
" <td>ಅವಳು ಈಗ ಹೆಚ್ಚು ಚಿನ್ನದ ಬ್ರೆಡ್ ಬಯಸುವುದಿಲ್ಲ ಎಂದು ...</td>\n",
|
| 131 |
+
" <td>Kannada</td>\n",
|
| 132 |
+
" </tr>\n",
|
| 133 |
+
" <tr>\n",
|
| 134 |
+
" <th>10336</th>\n",
|
| 135 |
+
" <td>ಟೆರ್ರಿ ನೀವು ನಿಜವಾಗಿಯೂ ಆ ದೇವದೂತನಂತೆ ಸ್ವಲ್ಪ ಕಾಣು...</td>\n",
|
| 136 |
+
" <td>Kannada</td>\n",
|
| 137 |
+
" </tr>\n",
|
| 138 |
+
" </tbody>\n",
|
| 139 |
+
"</table>\n",
|
| 140 |
+
"<p>10337 rows × 2 columns</p>\n",
|
| 141 |
+
"</div>"
|
| 142 |
+
],
|
| 143 |
+
"text/plain": [
|
| 144 |
+
" Text Language\n",
|
| 145 |
+
"0 Nature, in the broadest sense, is the natural... English\n",
|
| 146 |
+
"1 \"Nature\" can refer to the phenomena of the phy... English\n",
|
| 147 |
+
"2 The study of nature is a large, if not the onl... English\n",
|
| 148 |
+
"3 Although humans are part of nature, human acti... English\n",
|
| 149 |
+
"4 [1] The word nature is borrowed from the Old F... English\n",
|
| 150 |
+
"... ... ...\n",
|
| 151 |
+
"10332 ನಿಮ್ಮ ತಪ್ಪು ಏನು ಬಂದಿದೆಯೆಂ��ರೆ ಆ ದಿನದಿಂದ ನಿಮಗೆ ಒ... Kannada\n",
|
| 152 |
+
"10333 ನಾರ್ಸಿಸಾ ತಾನು ಮೊದಲಿಗೆ ಹೆಣಗಾಡುತ್ತಿದ್ದ ಮಾರ್ಗಗಳನ್... Kannada\n",
|
| 153 |
+
"10334 ಹೇಗೆ ' ನಾರ್ಸಿಸಿಸಮ್ ಈಗ ಮರಿಯನ್ ಅವರಿಗೆ ಸಂಭವಿಸಿದ ಎ... Kannada\n",
|
| 154 |
+
"10335 ಅವಳು ಈಗ ಹೆಚ್ಚು ಚಿನ್ನದ ಬ್ರೆಡ್ ಬಯಸುವುದಿಲ್ಲ ಎಂದು ... Kannada\n",
|
| 155 |
+
"10336 ಟೆರ್ರಿ ನೀವು ನಿಜವಾಗಿಯೂ ಆ ದೇವದೂತನಂತೆ ಸ್ವಲ್ಪ ಕಾಣು... Kannada\n",
|
| 156 |
+
"\n",
|
| 157 |
+
"[10337 rows x 2 columns]"
|
| 158 |
+
]
|
| 159 |
+
},
|
| 160 |
+
"execution_count": 7,
|
| 161 |
+
"metadata": {},
|
| 162 |
+
"output_type": "execute_result"
|
| 163 |
+
}
|
| 164 |
+
],
|
| 165 |
+
"source": [
|
| 166 |
+
"data = pd.read_csv('language_detection.csv')"
|
| 167 |
+
]
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"cell_type": "code",
|
| 171 |
+
"execution_count": 8,
|
| 172 |
+
"metadata": {},
|
| 173 |
+
"outputs": [],
|
| 174 |
+
"source": [
|
| 175 |
+
"X = data['Text']\n",
|
| 176 |
+
"y = data['Language']"
|
| 177 |
+
]
|
| 178 |
+
},
|
| 179 |
+
{
|
| 180 |
+
"cell_type": "code",
|
| 181 |
+
"execution_count": 9,
|
| 182 |
+
"metadata": {},
|
| 183 |
+
"outputs": [],
|
| 184 |
+
"source": [
|
| 185 |
+
"from sklearn.preprocessing import LabelEncoder\n",
|
| 186 |
+
"le = LabelEncoder()\n",
|
| 187 |
+
"y = le.fit_transform(y)\n"
|
| 188 |
+
]
|
| 189 |
+
},
|
| 190 |
+
{
|
| 191 |
+
"cell_type": "code",
|
| 192 |
+
"execution_count": 10,
|
| 193 |
+
"metadata": {},
|
| 194 |
+
"outputs": [
|
| 195 |
+
{
|
| 196 |
+
"data": {
|
| 197 |
+
"text/plain": [
|
| 198 |
+
"array(['Arabic', 'Danish', 'Dutch', 'English', 'French', 'German',\n",
|
| 199 |
+
" 'Greek', 'Hindi', 'Italian', 'Kannada', 'Malayalam', 'Portugeese',\n",
|
| 200 |
+
" 'Russian', 'Spanish', 'Sweedish', 'Tamil', 'Turkish'], dtype=object)"
|
| 201 |
+
]
|
| 202 |
+
},
|
| 203 |
+
"execution_count": 10,
|
| 204 |
+
"metadata": {},
|
| 205 |
+
"output_type": "execute_result"
|
| 206 |
+
}
|
| 207 |
+
],
|
| 208 |
+
"source": [
|
| 209 |
+
"le.classes_"
|
| 210 |
+
]
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"cell_type": "code",
|
| 214 |
+
"execution_count": 12,
|
| 215 |
+
"metadata": {},
|
| 216 |
+
"outputs": [],
|
| 217 |
+
"source": [
|
| 218 |
+
"data_list =[]\n",
|
| 219 |
+
"for text in X:\n",
|
| 220 |
+
" text = re.sub(r'[!@#$(),n\"%^*?:;~`0-9]', ' ', text)\n",
|
| 221 |
+
" text = re.sub(r'[[]]', ' ', text)\n",
|
| 222 |
+
" text = text.lower()\n",
|
| 223 |
+
" data_list.append(text)"
|
| 224 |
+
]
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"cell_type": "code",
|
| 228 |
+
"execution_count": 26,
|
| 229 |
+
"metadata": {},
|
| 230 |
+
"outputs": [],
|
| 231 |
+
"source": [
|
| 232 |
+
"from sklearn.model_selection import train_test_split\n",
|
| 233 |
+
"\n",
|
| 234 |
+
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
|
| 235 |
+
]
|
| 236 |
+
},
|
| 237 |
+
{
|
| 238 |
+
"cell_type": "code",
|
| 239 |
+
"execution_count": 27,
|
| 240 |
+
"metadata": {},
|
| 241 |
+
"outputs": [],
|
| 242 |
+
"source": [
|
| 243 |
+
"from sklearn.feature_extraction.text import CountVectorizer\n",
|
| 244 |
+
"cv = CountVectorizer()\n",
|
| 245 |
+
"X_train = cv.fit_transform(X_train).toarray()\n",
|
| 246 |
+
"X_test = cv.transform(X_test).toarray()"
|
| 247 |
+
]
|
| 248 |
+
},
|
| 249 |
+
{
|
| 250 |
+
"cell_type": "code",
|
| 251 |
+
"execution_count": 28,
|
| 252 |
+
"metadata": {},
|
| 253 |
+
"outputs": [
|
| 254 |
+
{
|
| 255 |
+
"data": {
|
| 256 |
+
"text/html": [
|
| 257 |
+
"<style>#sk-container-id-2 {color: black;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MultinomialNB()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">MultinomialNB</label><div class=\"sk-toggleable__content\"><pre>MultinomialNB()</pre></div></div></div></div></div>"
|
| 258 |
+
],
|
| 259 |
+
"text/plain": [
|
| 260 |
+
"MultinomialNB()"
|
| 261 |
+
]
|
| 262 |
+
},
|
| 263 |
+
"execution_count": 28,
|
| 264 |
+
"metadata": {},
|
| 265 |
+
"output_type": "execute_result"
|
| 266 |
+
}
|
| 267 |
+
],
|
| 268 |
+
"source": [
|
| 269 |
+
"from sklearn.naive_bayes import MultinomialNB\n",
|
| 270 |
+
"\n",
|
| 271 |
+
"model = MultinomialNB()\n",
|
| 272 |
+
"model.fit(X_train, y_train)"
|
| 273 |
+
]
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"cell_type": "code",
|
| 277 |
+
"execution_count": 29,
|
| 278 |
+
"metadata": {},
|
| 279 |
+
"outputs": [],
|
| 280 |
+
"source": [
|
| 281 |
+
"y_predict = model.predict(X_test)"
|
| 282 |
+
]
|
| 283 |
+
},
|
| 284 |
+
{
|
| 285 |
+
"cell_type": "code",
|
| 286 |
+
"execution_count": 30,
|
| 287 |
+
"metadata": {},
|
| 288 |
+
"outputs": [
|
| 289 |
+
{
|
| 290 |
+
"name": "stdout",
|
| 291 |
+
"output_type": "stream",
|
| 292 |
+
"text": [
|
| 293 |
+
"Accuracy is: 0.9825918762088974\n"
|
| 294 |
+
]
|
| 295 |
+
}
|
| 296 |
+
],
|
| 297 |
+
"source": [
|
| 298 |
+
"from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
|
| 299 |
+
"\n",
|
| 300 |
+
"ac = accuracy_score(y_test, y_predict)\n",
|
| 301 |
+
"cm = confusion_matrix(y_test, y_predict)\n",
|
| 302 |
+
"cr = classification_report(y_test, y_predict)\n",
|
| 303 |
+
"print('Accuracy is:', ac)"
|
| 304 |
+
]
|
| 305 |
+
},
|
| 306 |
+
{
|
| 307 |
+
"cell_type": "code",
|
| 308 |
+
"execution_count": 32,
|
| 309 |
+
"metadata": {},
|
| 310 |
+
"outputs": [
|
| 311 |
+
{
|
| 312 |
+
"name": "stdout",
|
| 313 |
+
"output_type": "stream",
|
| 314 |
+
"text": [
|
| 315 |
+
"classification report is: precision recall f1-score support\n",
|
| 316 |
+
"\n",
|
| 317 |
+
" 0 1.00 0.98 0.99 106\n",
|
| 318 |
+
" 1 0.97 0.96 0.97 73\n",
|
| 319 |
+
" 2 0.99 0.97 0.98 111\n",
|
| 320 |
+
" 3 0.92 1.00 0.96 291\n",
|
| 321 |
+
" 4 0.99 0.99 0.99 219\n",
|
| 322 |
+
" 5 1.00 0.97 0.98 93\n",
|
| 323 |
+
" 6 1.00 0.97 0.99 68\n",
|
| 324 |
+
" 7 1.00 1.00 1.00 10\n",
|
| 325 |
+
" 8 1.00 0.99 1.00 145\n",
|
| 326 |
+
" 9 1.00 1.00 1.00 66\n",
|
| 327 |
+
" 10 1.00 0.98 0.99 121\n",
|
| 328 |
+
" 11 0.99 0.98 0.99 144\n",
|
| 329 |
+
" 12 1.00 0.99 0.99 136\n",
|
| 330 |
+
" 13 0.99 0.97 0.98 160\n",
|
| 331 |
+
" 14 1.00 0.98 0.99 133\n",
|
| 332 |
+
" 15 1.00 0.99 0.99 87\n",
|
| 333 |
+
" 16 1.00 0.94 0.97 105\n",
|
| 334 |
+
"\n",
|
| 335 |
+
" accuracy 0.98 2068\n",
|
| 336 |
+
" macro avg 0.99 0.98 0.99 2068\n",
|
| 337 |
+
"weighted avg 0.98 0.98 0.98 2068\n",
|
| 338 |
+
"\n"
|
| 339 |
+
]
|
| 340 |
+
}
|
| 341 |
+
],
|
| 342 |
+
"source": [
|
| 343 |
+
"print('classification report is:', cr)"
|
| 344 |
+
]
|
| 345 |
+
},
|
| 346 |
+
{
|
| 347 |
+
"cell_type": "code",
|
| 348 |
+
"execution_count": 33,
|
| 349 |
+
"metadata": {},
|
| 350 |
+
"outputs": [
|
| 351 |
+
{
|
| 352 |
+
"data": {
|
| 353 |
+
"image/png": "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ekRsEq1H7qat4asQ8P5gBM55Bw2sLZGffQsH18Yj7vNN2tec2HUUm2ZEo+t7/TBgdhByzmdhzbjFuHg0Xe99D4j4faO6Qdb7cFQnLS0N3t7eKC8vr9H7nvU+HERERETPoib34TCUZ70PR20T+T4cro295E54rAs30+ROqDFZZzi2bdtW5fPnz583UAkRERER0X0aXqWqVsk64BgwYAAUCsUjH5SqiJe3JSIiIiKqu2S9SpWDgwM2b94MjUZT6SMlpe7dup2IiIiIiP5H1gGHj48PkpMffym16mY/iIiIiIhqmyRJwj7qIllPqQoLC0NRUdFjn3d3d8eePXsMWERERERERLVJ1gFHx44dq3xerVajc+fOBqohIiIiIqLaJvR9OIiIiIiIDI1Xqapdsn6Gg4iIiIiInm8ccBARERERkd7wlCoiIiIiogrq6tWgRMUZDiIiIiIi0hsOOIiIiIiISG94ShURERERUQUanlJVqzjDQUREREREesMBBxERERER6Q1PqSIiIiIiqkDijf9qFWc4iIiIiIhIbzjDQcIwUijkTtAh4jW4xSsiIqLKLMnaK3fCIz526CJ3Av1FccBBRERERFSBiL90rMt4ShUREREREekNBxxERERERKQ3PKWKiIiIiKgCDT81Was4w0FERERERHrDAQcREREREekNT6kiIiIiIqqAV6mqXZzhICIiIiIiveGAg4iIiIiI9IanVBERERERVaDhKVW1ijMcRERERESkNxxwEBERERGR3vCUKiIiIiKiCniVqtrFGQ4iIiIiItIbDjiIiIiIiEhveEoVEREREVEFGvCUqtrEGY7HGDc2COfOHEThnQzsT9qOtr6vsKeCjh38sHXLKly+mIyykkz06xcga88//zkCyUfjkHvjNHJvnMbexB8RENBFtp4pU8bjwP4dyLuZjsyradi4MRrNmjWVrecB0X6ORGwSrUfEJtF6RGwSrUfEJtF6RGySs8dUXQ/dZg3HuN+W4P30lRi+eRbsW7tpn69vbYHen/4TwYeX4f0/ojF49RQ0bGJnsD6qW2QdcFy9ehW5ubnar/ft24dhw4ahY8eOGD58OA4cOCBL16BB/fDpwnDM+fgztPXrgbRjp/DTju9gY9OYPf+lVtfHsWOnMGHSDNkaKsrMvIYZH0bg1fa90P61XkhI+A2bNkajhWczWXo6dXwVkZGr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",
|
| 354 |
+
"text/plain": [
|
| 355 |
+
"<Figure size 1000x1000 with 2 Axes>"
|
| 356 |
+
]
|
| 357 |
+
},
|
| 358 |
+
"metadata": {},
|
| 359 |
+
"output_type": "display_data"
|
| 360 |
+
}
|
| 361 |
+
],
|
| 362 |
+
"source": [
|
| 363 |
+
"figure = plt.figure(figsize=(10, 10))\n",
|
| 364 |
+
"sns.heatmap(cm, annot=True)\n",
|
| 365 |
+
"plt.xlabel('Predicted')\n",
|
| 366 |
+
"plt.ylabel('Truth')\n",
|
| 367 |
+
"\n",
|
| 368 |
+
"plt.show()"
|
| 369 |
+
]
|
| 370 |
+
},
|
| 371 |
+
{
|
| 372 |
+
"cell_type": "code",
|
| 373 |
+
"execution_count": 34,
|
| 374 |
+
"metadata": {},
|
| 375 |
+
"outputs": [],
|
| 376 |
+
"source": [
|
| 377 |
+
"# Save the model\n",
|
| 378 |
+
"import pickle\n",
|
| 379 |
+
"\n",
|
| 380 |
+
"with open('trained-01.pkl', 'wb') as file:\n",
|
| 381 |
+
" pickle.dump(model, file)"
|
| 382 |
+
]
|
| 383 |
+
},
|
| 384 |
+
{
|
| 385 |
+
"cell_type": "code",
|
| 386 |
+
"execution_count": 45,
|
| 387 |
+
"metadata": {},
|
| 388 |
+
"outputs": [
|
| 389 |
+
{
|
| 390 |
+
"data": {
|
| 391 |
+
"text/plain": [
|
| 392 |
+
"array(['Portugeese', 'English'], dtype=object)"
|
| 393 |
+
]
|
| 394 |
+
},
|
| 395 |
+
"execution_count": 45,
|
| 396 |
+
"metadata": {},
|
| 397 |
+
"output_type": "execute_result"
|
| 398 |
+
}
|
| 399 |
+
],
|
| 400 |
+
"source": [
|
| 401 |
+
"text1 = 'Oi tudo bem?'\n",
|
| 402 |
+
"text2 = 'Hello how are you?'\n",
|
| 403 |
+
"text = cv.transform([text1,text2]).toarray()\n",
|
| 404 |
+
"model.predict(text)\n",
|
| 405 |
+
"\n",
|
| 406 |
+
"\n",
|
| 407 |
+
"le.classes_[model.predict(text)]"
|
| 408 |
+
]
|
| 409 |
+
},
|
| 410 |
+
{
|
| 411 |
+
"cell_type": "code",
|
| 412 |
+
"execution_count": null,
|
| 413 |
+
"metadata": {},
|
| 414 |
+
"outputs": [],
|
| 415 |
+
"source": [
|
| 416 |
+
"\n"
|
| 417 |
+
]
|
| 418 |
+
},
|
| 419 |
+
{
|
| 420 |
+
"cell_type": "code",
|
| 421 |
+
"execution_count": null,
|
| 422 |
+
"metadata": {},
|
| 423 |
+
"outputs": [],
|
| 424 |
+
"source": []
|
| 425 |
+
},
|
| 426 |
+
{
|
| 427 |
+
"cell_type": "code",
|
| 428 |
+
"execution_count": null,
|
| 429 |
+
"metadata": {},
|
| 430 |
+
"outputs": [],
|
| 431 |
+
"source": []
|
| 432 |
+
}
|
| 433 |
+
],
|
| 434 |
+
"metadata": {
|
| 435 |
+
"kernelspec": {
|
| 436 |
+
"display_name": "Python 3",
|
| 437 |
+
"language": "python",
|
| 438 |
+
"name": "python3"
|
| 439 |
+
},
|
| 440 |
+
"language_info": {
|
| 441 |
+
"codemirror_mode": {
|
| 442 |
+
"name": "ipython",
|
| 443 |
+
"version": 3
|
| 444 |
+
},
|
| 445 |
+
"file_extension": ".py",
|
| 446 |
+
"mimetype": "text/x-python",
|
| 447 |
+
"name": "python",
|
| 448 |
+
"nbconvert_exporter": "python",
|
| 449 |
+
"pygments_lexer": "ipython3",
|
| 450 |
+
"version": "3.10.6"
|
| 451 |
+
}
|
| 452 |
+
},
|
| 453 |
+
"nbformat": 4,
|
| 454 |
+
"nbformat_minor": 2
|
| 455 |
+
}
|
app/main.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import FastAPI
|
| 2 |
+
from app.model.model import predict_language
|
| 3 |
+
from app.model.model import __version__
|
| 4 |
+
from app.schemas import Prediction, TextIn
|
| 5 |
+
|
| 6 |
+
app = FastAPI()
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
@app.get("/")
|
| 10 |
+
def home():
|
| 11 |
+
return {"message": "Ok", "model_version": __version__}
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
@app.post("/predict", response_model=Prediction)
|
| 15 |
+
def predict(payload: TextIn):
|
| 16 |
+
return {"language": predict_language(payload.text)}
|
app/model/model.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pickle
|
| 2 |
+
import re
|
| 3 |
+
from pathlib import Path
|
| 4 |
+
|
| 5 |
+
__version__ = '01'
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
BASE_DIR = Path(__file__).resolve(strict=True).parent
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
with open(f"{BASE_DIR}/trained-{__version__}.pkl", "rb") as f:
|
| 12 |
+
model = pickle.load(f)
|
| 13 |
+
|
| 14 |
+
classes = ['Arabic', 'Danish', 'Dutch', 'English', 'French', 'German',
|
| 15 |
+
'Greek', 'Hindi', 'Italian', 'Kannada', 'Malayalam', 'Portugeese',
|
| 16 |
+
'Russian', 'Spanish', 'Sweedish', 'Tamil', 'Turkish']
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def predict_language(text):
|
| 21 |
+
text = re.sub(r'[!@#$(),\n"%^*?\:;~`0-9]', ' ', text)
|
| 22 |
+
text = re.sub(r'[[]]', ' ', text)
|
| 23 |
+
text = text.lower()
|
| 24 |
+
pred = model.predict([text])
|
| 25 |
+
return classes[pred[0]]
|
app/model/trained-01.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4c65a0d9fd8daa233db3aad9bcff1703ab1441e2bded657cc11b6cbea5daa3da
|
| 3 |
+
size 9468690
|
app/schemas.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from pydantic import BaseModel
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
class TextIn(BaseModel):
|
| 5 |
+
text: str
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class Prediction(BaseModel):
|
| 9 |
+
language: str
|
requirements.txt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
scikit-learn==1.3.0
|
| 2 |
+
uvicorn
|
| 3 |
+
fastapi
|