{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "gpuType": "T4" }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" }, "accelerator": "GPU" }, "cells": [ { "cell_type": "markdown", "source": [ "##Installing Data" ], "metadata": { "id": "8RPHufKzKDHP" } }, { "cell_type": "code", "source": [ "!pip install opendatasets" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "40Tc5Jja7oI2", "outputId": "3eb4348e-b408-4d9c-f144-e13664b553ea" }, "execution_count": 1, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting opendatasets\n", " Downloading opendatasets-0.1.22-py3-none-any.whl (15 kB)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from opendatasets) (4.66.2)\n", "Requirement already satisfied: kaggle in /usr/local/lib/python3.10/dist-packages (from opendatasets) (1.5.16)\n", "Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from opendatasets) (8.1.7)\n", "Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.10/dist-packages (from kaggle->opendatasets) (1.16.0)\n", "Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from kaggle->opendatasets) (2024.2.2)\n", "Requirement already satisfied: python-dateutil in /usr/local/lib/python3.10/dist-packages (from kaggle->opendatasets) (2.8.2)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from kaggle->opendatasets) (2.31.0)\n", "Requirement already satisfied: python-slugify in /usr/local/lib/python3.10/dist-packages (from kaggle->opendatasets) (8.0.4)\n", "Requirement already satisfied: urllib3 in /usr/local/lib/python3.10/dist-packages (from kaggle->opendatasets) (2.0.7)\n", "Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from kaggle->opendatasets) (6.1.0)\n", "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->kaggle->opendatasets) (0.5.1)\n", "Requirement already satisfied: text-unidecode>=1.3 in /usr/local/lib/python3.10/dist-packages (from python-slugify->kaggle->opendatasets) (1.3)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->kaggle->opendatasets) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->kaggle->opendatasets) (3.6)\n", "Installing collected packages: opendatasets\n", "Successfully installed opendatasets-0.1.22\n" ] } ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "yFQD_jMqzKHL" }, "outputs": [], "source": [ "dataset_link = 'https://www.kaggle.com/datasets/zarajamshaid/language-identification-datasst/download?datasetVersionNumber=1'" ] }, { "cell_type": "code", "source": [ "import opendatasets as od\n", "od.download(dataset_link)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sX9440bT7-pY", "outputId": "872b7528-059e-47dc-95d9-ed76fbd58a5a" }, "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Downloading language-identification-datasst.zip to ./language-identification-datasst\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 5.53M/5.53M [00:00<00:00, 45.5MB/s]" ] }, { "output_type": "stream", "name": "stdout", "text": [ "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "\n" ] } ] }, { "cell_type": "markdown", "source": [ "##Data Analyzing" ], "metadata": { "id": "ALKPYmoaCajZ" } }, { "cell_type": "code", "source": [ "import pandas as pd\n", "df = pd.read_csv('/content/language-identification-datasst/dataset.csv') #Initializing the data as dataframe using pandas" ], "metadata": { "id": "Lzdz-Irt8Cap" }, "execution_count": 2, "outputs": [] }, { "cell_type": "code", "source": [ "df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "IyX0rNLW8Ie1", "outputId": "9acf1992-4468-4ae9-fd92-ab9fd2a79e95" }, "execution_count": 3, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(22000, 2)" ] }, "metadata": {}, "execution_count": 3 } ] }, { "cell_type": "code", "source": [ "df.head()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "dDYoxrf8-eHS", "outputId": "c62d1df0-502f-4b47-a656-2dd3e11d330a" }, "execution_count": 4, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Text language\n", "0 klement gottwaldi surnukeha palsameeriti ning ... Estonian\n", "1 sebes joseph pereira thomas på eng the jesuit... Swedish\n", "2 ถนนเจริญกรุง อักษรโรมัน thanon charoen krung เ... Thai\n", "3 விசாகப்பட்டினம் தமிழ்ச்சங்கத்தை இந்துப் பத்திர... Tamil\n", "4 de spons behoort tot het geslacht haliclona en... Dutch" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Textlanguage
0klement gottwaldi surnukeha palsameeriti ning ...Estonian
1sebes joseph pereira thomas på eng the jesuit...Swedish
2ถนนเจริญกรุง อักษรโรมัน thanon charoen krung เ...Thai
3விசாகப்பட்டினம் தமிழ்ச்சங்கத்தை இந்துப் பத்திர...Tamil
4de spons behoort tot het geslacht haliclona en...Dutch
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "df", "summary": "{\n \"name\": \"df\",\n \"rows\": 22000,\n \"fields\": [\n {\n \"column\": \"Text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 21859,\n \"samples\": [\n \"semua kucing dalam genus ini berbagi nenek moyang yang sama yang mungkin hidup sekitar \\u2013 juta tahun yang lalu di asia hubungan yang tepat dalam felidae dekat tetapi masih belum pasti misalnya kucing gunung cina kadang-kadang diklasifikasikan dengan nama felis silvestris bieti sebagai upaspesies kucing liar seperti varietas afrika utara f s lybica\",\n \"not completely happy with their temporary name in the summer of a sign caught citos eye just outside the freestate town of kroonstad pointing to a little town called \\\"wonderboom\\\" in danny de wet left the band and was replaced by garth mcleod formerly of respected south african rock band sugardrive in garth mcleod was killed in a motorcycle accident and was replaced by jonathan bell\",\n \"tetraglenes bucculenta \\u00e4r en skalbaggsart som beskrevs av charles joseph gahan tetraglenes bucculenta ing\\u00e5r i sl\\u00e4ktet tetraglenes och familjen l\\u00e5nghorningar\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"language\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"Estonian\",\n \"Korean\",\n \"Urdu\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 4 } ] }, { "cell_type": "code", "source": [ "df['language'].unique()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_BhNeq7V-evT", "outputId": "7ae6b564-389d-4197-983d-ba6cb02dd73b" }, "execution_count": 5, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['Estonian', 'Swedish', 'Thai', 'Tamil', 'Dutch', 'Japanese',\n", " 'Turkish', 'Latin', 'Urdu', 'Indonesian', 'Portugese', 'French',\n", " 'Chinese', 'Korean', 'Hindi', 'Spanish', 'Pushto', 'Persian',\n", " 'Romanian', 'Russian', 'English', 'Arabic'], dtype=object)" ] }, "metadata": {}, "execution_count": 5 } ] }, { "cell_type": "code", "source": [ "df.language.value_counts() #All texts and languages are equal" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "I2xp4hIA-ujt", "outputId": "c3220884-b561-41c2-83f9-33888920fe80" }, "execution_count": 6, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Estonian 1000\n", "Swedish 1000\n", "Thai 1000\n", "Tamil 1000\n", "Dutch 1000\n", "Japanese 1000\n", "Turkish 1000\n", "Latin 1000\n", "Urdu 1000\n", "Indonesian 1000\n", "Portugese 1000\n", "French 1000\n", "Chinese 1000\n", "Korean 1000\n", "Hindi 1000\n", "Spanish 1000\n", "Pushto 1000\n", "Persian 1000\n", "Romanian 1000\n", "Russian 1000\n", "English 1000\n", "Arabic 1000\n", "Name: language, dtype: int64" ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "code", "source": [ "df.isnull().sum()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sA092yoQ-1Au", "outputId": "b34fe8be-9b13-4c9f-f94e-21c4e850b5b9" }, "execution_count": 7, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text 0\n", "language 0\n", "dtype: int64" ] }, "metadata": {}, "execution_count": 7 } ] }, { "cell_type": "code", "source": [ "df.dtypes" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "jsbcBy99-3gI", "outputId": "3e1f5397-b7e2-4978-b010-e84b5d1b467e" }, "execution_count": 8, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text object\n", "language object\n", "dtype: object" ] }, "metadata": {}, "execution_count": 8 } ] }, { "cell_type": "markdown", "source": [ "##Data Preprocessing" ], "metadata": { "id": "CkRJDD3gKQTl" } }, { "cell_type": "code", "source": [ "# dropping duplicate samples\n", "df = df.drop_duplicates(subset='Text')\n", "df = df.reset_index(drop=True)" ], "metadata": { "id": "ATmJtyAw-4Sq" }, "execution_count": 9, "outputs": [] }, { "cell_type": "code", "source": [ "df.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8SkwcKJB_BDi", "outputId": "cbf90cf3-2349-4268-80c4-bd5bdca150c8" }, "execution_count": 10, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(21859, 2)" ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "code", "source": [ "# non-alphanumeric characters to remove\n", "nonalphanumeric = ['\\'', '.', ',', '\\\"', ':', ';', '!', '@', '#', '$', '%', '^', '&',\n", " '*', '(', ')', '-', '_', '+', '=', '[', ']', '{', '}', '\\\\', '?',\n", " '/','>', '<', '|', ' ']\n", "len(nonalphanumeric)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XvpnoNtV_DOk", "outputId": "3f722d14-5d23-4df5-ca83-9987b1226483" }, "execution_count": 11, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "31" ] }, "metadata": {}, "execution_count": 11 } ] }, { "cell_type": "markdown", "source": [ "The function clean_text():\n", "\n", "1. tokenizes the text into a list of words\n", "2. lowers all words into lowercase\n", "3. removes non alphanumeric from the list of lowered words\n", "stems the words\n", "4. returns them in form of a string seperated by \" \"" ], "metadata": { "id": "DyMi3cfF_Z1m" } }, { "cell_type": "code", "source": [ "from nltk.tokenize import word_tokenize\n", "import nltk\n", "nltk.download('punkt')\n", "\n", "def clean_text(text):\n", " \"\"\"\n", " Function to clean and preprocess text data.\n", " \"\"\"\n", " # Tokenize the text\n", " tokens = word_tokenize(text)\n", "\n", " # Remove non-alphanumeric characters\n", " words = [word.lower() for word in tokens if word not in nonalphanumeric]\n", "\n", " # Join the cleaned words back into a single string\n", " cleaned_text = \" \".join(words)\n", "\n", " return cleaned_text\n", "\n", "# Example usage\n", "text = \"This is an example sentence for lemmatization and stemming.\"\n", "cleaned_text_result = clean_text(text)\n", "print(cleaned_text_result)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "tnjimn0-_S2c", "outputId": "c9ca9776-9991-4a4c-ade4-e4cc0b22d829" }, "execution_count": 43, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "this is an example sentence for lemmatization and stemming\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "[nltk_data] Downloading package punkt to /root/nltk_data...\n", "[nltk_data] Package punkt is already up-to-date!\n" ] } ] }, { "cell_type": "code", "source": [ "# applying clean_text function to all rows in 'Text' column\n", "df['clean_text'] = df['Text'].apply(clean_text)" ], "metadata": { "id": "74MBlrEN_sZf" }, "execution_count": 13, "outputs": [] }, { "cell_type": "markdown", "source": [ "####Label Encoding" ], "metadata": { "id": "A89S5oMZLilB" } }, { "cell_type": "code", "source": [ "from sklearn.preprocessing import LabelEncoder\n", "\n", "# using LabelEncoder to get placeholder number values for categorical variabel 'language'\n", "le = LabelEncoder()\n", "df['language_encoded'] = le.fit_transform(df['language'])\n", "df.head()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "0LHYyglR_uZD", "outputId": "3836e669-03c0-4cfc-844d-c4aeaca69686" }, "execution_count": 14, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Text language \\\n", "0 klement gottwaldi surnukeha palsameeriti ning ... Estonian \n", "1 sebes joseph pereira thomas på eng the jesuit... Swedish \n", "2 ถนนเจริญกรุง อักษรโรมัน thanon charoen krung เ... Thai \n", "3 விசாகப்பட்டினம் தமிழ்ச்சங்கத்தை இந்துப் பத்திர... Tamil \n", "4 de spons behoort tot het geslacht haliclona en... Dutch \n", "\n", " clean_text language_encoded \n", "0 klement gottwaldi surnukeha palsameeriti ning ... 4 \n", "1 sebes joseph pereira thomas på eng the jesuits... 17 \n", "2 ถนนเจริญกรุง อักษรโรมัน thanon charoen krung เ... 19 \n", "3 விசாகப்பட்டினம் தமிழ்ச்சங்கத்தை இந்துப் பத்திர... 18 \n", "4 de spons behoort tot het geslacht haliclona en... 2 " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Textlanguageclean_textlanguage_encoded
0klement gottwaldi surnukeha palsameeriti ning ...Estonianklement gottwaldi surnukeha palsameeriti ning ...4
1sebes joseph pereira thomas på eng the jesuit...Swedishsebes joseph pereira thomas på eng the jesuits...17
2ถนนเจริญกรุง อักษรโรมัน thanon charoen krung เ...Thaiถนนเจริญกรุง อักษรโรมัน thanon charoen krung เ...19
3விசாகப்பட்டினம் தமிழ்ச்சங்கத்தை இந்துப் பத்திர...Tamilவிசாகப்பட்டினம் தமிழ்ச்சங்கத்தை இந்துப் பத்திர...18
4de spons behoort tot het geslacht haliclona en...Dutchde spons behoort tot het geslacht haliclona en...2
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "df", "summary": "{\n \"name\": \"df\",\n \"rows\": 21859,\n \"fields\": [\n {\n \"column\": \"Text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 21859,\n \"samples\": [\n \"semua kucing dalam genus ini berbagi nenek moyang yang sama yang mungkin hidup sekitar \\u2013 juta tahun yang lalu di asia hubungan yang tepat dalam felidae dekat tetapi masih belum pasti misalnya kucing gunung cina kadang-kadang diklasifikasikan dengan nama felis silvestris bieti sebagai upaspesies kucing liar seperti varietas afrika utara f s lybica\",\n \"not completely happy with their temporary name in the summer of a sign caught citos eye just outside the freestate town of kroonstad pointing to a little town called \\\"wonderboom\\\" in danny de wet left the band and was replaced by garth mcleod formerly of respected south african rock band sugardrive in garth mcleod was killed in a motorcycle accident and was replaced by jonathan bell\",\n \"tetraglenes bucculenta \\u00e4r en skalbaggsart som beskrevs av charles joseph gahan tetraglenes bucculenta ing\\u00e5r i sl\\u00e4ktet tetraglenes och familjen l\\u00e5nghorningar\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"language\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 22,\n \"samples\": [\n \"Estonian\",\n \"Korean\",\n \"Urdu\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"clean_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 21857,\n \"samples\": [\n \"semua kucing dalam genus ini berbagi nenek moyang yang sama yang mungkin hidup sekitar \\u2013 juta tahun yang lalu di asia hubungan yang tepat dalam felidae dekat tetapi masih belum pasti misalnya kucing gunung cina kadang-kadang diklasifikasikan dengan nama felis silvestris bieti sebagai upaspesies kucing liar seperti varietas afrika utara f s lybica\",\n \"\\u0628\\u0627\\u0632\\u06cc\\u0627\\u0641\\u062a \\u066a \\u062f\\u0631\\u0635\\u062f\\u06cc \\u0627\\u062a\\u0648\\u0645\\u0628\\u06cc\\u0644\\u0633\\u0627\\u0644 \\u0627\\u06cc\\u0646 \\u0627\\u062a\\u0648\\u0645\\u0628\\u06cc\\u0644 \\u0628\\u0631\\u0627\\u06cc \\u0627\\u0648\\u0644\\u06cc\\u0646 \\u0628\\u0627\\u0631 \\u062f\\u0631 \\u0631\\u0648\\u0645\\u0627\\u0646\\u06cc \\u062a\\u062d\\u062a \\u0628\\u0631\\u0646\\u062f dacia \\u0639\\u0631\\u0636\\u0647 \\u06af\\u0631\\u062f\\u06cc\\u062f \\u0627\\u0645\\u0627 \\u062f\\u0631 \\u0628\\u0631\\u062e\\u06cc \\u06a9\\u0634\\u0648\\u0631\\u0647\\u0627 \\u062a\\u062d\\u062a \\u0628\\u0631\\u0646\\u062f \\u0631\\u0646\\u0648 \\u0648 \\u062f\\u0631 \\u0628\\u0631\\u062e\\u06cc \\u0646\\u06cc\\u0632 \\u062a\\u062d\\u062a \\u0628\\u0631\\u0646\\u062f \\u0646\\u06cc\\u0633\\u0627\\u0646 \\u0639\\u0631\\u0636\\u0647 \\u0645\\u06cc\\u200c\\u06af\\u0631\\u062f\\u062f \\u0627\\u06cc\\u0646 \\u0627\\u062a\\u0648\\u0645\\u0628\\u06cc\\u0644 \\u062f\\u0631 \\u0646\\u062a\\u06cc\\u062c\\u0647 \\u0628\\u0631 \\u067e\\u0627\\u06cc\\u0647 \\u067e\\u0644\\u0627\\u062a\\u0641\\u0631\\u0645 \\u067e\\u0631\\u0648\\u0698\\u0647 \\u0627\\u06cc\\u06a9\\u0633 \\u0646\\u0648\\u062f \\u062a\\u062d\\u062a \\u0647\\u062f\\u0627\\u06cc\\u062a louis schweitzer \\u0637\\u0631\\u0627\\u062d\\u06cc \\u0648 \\u0628\\u0647 \\u0645\\u0631\\u062d\\u0644\\u0647 \\u062a\\u0648\\u0644\\u06cc\\u062f \\u0631\\u0633\\u06cc\\u062f\\u0647\\u200c\\u0627\\u0633\\u062a\",\n \"noile cerin\\u021be pentru sistemul existent au condus la eforturi de modernizare a sistemului gps prin implementarea noii genera\\u021bii de sateli\\u021bi gps iii \\u0219i urm\\u0103toarea genera\\u021bie a sistemului opera\\u021bional de control operational control segment ocx\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"language_encoded\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6,\n \"min\": 0,\n \"max\": 21,\n \"num_unique_values\": 22,\n \"samples\": [\n 4,\n 9,\n 21\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 14 } ] }, { "cell_type": "code", "source": [ "# list of languages encoded with thier respective indices representing their placeholder numbers\n", "\n", "lang_list = [i for i in range(22)]\n", "lang_list = le.inverse_transform(lang_list)\n", "lang_list = lang_list.tolist()\n", "lang_list" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "F4ORoPxVBHHu", "outputId": "0987547e-014f-4b89-b639-d8120cb6168a" }, "execution_count": 15, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['Arabic',\n", " 'Chinese',\n", " 'Dutch',\n", " 'English',\n", " 'Estonian',\n", " 'French',\n", " 'Hindi',\n", " 'Indonesian',\n", " 'Japanese',\n", " 'Korean',\n", " 'Latin',\n", " 'Persian',\n", " 'Portugese',\n", " 'Pushto',\n", " 'Romanian',\n", " 'Russian',\n", " 'Spanish',\n", " 'Swedish',\n", " 'Tamil',\n", " 'Thai',\n", " 'Turkish',\n", " 'Urdu']" ] }, "metadata": {}, "execution_count": 15 } ] }, { "cell_type": "markdown", "source": [ "###Data Visualization" ], "metadata": { "id": "Pb5fm5eOKeWV" } }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "# Define a color palette with different colors for each language\n", "palette = sns.color_palette(\"hsv\", len(df['language'].unique()))\n", "\n", "# Plotting a language-wise frequency distribution for the number of samples in each language\n", "plt.figure(figsize=(7, 5))\n", "plt.title('Language Counts')\n", "ax = sns.countplot(y=df['language'], data=df, palette=palette)\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 579 }, "id": "lBQ2FBA8BOiT", "outputId": "abc01118-fe8b-4ea4-a108-f2f89b232875" }, "execution_count": 16, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ ":10: FutureWarning: \n", "\n", "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.\n", "\n", " ax = sns.countplot(y=df['language'], data=df, palette=palette)\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "import re\n", "def remove_english(text):\n", " \"\"\"\n", " function that takes text as input and returns text without english words\n", " \"\"\"\n", " pat = \"[a-zA-Z]+\"\n", " text = re.sub(pat, \"\", text)\n", " return text" ], "metadata": { "id": "45aWka3aBXZe" }, "execution_count": 17, "outputs": [] }, { "cell_type": "code", "source": [ "#Removing english words from chinese texts\n", "df_Chinese = df[df['language']=='Chinese'] # Chinese data in dataset\n", "\n", "clean_text = df.loc[df.language=='Chinese']['clean_text']\n", "clean_text = clean_text.apply(remove_english) # removing english words\n", "df_Chinese.loc[:,'clean_text'] = clean_text\n", "\n", "# removing old chinese text and appending new cleaned chinese text\n", "df.drop(df[df['language']=='Chinese'].index, inplace=True, axis=0)\n", "df = df.append(df_Chinese)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4fiKFPygB8EY", "outputId": "0626982f-cd28-428a-d89a-bb4f2f054023" }, "execution_count": 18, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ ":5: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " df_Chinese.loc[:,'clean_text'] = clean_text\n", ":9: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", " df = df.append(df_Chinese)\n" ] } ] }, { "cell_type": "code", "source": [ "# shuffling dataframe and resetting index\n", "df = df.sample(frac=1).reset_index(drop=True)" ], "metadata": { "id": "GBBGjcIQCGFv" }, "execution_count": 19, "outputs": [] }, { "cell_type": "markdown", "source": [ "###Feature Vectorizing" ], "metadata": { "id": "HSO-Zh7PL1p5" } }, { "cell_type": "code", "source": [ "from sklearn.feature_extraction.text import CountVectorizer\n", "#Input Variable\n", "# vectorizing input varible 'clean_text' into a matrix\n", "features = df['clean_text']\n", "\n", "cv = CountVectorizer() # ngram_range=(1,2)\n", "features = cv.fit_transform(features)\n", "\n", "# changing the datatype of the number into uint8 to consume less memory\n", "features = features.astype('uint8') # uint8 and float32" ], "metadata": { "id": "WKFKd7o9Ck9K" }, "execution_count": 20, "outputs": [] }, { "cell_type": "code", "source": [ "# defining target variable\n", "targets = df['language_encoded']" ], "metadata": { "id": "jzc4Z0x2DAhJ" }, "execution_count": 21, "outputs": [] }, { "cell_type": "markdown", "source": [ "###Data Splitting" ], "metadata": { "id": "5taxSYqzKkcz" } }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "# splitting data into training and testing datasets\n", "X_train, X_val, y_train, y_val = train_test_split(features, targets, test_size=0.2, random_state=2007)" ], "metadata": { "id": "xBgeKOT7DCvP" }, "execution_count": 22, "outputs": [] }, { "cell_type": "markdown", "source": [ "##Machine Learning" ], "metadata": { "id": "JeP6F0odl2Mk" } }, { "cell_type": "markdown", "source": [ "####Testing a Machine Learning Algorithm on this data" ], "metadata": { "id": "qbiKiFo6MDwH" } }, { "cell_type": "code", "source": [ "from sklearn.naive_bayes import MultinomialNB\n", "from sklearn.metrics import accuracy_score\n", "\n", "# Initialize and train the Naive Bayes classifier\n", "nb_classifier = MultinomialNB()\n", "nb_classifier.fit(X_train, y_train)\n", "\n", "# Make predictions on the validation set\n", "y_pred = nb_classifier.predict(X_val)\n", "\n", "# Evaluate the model\n", "accuracy = accuracy_score(y_val, y_pred)\n", "print(\"Validation Accuracy:\", accuracy)\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "vlpNuFClDRpR", "outputId": "53f5112b-f9d7-4689-87d5-4d6d96616b5e" }, "execution_count": 23, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Validation Accuracy: 0.9595150960658737\n" ] } ] }, { "cell_type": "markdown", "source": [ "Its giving very good accuracy overall!" ], "metadata": { "id": "3U8v0ResMOnN" } }, { "cell_type": "markdown", "source": [ "##Deep Learning" ], "metadata": { "id": "5BUq4hkZmez_" } }, { "cell_type": "code", "source": [ "#Converting tensors into arrays for training\n", "X_train = X_train.toarray()\n", "X_val = X_val.toarray()" ], "metadata": { "id": "IuctL4bPCKSV" }, "execution_count": 24, "outputs": [] }, { "cell_type": "code", "source": [ "print(X_train.shape, X_val.shape, y_train.shape, y_val.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GwdZkUJpCR8O", "outputId": "be59a569-afa6-495e-a841-72ad9f039b10" }, "execution_count": 25, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(17487, 277227) (4372, 277227) (17487,) (4372,)\n" ] } ] }, { "cell_type": "code", "source": [ "input_size = X_train.shape[1]\n", "input_size" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KUXH90VlCTdJ", "outputId": "819bc838-6599-4144-b4b5-c31e66835054" }, "execution_count": 26, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "277227" ] }, "metadata": {}, "execution_count": 26 } ] }, { "cell_type": "code", "source": [ "# outputsize hyperparatmeter\n", "\n", "output_size = len(df['language_encoded'].unique())\n", "num_classes = len(le.classes_)\n", "output_size, num_classes" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "vAvlEJ1nCU16", "outputId": "59b8947c-afd9-4dfa-9e95-7a93799373d7" }, "execution_count": 27, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(22, 22)" ] }, "metadata": {}, "execution_count": 27 } ] }, { "cell_type": "code", "source": [ "#Model Architecture having 4 layers having relu activation in the first 3 layers and softmax in the last layer to get probabilities for all the languages.\n", "import tensorflow as tf\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Embedding, Flatten, Dense\n", "\n", "\n", "model = Sequential([\n", " Dense(100, activation='relu', kernel_initializer='he_normal', input_shape=(input_size,)),\n", " Dense(80, activation='relu', kernel_initializer='he_normal'),\n", " Dense(50, activation='relu', kernel_initializer='he_normal'),\n", " Dense(output_size, activation='softmax')\n", "])\n" ], "metadata": { "id": "Q9oCGyv-myIc" }, "execution_count": 28, "outputs": [] }, { "cell_type": "code", "source": [ "#Learning rate scheduling\n", "def lr_scheduler(epoch, lr):\n", " if epoch < 3:\n", " return lr\n", " else:\n", " return lr * tf.math.exp(-0.1)" ], "metadata": { "id": "n_c2D7eNDB23" }, "execution_count": 29, "outputs": [] }, { "cell_type": "code", "source": [ "#Initializing early stoppin, optimizer and learning rate schedulerr\n", "from tensorflow.keras.callbacks import EarlyStopping, LearningRateScheduler\n", "\n", "early_stopping = EarlyStopping(monitor='val_loss', patience=4, restore_best_weights=True)\n", "lr_scheduler_callback = LearningRateScheduler(lr_scheduler)\n", "optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)" ], "metadata": { "id": "D9mQNhQEDChh" }, "execution_count": 30, "outputs": [] }, { "cell_type": "code", "source": [ "model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])" ], "metadata": { "id": "F_5FShAFBx2b" }, "execution_count": 31, "outputs": [] }, { "cell_type": "code", "source": [ "model.summary() #Checking model parameters and layers" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Tge5dPw_FyRN", "outputId": "360e1d2f-0b97-40cc-d86e-76e0df1b0900" }, "execution_count": 32, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " dense (Dense) (None, 100) 27722800 \n", " \n", " dense_1 (Dense) (None, 80) 8080 \n", " \n", " dense_2 (Dense) (None, 50) 4050 \n", " \n", " dense_3 (Dense) (None, 22) 1122 \n", " \n", "=================================================================\n", "Total params: 27736052 (105.80 MB)\n", "Trainable params: 27736052 (105.80 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ] }, { "cell_type": "code", "source": [ "from tensorflow.keras.utils import plot_model\n", "plot_model(model)" ], "metadata": { "id": "bD0KN5YbFzwN", "colab": { "base_uri": "https://localhost:8080/", "height": 466 }, "outputId": "2a10bd1b-defc-4c22-f51a-f66d281a9333" }, "execution_count": 36, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "execution_count": 36 } ] }, { "cell_type": "code", "source": [ "#Encoding the labels\n", "y_train_encoded = tf.keras.utils.to_categorical(y_train, num_classes=22)\n", "y_val_encoded = tf.keras.utils.to_categorical(y_val, num_classes=22)" ], "metadata": { "id": "p7R8zRG7EqlF" }, "execution_count": 33, "outputs": [] }, { "cell_type": "markdown", "source": [ "###Training" ], "metadata": { "id": "oNTRkl2qKuAF" } }, { "cell_type": "code", "source": [ "hist=model.fit(X_train, y_train_encoded, epochs=10, batch_size=32, validation_data=(X_val, y_val_encoded), callbacks=[early_stopping,lr_scheduler_callback])" ], "metadata": { "id": "T09B1AeSByhS", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "23517910-cff7-4a8c-d761-ea6f1c71bed8" }, "execution_count": 34, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/10\n", "547/547 [==============================] - 16s 23ms/step - loss: 0.3566 - accuracy: 0.9326 - val_loss: 0.0814 - val_accuracy: 0.9774 - lr: 0.0010\n", "Epoch 2/10\n", "547/547 [==============================] - 10s 18ms/step - loss: 0.0071 - accuracy: 0.9988 - val_loss: 0.0810 - val_accuracy: 0.9790 - lr: 0.0010\n", "Epoch 3/10\n", "547/547 [==============================] - 10s 17ms/step - loss: 9.0363e-04 - accuracy: 0.9999 - val_loss: 0.0883 - val_accuracy: 0.9748 - lr: 0.0010\n", "Epoch 4/10\n", "547/547 [==============================] - 9s 16ms/step - loss: 6.1621e-04 - accuracy: 0.9999 - val_loss: 0.1048 - val_accuracy: 0.9716 - lr: 9.0484e-04\n", "Epoch 5/10\n", "547/547 [==============================] - 9s 17ms/step - loss: 5.1501e-04 - accuracy: 0.9999 - val_loss: 0.0975 - val_accuracy: 0.9764 - lr: 8.1873e-04\n", "Epoch 6/10\n", "547/547 [==============================] - 10s 18ms/step - loss: 5.1643e-04 - accuracy: 0.9999 - val_loss: 0.1120 - val_accuracy: 0.9705 - lr: 7.4082e-04\n" ] } ] }, { "cell_type": "markdown", "source": [ "##Evaluation" ], "metadata": { "id": "0QwsQCK8KwYt" } }, { "cell_type": "code", "source": [ "loss, accuracy = model.evaluate(X_val, y_val_encoded)\n", "print(\"Validation Accuracy:\", accuracy)" ], "metadata": { "id": "is6FP7DtB1yY", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "dbac023d-9d19-4f0f-84ab-bbff637f9c9b" }, "execution_count": 35, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "137/137 [==============================] - 1s 7ms/step - loss: 0.0810 - accuracy: 0.9790\n", "Validation Accuracy: 0.9789569973945618\n" ] } ] }, { "cell_type": "code", "source": [ "plt.title('Learning Curve')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('Categorical Crossentropy')\n", "plt.plot(hist.history['loss'], label='train')\n", "plt.plot(hist.history['val_loss'], label='val')\n", "plt.legend()\n", "plt.show()" ], "metadata": { "id": "hhVxYLQJB1vX", "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "outputId": "5cf694c7-7ea5-47d3-df8c-c25c507790fc" }, "execution_count": 37, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABifUlEQVR4nO3deXhTZfo+8DtJm3Tf6A6VAi2rlkqBWqAgUimgKLgBMgNUfzgiIFpRYZRNGAuKTFUYUEbFdVgU+eqoZbDKaikItGwFSimUpXtp04Vuyfn9kSY0dCEpSU+S3p/rytXm5JyTJ3Gc3r7nOe8rEQRBABEREVEHIhW7ACIiIqL2xgBEREREHQ4DEBEREXU4DEBERETU4TAAERERUYfDAEREREQdDgMQERERdTgMQERERNThMAARERFRh8MARERWKTg4GDNmzBC7DCKyUgxARB3Ypk2bIJFI8Oeff4pditWprq7GP//5T0RGRsLd3R0ODg7o2bMn5syZg3PnzoldHhHdhp3YBRARtcXZs2chlYrz33BFRUUYM2YMjhw5gocffhhPP/00XFxccPbsWWzevBkff/wxamtrRamNiAzDAEREoquvr4darYZcLjf4GIVCYcaKWjdjxgwcO3YM3377LR5//HG915YvX4433njDJO/Tlu+FiAzDS2BEdFtXr17FM888Az8/PygUCvTr1w+ffvqp3j61tbVYvHgxIiIi4O7uDmdnZ0RHR+P333/X2+/ixYuQSCRYvXo1EhMT0aNHDygUCpw+fRpLly6FRCLB+fPnMWPGDHh4eMDd3R1xcXGoqqrSO8+tPUDay3kHDhxAfHw8fHx84OzsjIkTJ6KwsFDvWLVajaVLlyIwMBBOTk4YOXIkTp8+bVBfUWpqKn766Sc8++yzTcIPoAlmq1ev1j2///77cf/99zfZb8aMGQgODr7t93Ls2DHY2dlh2bJlTc5x9uxZSCQSrF27VrettLQUL730EoKCgqBQKBASEoJVq1ZBrVa3+rmIOhqOABFRq/Lz83HfffdBIpFgzpw58PHxwS+//IJnn30WSqUSL730EgBAqVTi3//+N6ZMmYKZM2eivLwcn3zyCWJjY3Ho0CGEh4frnfezzz5DdXU1nnvuOSgUCnh5eelee+qpp9CtWzckJCTg6NGj+Pe//w1fX1+sWrXqtvXOnTsXnp6eWLJkCS5evIjExETMmTMHW7Zs0e2zcOFCvPPOOxg/fjxiY2ORnp6O2NhYVFdX3/b8P/zwAwDgr3/9qwHfnvFu/V4CAgIwYsQIbN26FUuWLNHbd8uWLZDJZHjyyScBAFVVVRgxYgSuXr2Kv/3tb7jrrrvwxx9/YOHChcjNzUViYqJZaiaySgIRdVifffaZAEA4fPhwi/s8++yzQkBAgFBUVKS3ffLkyYK7u7tQVVUlCIIg1NfXCzU1NXr7XL9+XfDz8xOeeeYZ3bbs7GwBgODm5iYUFBTo7b9kyRIBgN7+giAIEydOFDp16qS3rWvXrsL06dObfJaYmBhBrVbrtr/88suCTCYTSktLBUEQhLy8PMHOzk6YMGGC3vmWLl0qANA7Z3MmTpwoABCuX7/e6n5aI0aMEEaMGNFk+/Tp04WuXbvqnrf2vXz00UcCAOHEiRN62/v27Ss88MADuufLly8XnJ2dhXPnzuntt2DBAkEmkwk5OTkG1UzUEfASGBG1SBAEfPfddxg/fjwEQUBRUZHuERsbi7KyMhw9ehQAIJPJdL0qarUaJSUlqK+vx8CBA3X7NPb444/Dx8en2fd9/vnn9Z5HR0ejuLgYSqXytjU/99xzkEgkeseqVCpcunQJAJCcnIz6+nq88MILesfNnTv3tucGoKvB1dXVoP2N1dz38thjj8HOzk5vFOvkyZM4ffo0Jk2apNu2bds2REdHw9PTU++fVUxMDFQqFfbu3WuWmomsES+BEVGLCgsLUVpaio8//hgff/xxs/sUFBTofv/888/x3nvv4cyZM6irq9Nt79atW5Pjmtumddddd+k99/T0BABcv34dbm5urdbc2rEAdEEoJCREbz8vLy/dvq3Rvn95eTk8PDxuu7+xmvtevL29MWrUKGzduhXLly8HoLn8ZWdnh8cee0y3X2ZmJo4fP95isGz8z4qoo2MAIqIWaRtn//KXv2D69OnN7hMWFgYA+OqrrzBjxgxMmDABr776Knx9fSGTyZCQkICsrKwmxzk6Orb4vjKZrNntgiDctuY7OdYQvXv3BgCcOHEC0dHRt91fIpE0+94qlarZ/Vv6XiZPnoy4uDikpaUhPDwcW7duxahRo+Dt7a3bR61W48EHH8Rrr73W7Dl69ux523qJOgoGICJqkY+PD1xdXaFSqRATE9Pqvt9++y26d++O7du3612CurVxV2xdu3YFAJw/f15vtKW4uFg3StSa8ePHIyEhAV999ZVBAcjT0xMXLlxosl07EmWoCRMm4G9/+5vuMti5c+ewcOFCvX169OiBioqK2/6zIiLeBk9ErZDJZHj88cfx3Xff4eTJk01eb3x7uXbkpfFoR2pqKlJSUsxfqBFGjRoFOzs7rF+/Xm9741vJWxMVFYUxY8bg3//+N3bs2NHk9draWsyfP1/3vEePHjhz5ozed5Weno4DBw4YVbeHhwdiY2OxdetWbN68GXK5HBMmTNDb56mnnkJKSgp27tzZ5PjS0lLU19cb9Z5EtowjQESETz/9FElJSU22z5s3DytXrsTvv/+OyMhIzJw5E3379kVJSQmOHj2KX3/9FSUlJQCAhx9+GNu3b8fEiRPx0EMPITs7Gxs2bEDfvn1RUVHR3h+pRX5+fpg3bx7ee+89PPLIIxgzZgzS09Pxyy+/wNvbW2/0qiVffPEFRo8ejcceewzjx4/HqFGj4OzsjMzMTGzevBm5ubm6uYCeeeYZrFmzBrGxsXj22WdRUFCADRs2oF+/fgY1dTc2adIk/OUvf8G//vUvxMbGNulBevXVV/HDDz/g4YcfxowZMxAREYHKykqcOHEC3377LS5evKh3yYyoI2MAIqImoyFaM2bMQJcuXXDo0CG89dZb2L59O/71r3+hU6dO6Nevn968PDNmzEBeXh4++ugj7Ny5E3379sVXX32Fbdu2Yffu3e30SQyzatUqODk5YePGjfj1118RFRWF//3vfxg2bBgcHBxue7yPjw/++OMP/Otf/8KWLVvwxhtvoLa2Fl27dsUjjzyCefPm6fbt06cPvvjiCyxevBjx8fHo27cvvvzyS3zzzTdGfy+PPPIIHB0dUV5ernf3l5aTkxP27NmDt99+G9u2bcMXX3wBNzc39OzZE8uWLYO7u7tR70dkyySCqToDiYisWGlpKTw9PbFixQqTLWVBRJaLPUBE1OHcuHGjyTbtLMnNLVtBRLaHl8CIqMPZsmULNm3ahHHjxsHFxQX79+/Hf/7zH4wePRpDhw4VuzwiagcMQETU4YSFhcHOzg7vvPMOlEqlrjF6xYoVYpdGRO2EPUBERETU4bAHiIiIiDocBiAiIiLqcNgD1Ay1Wo1r167B1dXVoEnRiIiISHyCIKC8vByBgYGQSlsf42EAasa1a9cQFBQkdhlERETUBpcvX0aXLl1a3YcBqBmurq4ANF+gm5ubyNUQERGRIZRKJYKCgnR/x1vDANQM7WUvNzc3BiAiIiIrY0j7CpugiYiIqMNhACIiIqIOhwGIiIiIOhz2ABEREbUjtVqN2tpascuwSvb29pDJZCY5FwMQERFRO6mtrUV2djbUarXYpVgtDw8P+Pv73/E8fQxARERE7UAQBOTm5kImkyEoKOi2E/WRPkEQUFVVhYKCAgBAQEDAHZ2PAYiIiKgd1NfXo6qqCoGBgXBychK7HKvk6OgIACgoKICvr+8dXQ5j/CQiImoHKpUKACCXy0WuxLppw2NdXd0dnYcBiIiIqB1xjck7Y6rvjwGIiIiIOhwGICIiImoXwcHBSExMFLsMAGyCJiIiolbcf//9CA8PN0lwOXz4MJydne+8KBNgAGpHgiDgUnEV5HZSBHo4il0OERHRHRMEASqVCnZ2t48UPj4+7VCRYXgJrB2t+CkD96/ejc9TLopdChER0W3NmDEDe/bswfvvvw+JRAKJRIJNmzZBIpHgl19+QUREBBQKBfbv34+srCw8+uij8PPzg4uLCwYNGoRff/1V73y3XgKTSCT497//jYkTJ8LJyQmhoaH44Ycf2uWzMQC1o7Au7gCAfeeKRK6EiIjEJggCqmrrRXkIgmBQje+//z6ioqIwc+ZM5ObmIjc3F0FBQQCABQsWYOXKlcjIyEBYWBgqKiowbtw4JCcn49ixYxgzZgzGjx+PnJycVt9j2bJleOqpp3D8+HGMGzcOU6dORUlJyR1/v7fDS2DtaGiINwDgdK4SheU18HFViFwRERGJ5UadCn0X7xTlvU+/FQsn+e0jgLu7O+RyOZycnODv7w8AOHPmDADgrbfewoMPPqjb18vLC/3799c9X758Ob7//nv88MMPmDNnTovvMWPGDEyZMgUA8Pbbb+ODDz7AoUOHMGbMmDZ9NkNZxAjQunXrEBwcDAcHB0RGRuLQoUMt7rt9+3YMHDgQHh4ecHZ2Rnh4OL788ku9fWbMmKEbqtM+zP1FGsLbRYF+gW4AgAPnOQpERETWa+DAgXrPKyoqMH/+fPTp0wceHh5wcXFBRkbGbUeAwsLCdL87OzvDzc1Nt9yFOYk+ArRlyxbEx8djw4YNiIyMRGJiImJjY3H27Fn4+vo22d/LywtvvPEGevfuDblcjv/+97+Ii4uDr68vYmNjdfuNGTMGn332me65QmEZoy3RoT44dU2JvZmFmHBvZ7HLISIikTjay3D6rdjb72im975Tt97NNX/+fOzatQurV69GSEgIHB0d8cQTT6C2trbV89jb2+s9l0gk7bJYrOgBaM2aNZg5cybi4uIAABs2bMBPP/2ETz/9FAsWLGiy//3336/3fN68efj888+xf/9+vQCkUCh0w3WWZHioNzbsycK+zCIIgsAZQYmIOiiJRGLQZSixyeVy3TIerTlw4ABmzJiBiRMnAtCMCF28eNHM1bWdqJfAamtrceTIEcTExOi2SaVSxMTEICUl5bbHC4KA5ORknD17FsOHD9d7bffu3fD19UWvXr0wa9YsFBcXt3iempoaKJVKvYe5RAR7wsFeisLyGpzNLzfb+xAREZlCcHAwUlNTcfHiRRQVFbU4OhMaGort27cjLS0N6enpePrpp9tlJKetRA1ARUVFUKlU8PPz09vu5+eHvLy8Fo8rKyuDi4sL5HI5HnroIXz44Yd6jVhjxozBF198geTkZKxatQp79uzB2LFjW0ywCQkJcHd31z20He7moLCT4b7unQDwbjAiIrJ88+fPh0wmQ9++feHj49NiT8+aNWvg6emJIUOGYPz48YiNjcWAAQPauVrDSQRD74Uzg2vXrqFz5874448/EBUVpdv+2muvYc+ePUhNTW32OLVajQsXLqCiogLJyclYvnw5duzY0eTymNaFCxfQo0cP/Prrrxg1alST12tqalBTU6N7rlQqERQUhLKyMri5ud3Zh2zGJ/uzsfy/pxEd6o0vn400+fmJiMjyVFdXIzs7G926dYODg4PY5Vit1r5HpVIJd3d3g/5+i3rx0dvbGzKZDPn5+Xrb8/PzW+3fkUqlCAkJAQCEh4cjIyMDCQkJLQag7t27w9vbG+fPn282ACkUinZtkh4eqrkd/lB2CarrVHAwQTMaERERGU7US2ByuRwRERFITk7WbVOr1UhOTtYbEbodtVqtN4JzqytXrqC4uBgBAQF3VK+phPi6wN/NATX1ahy+aP7JnoiIiEif6PMAxcfHY+PGjfj888+RkZGBWbNmobKyUndX2LRp07Bw4ULd/gkJCdi1axcuXLiAjIwMvPfee/jyyy/xl7/8BYCm6/zVV1/FwYMHcfHiRSQnJ+PRRx9FSEiI3l1iYpJIJIhuGAXal8k+ICIiovYm+v13kyZNQmFhIRYvXoy8vDyEh4cjKSlJ1xidk5MDqfRmTqusrMQLL7yAK1euwNHREb1798ZXX32FSZMmAQBkMhmOHz+Ozz//HKWlpQgMDMTo0aOxfPlyi5kLCACie/pg25Er2HuuEH8f10fscoiIiDoUUZugLZUxTVRtVVJZi4gVuyAIwKG/j4KvGxviiIhsGZugTcNUTdCiXwLrqLyc5bg7ULM46n4ui0FERNSuGIBExD4gIiIicTAAiSg61AeAJgCp1bwSSURE1F4YgEQ0oKsHnOQyFFXU4Ewel8UgIiJqLwxAItJbFiOzUORqiIiITC84OBiJiYlil9EEA5DI2AdERETU/hiARKbtAzp0sQQ3aptfrJWIiIhMiwFIZD18nBHo7oDaejUOcVkMIiKyIB9//DECAwOhVqv1tj/66KN45plnkJWVhUcffRR+fn5wcXHBoEGD8Ouvv4pUrXEYgESmWRaj4W6wc+wDIiLqMAQBqK0U52HgHMhPPvkkiouL8fvvv+u2lZSUICkpCVOnTkVFRQXGjRuH5ORkHDt2DGPGjMH48eORk5Njrm/NZERfCoOA6J7e2PLnZfYBERF1JHVVwNuB4rz3368Bcufb7ubp6YmxY8fim2++wahRowAA3377Lby9vTFy5EhIpVL0799ft//y5cvx/fff44cffsCcOXPMVr4pcATIAgzt4Q2JBDibX458ZbXY5RAREelMnToV3333HWpqagAAX3/9NSZPngypVIqKigrMnz8fffr0gYeHB1xcXJCRkcERIDKMp7McYZ3dkX6lDPsyi/BERBexSyIiInOzd9KMxIj13gYaP348BEHATz/9hEGDBmHfvn345z//CQCYP38+du3ahdWrVyMkJASOjo544oknUFtba67KTYYByEJEh/o0BKBCBiAioo5AIjHoMpTYHBwc8Nhjj+Hrr7/G+fPn0atXLwwYMAAAcODAAcyYMQMTJ04EAFRUVODixYsiVms4XgKzENr5gPZzWQwiIrIwU6dOxU8//YRPP/0UU6dO1W0PDQ3F9u3bkZaWhvT0dDz99NNN7hizVAxAFuLeuzzhLJehuLIWp3OVYpdDRESk88ADD8DLywtnz57F008/rdu+Zs0aeHp6YsiQIRg/fjxiY2N1o0OWjpfALITcToqoHp3wa0YB9mYW4u7O7mKXREREBACQSqW4dq1pv1JwcDB+++03vW2zZ8/We26pl8Q4AmRBbs4HxNvhiYiIzIkByIJo+4D+vFSCqtp6kashIiKyXQxAFqSbtzM6eziiTiUg9QKXxSAiIjIXBiALIpFIMLynZhRobyaXxSAiIjIXBiALo+sD4rIYREQ2STBwHS5qnqm+PwYgCzOkRydIJcD5ggpcK70hdjlERGQiMpkMAKxilmRLVlVVBQCwt7e/o/PwNngL4+EkR1gXD6RdLsX+zCI8NShI7JKIiMgE7Ozs4OTkhMLCQtjb20Mq5RiEMQRBQFVVFQoKCuDh4aELlG3FAGSBhod6I+1yKfZmFjIAERHZCIlEgoCAAGRnZ+PSpUtil2O1PDw84O/vf8fnYQCyQNE9ffDBb+ex/3wRVGoBMqlE7JKIiMgE5HI5QkNDeRmsjezt7e945EeLAcgChQd5wEVhh9KqOpy6VoawLh5il0RERCYilUrh4OAgdhkdHi9AWiB7mWZZDIB3gxEREZkDA5CFGt4wK/Tec5wPiIiIyNQYgCyUdj6goznXUVHDZTGIiIhMiQHIQnXt5IQgL+2yGMVil0NERGRTGIAslEQi4azQREREZsIAZMF0fUBcF4yIiMikGIAsWFQPb0glwIXCSly5XiV2OURERDaDAciCuTvaIzzIAwCwn5fBiIiITIYByMKxD4iIiMj0GIAs3PCemj4g7bIYREREdOcsIgCtW7cOwcHBcHBwQGRkJA4dOtTivtu3b8fAgQPh4eEBZ2dnhIeH48svv9TbRxAELF68GAEBAXB0dERMTAwyMzPN/THMon8XD7gq7FB2ow4nrpaJXQ4REZFNED0AbdmyBfHx8ViyZAmOHj2K/v37IzY2FgUFBc3u7+XlhTfeeAMpKSk4fvw44uLiEBcXh507d+r2eeedd/DBBx9gw4YNSE1NhbOzM2JjY1FdXd1eH8tk7GRSDAlpWBaDs0ITERGZhEQQBFGvq0RGRmLQoEFYu3YtAECtViMoKAhz587FggULDDrHgAED8NBDD2H58uUQBAGBgYF45ZVXMH/+fABAWVkZ/Pz8sGnTJkyePPm251MqlXB3d0dZWRnc3Nza/uFM5KuDl/DmjpMYHOyFrc9HiV0OERGRRTLm77eoI0C1tbU4cuQIYmJidNukUiliYmKQkpJy2+MFQUBycjLOnj2L4cOHAwCys7ORl5end053d3dERka2eM6amhoolUq9hyUZ3mhZjPLqOpGrISIisn6iBqCioiKoVCr4+fnpbffz80NeXl6Lx5WVlcHFxQVyuRwPPfQQPvzwQzz44IMAoDvOmHMmJCTA3d1d9wgKCrqTj2Vyd3VyQtdOTqhXCzh4oUTscoiIiKye6D1AbeHq6oq0tDQcPnwY//jHPxAfH4/du3e3+XwLFy5EWVmZ7nH58mXTFWsi0Q2zQu/jrNBERER3zE7MN/f29oZMJkN+fr7e9vz8fPj7+7d4nFQqRUhICAAgPDwcGRkZSEhIwP333687Lj8/HwEBAXrnDA8Pb/Z8CoUCCoXiDj+NeUWH+uCrgzmcD4iIiMgERB0BksvliIiIQHJysm6bWq1GcnIyoqIMb/ZVq9WoqakBAHTr1g3+/v5651QqlUhNTTXqnJYmqkcnyKQSZBdV4nIJl8UgIiK6E6KOAAFAfHw8pk+fjoEDB2Lw4MFITExEZWUl4uLiAADTpk1D586dkZCQAEDTrzNw4ED06NEDNTU1+Pnnn/Hll19i/fr1ADSrqL/00ktYsWIFQkND0a1bNyxatAiBgYGYMGGCWB/zjrk52OPeIA/8eek69mUW4enIu8QuiYiIyGqJHoAmTZqEwsJCLF68GHl5eQgPD0dSUpKuiTknJwdS6c2BqsrKSrzwwgu4cuUKHB0d0bt3b3z11VeYNGmSbp/XXnsNlZWVeO6551BaWophw4YhKSkJDg4O7f75TCk61KchABUyABEREd0B0ecBskSWNg+Q1tGc63jsX3/AzcEORxc9CDuZVfawExERmYXVzANExgnr7A43Bzsoq+txnMtiEBERtRkDkBWxk0kxNKThdvhzvBuMiIiorRiArEx0w6zQnA+IiIio7RiArIx2QsRjl0uh5LIYREREbcIAZGWCvJzQ3dsZKrWAlKxiscshIiKySgxAVojLYhAREd0ZBiArdLMPiI3QREREbcEAZIXu69EJdlIJLhVX4VJxpdjlEBERWR0GICvkorDDgK6eADgKRERE1BYMQFZqOPuAiIiI2owByEpp+4D+OF+MepVa5GqIiIisCwOQlbq7szs8nOxRXlOP9CulYpdDRERkVRiArJRMKtEti7GXy2IQEREZhQHIirEPiIiIqG0YgKzYsIY+oLTLpSi7wWUxiIiIDMUAZMU6eziih48z1AKQksXLYERERIZiALJy2rvB9nI+ICIiIoMxAFm54T21jdCFEARB5GqIiIisAwOQlYvs1gn2MgmuXL+BS8VVYpdDRERkFRiArJyzwg4RumUxeDcYERGRIRiAbAD7gIiIiIxjdAC6cOGCOeqgOzC8IQClZBWjjstiEBER3ZbRASgkJAQjR47EV199herqanPUREbqF+gGTyd7VNTUI+1yqdjlEBERWTyjA9DRo0cRFhaG+Ph4+Pv7429/+xsOHTpkjtrIQFKpRDcp4r5z7AMiIiK6HaMDUHh4ON5//31cu3YNn376KXJzczFs2DDcfffdWLNmDQoL+QdYDNENy2KwD4iIiOj22twEbWdnh8ceewzbtm3DqlWrcP78ecyfPx9BQUGYNm0acnNzTVkn3YY2AB2/UorSqlqRqyEiIrJsbQ5Af/75J1544QUEBARgzZo1mD9/PrKysrBr1y5cu3YNjz76qCnrpNsIcHdEqK8L1ALwR1ax2OUQERFZNDtjD1izZg0+++wznD17FuPGjcMXX3yBcePGQSrVZKlu3bph06ZNCA4ONnWtdBvRoT7ILKjAvsxCjLsnQOxyiIiILJbRI0Dr16/H008/jUuXLmHHjh14+OGHdeFHy9fXF5988onJiiTDROuWxSjishhEREStMHoEKDMz87b7yOVyTJ8+vU0FUdtFdvOCXCbF1dIbyC6qRHcfF7FLIiIiskhGByAAuH79Oj755BNkZGQAAPr06YNnnnkGXl5eJi2OjOMkt8PAYE/8kVWMfZlFDEBEREQtMPoS2N69exEcHIwPPvgA169fx/Xr1/Hhhx+iW7du2Lt3rzlqJCNol8XgumBEREQtMzoAzZ49G5MmTUJ2dja2b9+O7du348KFC5g8eTJmz55tjhrJCNrb4VOyilFbz2UxiIiImmN0ADp//jxeeeUVyGQy3TaZTIb4+HicP3/epMWR8foGuKGTsxyVtSocy7kudjlEREQWyegANGDAAF3vT2MZGRno37+/SYqittMsi6EZBdrHWaGJiIiaZXQT9Isvvoh58+bh/PnzuO+++wAABw8exLp167By5UocP35ct29YWJjpKiWDRYf64P/SrmFfZiHmx/YSuxwiIiKLY/QI0JQpU3D58mW89tprGD58OIYPH47XXnsNly5dwpQpU3DvvfciPDwc9957r8HnXLduHYKDg+Hg4IDIyMhWF1fduHEjoqOj4enpCU9PT8TExDTZf8aMGZBIJHqPMWPGGPtRrZZuWYyrZbheyWUxiIiIbmX0CFB2drZJC9iyZQvi4+OxYcMGREZGIjExEbGxsTh79ix8fX2b7L97925MmTIFQ4YMgYODA1atWoXRo0fj1KlT6Ny5s26/MWPG4LPPPtM9VygUJq3bkvm5OaCXnyvO5pfjQFYRHg4LFLskIiIiiyIRRJ4yODIyEoMGDcLatWsBAGq1GkFBQZg7dy4WLFhw2+NVKhU8PT2xdu1aTJs2DYBmBKi0tBQ7duxoU01KpRLu7u4oKyuDm5tbm84hthX/PY1/78/GpIFBWPUEL0USEZHtM+bvd5sWQ83KysLcuXMRExODmJgYvPjii8jKyjL6PLW1tThy5AhiYmJuFiSVIiYmBikpKQado6qqCnV1dU0mYdy9ezd8fX3Rq1cvzJo1C8XFHWuB0OieN+cD4rIYRERE+owOQDt37kTfvn1x6NAhhIWFISwsDKmpqejXrx927dpl1LmKioqgUqng5+ent93Pzw95eXkGneP1119HYGCgXogaM2YMvvjiCyQnJ2PVqlXYs2cPxo4dC5VK1ew5ampqoFQq9R7WbnCwF+R2Ulwrq0ZWYaXY5RAREVkUo3uAFixYgJdffhkrV65ssv3111/Hgw8+aLLibmflypXYvHkzdu/eDQcHB932yZMn636/5557EBYWhh49emD37t0YNWpUk/MkJCRg2bJl7VJze3GUyzA42Av7zxdhX2YhQny5LAYREZGW0SNAGRkZePbZZ5tsf+aZZ3D69GmjzuXt7Q2ZTIb8/Hy97fn5+fD392/12NWrV2PlypX43//+d9vb7bt37w5vb+8WJ2pcuHAhysrKdI/Lly8b9TksVTTnAyIiImqW0QHIx8cHaWlpTbanpaU1e9dWa+RyOSIiIpCcnKzbplarkZycjKioqBaPe+edd7B8+XIkJSVh4MCBt32fK1euoLi4GAEBAc2+rlAo4ObmpvewBdp1wVKyilFT3/zlPyIioo7I6EtgM2fOxHPPPYcLFy5gyJAhAIADBw5g1apViI+PN7qA+Ph4TJ8+HQMHDsTgwYORmJiIyspKxMXFAQCmTZuGzp07IyEhAQCwatUqLF68GN988w2Cg4N1vUIuLi5wcXFBRUUFli1bhscffxz+/v7IysrCa6+9hpCQEMTGxhpdnzXr7e8KbxcFiipqcPRSKaJ6dBK7JCIiIotgdABatGgRXF1d8d5772HhwoUAgMDAQCxduhQvvvii0QVMmjQJhYWFWLx4MfLy8hAeHo6kpCRdY3ROTg6k0psDVevXr0dtbS2eeOIJvfMsWbIES5cuhUwmw/Hjx/H555+jtLQUgYGBGD16NJYvX96h5gICNMtiRId64/tjV7Evs5ABiIiIqIFR8wDV19fjm2++QWxsLPz8/FBeXg4AcHV1NVuBYrCFeYC0th+9gvit6binszt+nDtM7HKIiIjMxmzzANnZ2eH5559HdXU1AE3wsbXwY2uGhWgaoU9eK0NxRY3I1RAREVkGo5ugBw8ejGPHjpmjFjIDXzcH9PZ3hSAAB7I61mSQRERELTG6B+iFF17AK6+8gitXriAiIgLOzs56r3MFeMszvKcPzuSVY9+5QjzSn+uCERERGb0WWOOGZN1JJBIIggCJRNLibMvWxJZ6gADNchh//eQQ/N0ckLLwAUgkErFLIiIiMjlj/n6Lvho8md+gYC8o7KTIU1bjfEEFQv3Yt0VERB2b0T1Aly5dQufOndG1a1e9R+fOnXHp0iVz1Eh3yMFehsHdNIvF7uWs0ERERMYHoJEjR6KkpKTJ9rKyMowcOdIkRZHpDQ+9uTo8ERFRR2d0ANL2+tyquLi4SUM0WY7onprb4Q9e4LIYREREBvcAPfbYYwA0Dc8zZszQm1VZpVLh+PHjuqUxyPL08nOFj6sCheU1OHLxOoY0zA9ERETUERkcgNzd3QFoRoBcXV3h6Oioe00ul+O+++7DzJkzTV8hmYREolkWY/vRq9ibWcQAREREHZrBAeizzz4DAAQHB2P+/Pm83GWFhof6YPtRzbpgC8b2FrscIiIi0RjdA7RkyRKGHys1tGHU59Q1JYq4LAYREXVgRgeg/Px8/PWvf0VgYCDs7Owgk8n0HmS5fFwV6BugmRjqwHneDk9ERB2X0RMhzpgxAzk5OVi0aBECAgI4q7CVie7pjdO5Suw9V4RHwzuLXQ4REZEojA5A+/fvx759+xAeHm6Gcsjchof64KM9F7Avs7DFKQ2IiIhsndGXwIKCgmDk8mFkQSK6esLBXoqC8hqcy68QuxwiIiJRGB2AEhMTsWDBAly8eNEM5ZC5OdjLENmtEwDOCk1ERB2X0ZfAJk2ahKqqKvTo0QNOTk6wt7fXe725ZTLIskSHemPPuULszSzC/4vuLnY5RERE7c7oAJSYmGiGMqg9De/pA/yUgdQLxaiuU8HBnnfvERFRx2J0AJo+fbo56qB2FOrrAj83BfKVNfjz4nUMC+Ws0ERE1LEY3QMEAFlZWXjzzTcxZcoUFBQUAAB++eUXnDp1yqTFkXlolsXg6vBERNRxGR2A9uzZg3vuuQepqanYvn07Kio0dxKlp6djyZIlJi+QzCO6YdRnbyYnRCQioo7H6AC0YMECrFixArt27YJcLtdtf+CBB3Dw4EGTFkfmM6xhWYyMXCUKyqtFroaIiKh9GR2ATpw4gYkTJzbZ7uvri6IijiZYi04uCtzdmctiEBFRx2R0APLw8EBubm6T7ceOHUPnzlxawZro+oDOMQAREVHHYnQAmjx5Ml5//XXk5eVBIpFArVbjwIEDmD9/PqZNm2aOGslMGvcBcXZvIiLqSIwOQG+//TZ69+6NoKAgVFRUoG/fvhg+fDiGDBmCN9980xw1kplEdPWEo70MRRU1OJNXLnY5RERE7cboeYDkcjk2btyIxYsX48SJE6ioqMC9996L0NBQc9RHZqSwk+G+7l74/Wwh9mUWok+Am9glERERtYs2zQMEaBZFHTduHB5//HFUVlbi+vXrpqyL2snN+YDYB0RERB2H0QHopZdewieffAIAUKlUGDFiBAYMGICgoCDs3r3b1PWRmQ3vqekDSs0uQXWdSuRqiIiI2ofRAejbb79F//79AQA//vgjLly4gDNnzuDll1/GG2+8YfICybx6+LggwN0BtfVqHMrmQrZERNQxGB2AioqK4O/vDwD4+eef8dRTT6Fnz5545plncOLECZMXSOalWRZDMwrEZTGIiKijMDoA+fn54fTp01CpVEhKSsKDDz4IAKiqqoJMxlXFrRH7gIiIqKMx+i6wuLg4PPXUUwgICIBEIkFMTAwAIDU1Fb179zZ5gWR+Q0O8IZEAZ/LKUaCshq+bg9glERERmZXRAWjp0qW4++67cfnyZTz55JNQKBQAAJlMhgULFpi8QDI/L2c57unsjuNXyrAvswiPR3QRuyQiIiKzMjoAAcATTzyh97y0tBTTp083SUEkjuhQ74YAVMgARERENs/oHqBVq1Zhy5YtuudPPfUUOnXqhC5duuD48eNtKmLdunUIDg6Gg4MDIiMjcejQoRb33bhxI6Kjo+Hp6QlPT0/ExMQ02V8QBCxevBgBAQFwdHRETEwMMjMz21RbR6HtA9p/vghqNZfFICIi22Z0ANqwYQOCgoIAALt27cKuXbvwyy+/YMyYMZg/f77RBWzZsgXx8fFYsmQJjh49iv79+yM2NhYFBQXN7r97925MmTIFv//+O1JSUhAUFITRo0fj6tWrun3eeecdfPDBB9iwYQNSU1Ph7OyM2NhYVFdXG11fRzHgLk84yWUoqqhFRp5S7HKIiIjMSiIYuQqmo6Mjzp07h6CgIMybNw/V1dX46KOPcO7cOURGRho9I3RkZCQGDRqEtWvXAgDUajWCgoIwd+5cg3qKVCoVPD09sXbtWkybNg2CICAwMBCvvPKKLpCVlZXBz88PmzZtwuTJk297TqVSCXd3d5SVlcHNreMsD/HspsNIPlOABWN74/kRPcQuh4iIyCjG/P02egTI09MTly9fBgAkJSXp7gITBAEqlXEzCdfW1uLIkSO6cwCAVCpFTEwMUlJSDDpHVVUV6urq4OXlBQDIzs5GXl6e3jnd3d0RGRlp8Dk7Ks4HREREHYXRTdCPPfYYnn76aYSGhqK4uBhjx44FABw7dgwhISFGnauoqAgqlQp+fn562/38/HDmzBmDzvH6668jMDBQF3jy8vJ057j1nNrXblVTU4Oamhrdc6WyY14Ciu6p6QM6nH0dN2pVcJRzXiciIrJNRo8A/fOf/8ScOXPQt29f7Nq1Cy4uLgCA3NxcvPDCCyYvsDUrV67E5s2b8f3338PBoe1z1yQkJMDd3V330PY4dTTdvZ3R2cMRtSo1UrOLxS6HiIjIbIweAbK3t2+22fnll182+s29vb0hk8mQn5+vtz0/P1+33EZLVq9ejZUrV+LXX39FWFiYbrv2uPz8fAQEBOidMzw8vNlzLVy4EPHx8brnSqWyQ4Yg7bIYmw9fxr7MItzfy1fskoiIiMzC6BEgAMjKysLcuXMRExODmJgYvPjii7hw4YLR55HL5YiIiEBycrJum1qtRnJyMqKiolo87p133sHy5cuRlJSEgQMH6r3WrVs3+Pv7651TqVQiNTW1xXMqFAq4ubnpPTqqm8tisA+IiIhsl9EBaOfOnejbty8OHTqEsLAwhIWFITU1VXdJzFjx8fHYuHEjPv/8c2RkZGDWrFmorKxEXFwcAGDatGlYuHChbv9Vq1Zh0aJF+PTTTxEcHIy8vDzk5eWhoqICgGYU46WXXsKKFSvwww8/4MSJE5g2bRoCAwMxYcIEo+vraIaGdIJEApzLr0BeGacNICIi22T0JbAFCxbg5ZdfxsqVK5tsf/3113WLoxpq0qRJKCwsxOLFi5GXl4fw8HAkJSXpmphzcnIgld7MaevXr0dtbW2T2aiXLFmCpUuXAgBee+01VFZW4rnnnkNpaSmGDRuGpKSkO+oT6ig8nOQI6+KB9Mul2JdZiCcHdrxLgUREZPuMngfIwcEBJ06cQGhoqN72c+fOISwszCYmG+yo8wBpvfe/s/jwt/N4pH8gPphyr9jlEBERGcSs8wD5+PggLS2tyfa0tDT4+rJp1hZwWQwiIrJ1Rl8CmzlzJp577jlcuHABQ4YMAQAcOHAAq1at0ruTiqzXvXd5wFkuQ0llLU7nKnF3Z3exSyIiIjIpowPQokWL4Orqivfee0/XnBwYGIilS5fixRdfNHmB1P7sZVJE9fDGrxn52JtZyABEREQ2x6hLYPX19fjyyy/x9NNP48qVKygrK0NZWRmuXLmCefPmQSKRmKtOamfDezYsi3GuSORKiIiITM+oAGRnZ4fnn39e1+js6uoKV1dXsxRG4tL2Af15qQRVtfUiV0NERGRaRjdBDx48GMeOHTNHLWRBgjs5oYunI+pUAlIvlIhdDhERkUkZ3QP0wgsv4JVXXsGVK1cQEREBZ2dnvdcbL0tB1kuzLIYP/nMoB3szCzGyN+/wIyIi22F0AJo8eTIA6DU8SyQSCIIAiUQClUpluupIVMNDvfGfQznYl8k+ICIisi1GB6Ds7Gxz1EEWaEgPb0glwPmCClwrvYFAD0exSyIiIjIJowNQ165dzVEHWSB3J3v0D/LAsZxS7M8swlODuCwGERHZBoOboI8cOYKRI0dCqVQ2ea2srAwjR45Eenq6SYsj8WnvBtvL1eGJiMiGGByA3nvvPTzwwAPNrq3h7u6OBx98EO+++65JiyPxDQ/VzAe0/3wRVFwWg4iIbITBASg1NRWPPvpoi6+PHz8ef/zxh0mKIsvRP8gDrgo7lFbV4dS1MrHLISIiMgmDA9DVq1dbnfTQxcUFubm5JimKLIdmWYxOAMC7wYiIyGYYHIB8fHxw9uzZFl8/c+YMvL29TVIUWZbong19QOfYB0RERLbB4AAUExODf/zjH82+JggC/vGPfyAmJsZkhZHl0PYBHc25jooaLotBRETWz+AA9Oabb+LEiROIjIzE1q1bkZ6ejvT0dGzZsgWRkZE4efIk3njjDXPWSiLp2skZd3k5NSyLUSx2OURERHfM4ADUo0cP/Prrr6isrMTkyZMxYMAADBgwAFOmTEFVVRV27dqFkJAQc9ZKIopuGAViHxAREdkCoyZCHDhwIE6ePIm0tDRkZmZCEAT07NkT4eHhZiqPLEV0qA++Ts3hfEBERGQTjJ4JGgDCw8MZejqYqB6dIJNKcKGwEleuV6GLp5PYJREREbWZwZfAqGNzd7RHeJAHAGA/L4MREZGVYwAig7EPiIiIbAUDEBlMuy4Yl8UgIiJrxwBEBuvfxR2uDnYou1GHE1e5LAYREVkvg5qgjx8/bvAJw8LC2lwMWTY7mRRDe3gj6VQe9p0r1PUEERERWRuDAlB4eDgkEgkEofnLHtrXJBIJVCqVSQskyxLdsyEAZRZh7qhQscshIiJqE4MCUHZ2trnrICsxvKEP6GjOdZRX18HVwV7kioiIiIxnUADq2rWruesgKxHk5YTgTk64WFyFgxdK8GBfP7FLIiIiMlqbJkIEgNOnTyMnJwe1tbV62x955JE7LoosW3SoDy4WX8K+zEIGICIiskpGB6ALFy5g4sSJOHHihF5fkEQiAQD2AHUA0aHe+PLgJc4HREREVsvo2+DnzZuHbt26oaCgAE5OTjh16hT27t2LgQMHYvfu3WYokSyNdlmM7KJKXC6pErscIiIioxkdgFJSUvDWW2/B29sbUqkUUqkUw4YNQ0JCAl588UVz1EgWxtXBHgPu8gDAWaGJiMg6GR2AVCoVXF1dAQDe3t64du0aAE2j9NmzZ01bHVks7azQ+7g6PBERWSGjA9Ddd9+N9PR0AEBkZCTeeecdHDhwAG+99Ra6d+9u8gLJMmnXBTtwvgj1KrXI1RARERnH6AD05ptvQq3W/MF76623kJ2djejoaPz888/44IMPTF4gWaawLh5wc7CDsroex7ksBhERWRmj7wKLjY3V/R4SEoIzZ86gpKQEnp6eujvByPbJpBIMC/XGzyfysO9cEQbc5Sl2SURERAYzegSorKwMJSUletu8vLxw/fp1KJVKkxVGlo99QEREZK2MDkCTJ0/G5s2bm2zfunUrJk+ebHQB69atQ3BwMBwcHBAZGYlDhw61uO+pU6fw+OOPIzg4GBKJBImJiU32Wbp0KSQSid6jd+/eRtdFtzcsRNMHdOxyKZTVdSJXQ0REZDijA1BqaipGjhzZZPv999+P1NRUo861ZcsWxMfHY8mSJTh69Cj69++P2NhYFBQUNLt/VVUVunfvjpUrV8Lf37/F8/br1w+5ubm6x/79+42qiwwT5OWE7t7OUKkFpGQVi10OERGRwYwOQDU1Naivr2+yva6uDjdu3DDqXGvWrMHMmTMRFxeHvn37YsOGDXBycsKnn37a7P6DBg3Cu+++i8mTJ0OhULR4Xjs7O/j7++se3t7eRtVFhtPeDcbLYEREZE2MDkCDBw/Gxx9/3GT7hg0bEBERYfB5amtrceTIEcTExNwsRipFTEwMUlJSjC1LT2ZmJgIDA9G9e3dMnToVOTk5re5fU1MDpVKp9yDD3OwD4oSIRERkPYy+C2zFihWIiYlBeno6Ro0aBQBITk7G4cOH8b///c/g8xQVFUGlUsHPT38xTT8/P5w5c8bYsnQiIyOxadMm9OrVC7m5uVi2bBmio6Nx8uRJ3QSOt0pISMCyZcva/J4d2X09OsFOKsGl4ipcKq5E107OYpdERER0W0aPAA0dOhQpKSkICgrC1q1b8eOPPyIkJATHjx9HdHS0OWo0ytixY/Hkk08iLCwMsbGx+Pnnn1FaWoqtW7e2eMzChQtRVlame1y+fLkdK7ZuLgo7DOiquQWeo0BERGQtjB4BAoDw8HB8/fXXd/TG3t7ekMlkyM/P19uen5/faoOzsTw8PNCzZ0+cP3++xX0UCkWrPUXUuuGh3jiUXYJ9mYX4y31dxS6HiIjotgwaAWrcE3Nrr0xbe2fkcjkiIiKQnJys26ZWq5GcnIyoqCgjPkLrKioqkJWVhYCAAJOdk/Rp+4D+OF/MZTGIiMgqGDQC5OnpidzcXPj6+sLDw6PZGZ8FQYBEIoFKpTL4zePj4zF9+nQMHDgQgwcPRmJiIiorKxEXFwcAmDZtGjp37oyEhAQAmsbp06dP636/evUq0tLS4OLigpCQEADA/PnzMX78eHTt2hXXrl3DkiVLIJPJMGXKFIPrIuPc3dkdHk72KK2qQ/qVUkR09RK7JCIiolYZFIB+++03eHlp/qj9/vvvJnvzSZMmobCwEIsXL0ZeXh7Cw8ORlJSka4zOycmBVHpzkOratWu49957dc9Xr16N1atXY8SIEdi9ezcA4MqVK5gyZQqKi4vh4+ODYcOG4eDBg/Dx8TFZ3aRPJpVgaIg3fjqei73nihiAiIjI4kkEQRAM3bm+vh5vv/02nnnmGXTp0sWcdYlKqVTC3d0dZWVlcHNzE7scq7DlcA5e/+4EBtzlge0vDBW7HCIi6oCM+ftt1F1gdnZ2ePfdd5udCJE6tmENfUBpl0tRdoPLYhARkWUz+jb4Bx54AHv27DFHLWTFOns4ooePM9QCkJLF2+GJiMiyGX0b/NixY7FgwQKcOHECERERcHbWn/jukUceMVlxZF2iQ32QVViJvZlFGHM377ojIiLLZVQPEAC9puQmJzPyLjBLxR6gtvntTD6e2fQnung6Yt9rI5u9W5CIiMhczNYDBGjm6mnpYQvhh9ouslsn2MskuHL9Bi4VV4ldDhERUYuMDkBELXFW2CFCtywGV4cnIiLL1aYAtGfPHowfPx4hISEICQnBI488gn379pm6NrJC2lmh93JdMCIismBGB6CvvvoKMTExcHJywosvvogXX3wRjo6OGDVqFL755htz1EhWZHhDAErJKkYdl8UgIiILZXQTdJ8+ffDcc8/h5Zdf1tu+Zs0abNy4ERkZGSYtUAxsgm47tVpAxIpduF5Vh23PR2FQMGeFJiKi9mHWJugLFy5g/PjxTbY/8sgjyM7ONvZ0ZGOkUoluUsR959gHRERElsnoABQUFKS3grvWr7/+iqCgIJMURdYtOtQbAPuAiIjIchk9EeIrr7yCF198EWlpaRgyZAgA4MCBA9i0aRPef/99kxdI1kcbgI5fKUVpVS08nOQiV0RERKTP6AA0a9Ys+Pv747333sPWrVsBaPqCtmzZgkcffdTkBZL1CXB3RKivCzILKvBHVjHG3cNZoYmIyLIYHYAAYOLEiZg4caKpayEbEh3qg8yCCuzLLGQAIiIii8OJEMksons29AGdK4KRNxoSERGZndEjQJ6ens2u8SSRSODg4ICQkBDMmDEDcXFxJimQrFNkNy/IZVJcLb2B7KJKdPdxEbskIiIiHaNHgBYvXgypVIqHHnoIy5Ytw7Jly/DQQw9BKpVi9uzZ6NmzJ2bNmoWNGzeao16yEk5yOwwM1i6LwbvBiIjIshg9ArR//36sWLECzz//vN72jz76CP/73//w3XffISwsDB988AFmzpxpskLJ+kSH+uCPrGLsyyzE9CHBYpdDRESkY/QI0M6dOxETE9Nk+6hRo7Bz504AwLhx43DhwoU7r46smvZ2+JSsYtTWc1kMIiKyHEYHIC8vL/z4449Ntv/444/w8tIse1BZWQlXV9c7r46sWt8AN3RylqOyVoVjOdfFLoeIiEjH6EtgixYtwqxZs/D7779j8ODBAIDDhw/j559/xoYNGwAAu3btwogRI0xbKVkdzbIY3vi/tGvYl1mEyO6dxC6JiIgIQBsWQwU0Mz+vXbsWZ8+eBQD06tULc+fO1c0Mbe24GKrpfHvkCuZvS0f/Lu74vznDxC6HiIhsmDF/v9s0EeLQoUMxdOjQNhVHHYtuWYyrZbheWQtPZy6LQURE4mvTRIhZWVl488038fTTT6OgoAAA8Msvv+DUqVMmLY6sn5+bA3r5uUIQgANZvB2eiIgsg9EBaM+ePbjnnnuQmpqK7777DhUVFQCA9PR0LFmyxOQFkvXTjgLtO8cARERElsHoALRgwQKsWLECu3btglx+83LGAw88gIMHD5q0OLINw3v6AAD2ZRZyWQwiIrIIRgegEydONLsQqq+vL4qK+F/41NTgbl6Q20lxrawaWYWVYpdDRERkfADy8PBAbm5uk+3Hjh1D586dTVIU2RYHexkiu2nmiNqXWShyNUREJJraSiA3HTjxLZAvbt+w0XeBTZ48Ga+//jq2bdsGiUQCtVqNAwcOYP78+Zg2bZo5aiQbEB3qjX2ZRdiXWYS4od3ELoeIiMxFrQLKLgNF54HiTKD4PFDU8FN59eZ+I14H/PqJVqbRAejtt9/G7NmzERQUBJVKhb59+0KlUuHpp5/Gm2++aY4ayQZEh/oAOIOUrGLU1KugsJOJXRIREd2JG9cbQk5D0NGGnOIsQFXT8nFOnYBOoYCrf/vV2gyjA5BcLsfGjRuxePFinDhxAhUVFbj33nsRGhpqjvrIRvT2d4W3iwJFFTU4eqkUUT04KzQRkcVT1QEl2U1DTlEmUNVK369MDnj1ALxDgE4hmsDjHar53cmr/epvhdEB6K233sL8+fMRFBSEoKAg3fYbN27g3XffxeLFi01aINkGiUSC4aHe2H7sKvZlFjIAERFZCkEAKgsbws0tIef6RUBQtXysa2DzIcfjLkBq2SP9Ri+FIZPJkJubC19fX73txcXF8PX1hUrVyhdlJbgUhnl8f+wKXt6Sjns6u+PHuVwWg4ioXdXd0FyeKs682Z9TlKnZVlPW8nH2zkCnHg3hplHI6RQCKFzar34DmHUpDEEQIJFImmxPT0/XrQZP1JyhIZoJEU9eK0NxRQ06uShEroiIyMao1ZpG48Yhp/i85veyywBaGvOQaEZtdCGn0YiOawDQzN99a2dwAPL09IREIoFEIkHPnj31QpBKpUJFRQWef/55sxRJtsHX1QF9AtyQkavEgaxiPNI/UOySiCyXIABlV4CC05pHdRng6KVpIHXS/uwEOHoCDh6AtE0rG5G1qlY2Cjnn9X+vv9HycQ4ezYccz26AvUO7lW8JDA5AiYmJEAQBzzzzDJYtWwZ3d3fda3K5HMHBwYiKijJLkWQ7hod6IyNXiX3nChmAiLQqi28GnYLTQP5poCADqC037HiJtCEcNQSjxr/rhaVG2xiaLJ+qHii91Og28kajOhX5LR8ntQe8ujUNOZ1CNP/8bXA0py0MDkDTp08HAHTr1g1DhgyBvb29SQpYt24d3n33XeTl5aF///748MMPMXjw4Gb3PXXqFBYvXowjR47g0qVL+Oc//4mXXnrpjs5J7Ss61Acf7b2AfZlFLV5OJbJZNRVA4Vmg4JQm4GjDTmVB8/tL7QDvnoBvX8DZW3PbcVUxUFVy82dtOSCoNXfktHZXzq0kUs3o0a3BqNnAxNBkNoKg+WfZXMgpyQbUdS0f6+LXfMjx6ArIjO5w6XCM/oZGjBih+726uhq1tbV6rxvTNLxlyxbEx8djw4YNiIyMRGJiImJjY3H27NkmTdYAUFVVhe7du+PJJ5/Eyy+/bJJzUvsaGOwJhZ0UecpqnC+oQKifq9glEZmeqk7zx0w3qtMQdq5fbPkYz2BN0PHtC/j20UwQ59UDsJO3fAwA1NcCN0r0g5Hec+3v2u0lQI2yITQ1bDeUNjQ1F5huDUva3x3cLf5uoHZRXwOUXGgacooygerSlo+zc9SEGr2Q00OzzcG95ePotoy+C6yqqgqvvfYatm7diuLipv/iGHMXWGRkJAYNGoS1a9cCANRqNYKCgjB37lwsWLCg1WODg4Px0ksvNRkBupNzavEuMPOa9ukh7D1XiEUP98WzwzgrNFkxtRooy2m4ZNUo7BRltvxf7i5+moCjCzt9AZ9e7Xs3TX1to9GkxoGpGKhqbntDaGoTyc2RpsaX5ZoLTNptjh7WGZoEASjPbT7klF3WhM5mSQD3oJshp3HgcevMUTcjmPUusFdffRW///471q9fj7/+9a9Yt24drl69io8++ggrV640+Dy1tbU4cuQIFi5cqNsmlUoRExODlJQUY8u6o3PW1NSgpubmrJVKZVv/RSdDDA/1xt5zhdiXWcgARNZBO0+Krj9H+zgD1LWwwK/CrSHo9NEf2XH2bt/am2MnB1z9NA9DNQ5Nt444VZXcEqK0I01lAATNazdKAIMHmySaENRc71JLl+jaMzTVVDQ0Hje6bKWdAbm2ouXjFO63zJmjDTw9AHvH9qmddIwOQD/++CO++OIL3H///YiLi0N0dDRCQkLQtWtXfP3115g6dapB5ykqKoJKpYKfn/6/gH5+fjhz5oyxZd3RORMSErBs2bI2vScZT7MsRgYOXuCyGGSBqpVA4RnNQo3aS1cFp1u+VCSTA969AL+++mHHvYttNZu2JTSp6vRHmvQuxzW3vXFouq55FJ838M0ahSa90SXPFoJUwx10LYUmtQoozdFfx0o7qlN+rZUyZJrLmdp+nMZz5zj72Nb/Jqyc0QGopKQE3bt3B6Dp9ykpKQEADBs2DLNmzTJtde1k4cKFiI+P1z1XKpV6s1yTafX0c4GvqwIF5TU4cvE6hoRYwH8RU8dTXwMUndOEHF3YydBc0mqWBPDqfrM/Rxt2vHqw4bQlMnvAxVfzMJReaDKkp6lYM0VA49BkMImmj6bxpTipnWYkp+RC6+tZOfvcnAywccjxDNZ8brJ4Rv9b2717d2RnZ+Ouu+5C7969sXXrVgwePBg//vgjPDw8DD6Pt7c3ZDIZ8vP1b+XLz8+Hv3/bFkhr6zkVCgUUCk7K114kEgmiQ33w3dEr2JtZxABE5qVWaZqPtf052rBTfL7lKf5dA29evtKGHe9egNypXUvvkNoUmupb6WkqaSZINQpN1aWaR0lWM7UobjYc682C3EMzekRWzegAFBcXh/T0dIwYMQILFizA+PHjsXbtWtTV1WHNmjUGn0culyMiIgLJycmYMGECAE3DcnJyMubMmWNsWWY7J5nH8J7e+O7oFezLLMSCsb3FLodsgSAA5XmNbjFvCDuFZ1ueGM7BHfDtpx92fHpbzGKNZCCZHeDio3kYqnFoajzCpKq9OYeOexfrbMYmgxgdgBrffh4TE4MzZ87gyJEjCAkJQVhYmFHnio+Px/Tp0zFw4EAMHjwYiYmJqKysRFxcHABg2rRp6Ny5MxISEgBompxPnz6t+/3q1atIS0uDi4sLQkJCDDonWQbtshinrilRVFEDby6LQca4UdoQcm4JOy3dTmznoLnTyrfRpSu/vjY7xT8ZoC2hiWzKHV+47tq1K7p27dqmYydNmoTCwkIsXrwYeXl5CA8PR1JSkq6JOScnB9JGt/9du3YN9957r+756tWrsXr1aowYMQK7d+826JxkGbxdFOgX6IZT15Q4cL4Ij4Z3FrskskR1NxomDrwl7CivNr+/RKq5XOHbRz/seHXjf8kTkR6D5wH67bffMGfOHBw8eLDJvfVlZWUYMmQINmzYgOjoaLMU2p44D1D7WPnLGWzYk4XHB3TBe0/1F7scEpOqXtN0qps0sCHslFxoee4Uty6N7rzS9un07HDrGRHRTWaZBygxMREzZ85s9oTu7u7429/+hjVr1thEAKL2MTzUGxv2ZGFfZiGXxegoBEEzepN/Wj/sFJ5r+Y4bR09NwNELO705Cy4R3RGDA1B6ejpWrVrV4uujR4/G6tWrTVIUdQwRwZ5wsJeioLwG5/Ir0Mufy2LYlKqSWyYObLh8VVPW/P72TpoGZG1/jjbsuPiyT4eITM7gAJSfn9/qAqh2dnYoLCw0SVHUMSjsZLiveyfsPquZFZoByErVVmomDizI0A87FXnN7y+109xh07gZ2bcP4BHMKf+JqN0YHIA6d+6MkydP6u62utXx48cREBBgssKoY4gO9cHus4XYm1mE/xfdXexySBA0gUbv1uAW1obSzq1SngughVZCj7ua3nnVKQSw411/RCQugwPQuHHjsGjRIowZMwYODvpNhjdu3MCSJUvw8MMPm7xAsm3DQzW3w6deKEZ1nQoO9rxTx2QEQbMuUePA0mSCuEYrhOvmQWll9tuWOPvoNyP79WtY4JOjekRkmQy+Cyw/Px8DBgyATCbDnDlz0KtXLwDAmTNnsG7dOqhUKhw9etQmbjfnXWDtRxAERCX8hjxlNb56NhLDQjkrdLMEAagpvyWwNLMkwK2z3qpq2/Z+MkXTxSdvXUdJu6K3exDnUiEii2CWu8D8/Pzwxx9/YNasWVi4cCG0uUkikSA2Nhbr1q2zifBD7UuzLIY3th3RzArdIQKQIAA1Sv3LS82NzOiN2JQA6rq2vZ+dQ6MAc2uIaby90TZ7JzYeE5FNM2oixK5du+Lnn3/G9evXcf78eQiCgNDQUHh6ck0Uarvonj7YdkSzLthCsYsxliBo1hTSW93agJEZdX3b3s/OsZWRmUbbG2/j+lVERE20aSZoT09PDBo0yNS1UAc1LMQbEgmQkatEQXk1fF1FmshOrdbcot3S4onNjczcuN72MGPvpH8pSS/EdNLMf9N4m6MXwwwRkYnc8VIYZIRracCVww2XFiSaaft1v9/6s6XX0MbjGn6a/LiGY1t9Da0e5yWRYLh/PU7nluPPkxkYd0/nW84JI9+v4ZgaZdPLSHojM7dsv3G95dXBb0fu0vylpNa22Tu27b2IiOiOMQC1p6xkIPktsauwSJ8DgAOAnQ0PMcldASfPWwJLKw3Bjl5cfoGIyMowALWnTqFAn/GavhFA81NQAxAatjX3U33LNug/b+34Jq/hNudu6fhbjzP0eEPOrdkmCALUajUkEkDa0pwybaFwa3opqaWGYO02zlFDRGTzGIDaU99HNA9qorZehXvf2oWqGhV+mReNPv6uRgWoZn/KXQA7uYifioiILBUDEFkE7bIYv50pwL7MQvQJcONt2EREZDZceIcsRnTDHED7MotEroSIiGwdAxBZjOhQzWzCqdklqK5r491YREREBmAAIovRw8cZge4OqK1X41B2idjlEBGRDWMAIouhWRZDMwq0L7NQ5GqIiMiWMQCRRYnuyT4gIiIyPwYgsihDe2iWxTiTV44CZbXY5RARkY1iACKL4uksR1hndwAcBSIiIvNhACKLwz4gIiIyNwYgsjiN5wNSq024LAYREVEDBiCyOPfe5QlnuQzFlbU4nasUuxwiIrJBDEBkceR2UkT16ASAfUBERGQeDEBkkdgHRERE5sQARBZJ2wf058XrqKqtF7kaIiKyNQxAZJG6eTujs4cjalVqpHJZDCIiMjEGILJIEokEw7WzQp9jHxAREZkWAxBZLPYBERGRuTAAkcUa0qMTpBIgs6ACuWU3xC6HiIhsCAMQWSwPJznCungA4O3wRERkWgxAZNGGh3J1eCIiMj0GILJo0T01fUD7Mwu5LAYREZkMAxBZtPAgD7go7HC9qg6nrnFZDCIiMg0GILJo9rKby2Ls5d1gRERkIhYRgNatW4fg4GA4ODggMjIShw4danX/bdu2oXfv3nBwcMA999yDn3/+We/1GTNmQCKR6D3GjBljzo9AZnSzD4gBiIiITEP0ALRlyxbEx8djyZIlOHr0KPr374/Y2FgUFBQ0u/8ff/yBKVOm4Nlnn8WxY8cwYcIETJgwASdPntTbb8yYMcjNzdU9/vOf/7THxyEz0M4HdOTSdVTWcFkMIiK6c6IHoDVr1mDmzJmIi4tD3759sWHDBjg5OeHTTz9tdv/3338fY8aMwauvvoo+ffpg+fLlGDBgANauXau3n0KhgL+/v+7h6enZHh+HzKBrJycEeTmiTiUgNbtY7HKIiMgGiBqAamtrceTIEcTExOi2SaVSxMTEICUlpdljUlJS9PYHgNjY2Cb77969G76+vujVqxdmzZqF4uKW/3DW1NRAqVTqPchySCQS3SjQXi6LQUREJiBqACoqKoJKpYKfn5/edj8/P+Tl5TV7TF5e3m33HzNmDL744gskJydj1apV2LNnD8aOHQuVStXsORMSEuDu7q57BAUF3eEnI1NjHxAREZmSndgFmMPkyZN1v99zzz0ICwtDjx49sHv3bowaNarJ/gsXLkR8fLzuuVKpZAiyMFE9vCGVAFmFlbhaegOdPRzFLomIiKyYqCNA3t7ekMlkyM/P19uen58Pf3//Zo/x9/c3an8A6N69O7y9vXH+/PlmX1coFHBzc9N7kGVxd7RHeJAHAM2kiERERHdC1AAkl8sRERGB5ORk3Ta1Wo3k5GRERUU1e0xUVJTe/gCwa9euFvcHgCtXrqC4uBgBAQGmKZxEoesD4rIYRER0h0S/Cyw+Ph4bN27E559/joyMDMyaNQuVlZWIi4sDAEybNg0LFy7U7T9v3jwkJSXhvffew5kzZ7B06VL8+eefmDNnDgCgoqICr776Kg4ePIiLFy8iOTkZjz76KEJCQhAbGyvKZyTTGN5T0wd04HwRVFwWg4iI7oDoPUCTJk1CYWEhFi9ejLy8PISHhyMpKUnX6JyTkwOp9GZOGzJkCL755hu8+eab+Pvf/47Q0FDs2LEDd999NwBAJpPh+PHj+Pzzz1FaWorAwECMHj0ay5cvh0KhEOUzkmn07+IBV4UdSqvqcPJqGfo3XBIjIiIylkQQBP6n9C2USiXc3d1RVlbGfiAL87cv/8TOU/mYP7on5jwQKnY5RERkQYz5+y36JTAiY7APiIiITIEBiKzK8IYAdPTSdVRwWQwiImojBiCyKnd1ckLXTk6oVws4mMVlMYiIqG0YgMjqRHNWaCIiukMMQGR1tH1A+9gHREREbcQARFYnqkcnyKQSXCiqxOWSKrHLISIiK8QARFbHzcEe92qXxTjPUSAiIjIeAxBZpZuXwdgHRERExmMAIqsU3bAsxv5MLotBRETGYwAiqxTW2R1uDnZQVtfj+JVSscshIiIrwwBEVslOJsXQEO3t8OwDIiIi4zAAkdViHxAREbUVAxBZLe2EiEdzSlFeXSdyNUREZE0YgMhqBXk5oZu3M1RqASlcFoOIiIzAAERW7eayGOwDIiIiwzEAkVVjHxAREbUFAxBZtfu6e8FOKsHF4irkFHNZDCIiMgwDEFk1Vwd7DLjLEwCw7zxHgYiIyDAMQGT1dH1A59gHREREhmEAIqsX3VPTB3Qgqwj1KrXI1RARkTVgACKrd09nd7g72qO8uh7pV8rELoeIiKwAAxBZPZlUgmG6ZTHYB0RERLfHAEQ2gfMBERGRMRiAyCYMawhAaZdLUXaDy2IQEVHrGIDIJnTxdEJ3Hy6LQUREhmEAIpsxnLNCExGRgRiAyGawD4iIiAzFAEQ2477unWAvkyCnpAqXiivFLoeIiCwYAxDZDGeFnW5ZjL0cBSIiolYwAJFNGd4wK/S+c+wDIiKiljEAkU3R9gGlZBWjjstiEBFRCxiAyKb0C3SHp5M9ymvqkX65VOxyiIjIQjEAkU2RSSUY2rAsxpbDl/HnxRKcyy9HvrIa1XUqCIIgcoVERGQJ7MQugMjUhof64L/Hc7HtyBVsO3JF7zW5TAo3R3u4O9o1/LSHm4Pmp7ujPdwc7fS26fZxtIerwg5SqUSkT0VERKbEAEQ25+H+ATiQVYSLRZUou1GHsht1UFbXQ6UWUKtSo6iiBkUVNUafVyIBXBV2cHe6JTQ52MPdSfu7Jlhpg1PjMCW344ArEZGlYAAim+Mkt8P7k+/V2yYIAiprVVA2BKKyG3X6v1fXQ9lk283fq+vUEARo9quuB3DD6Loc7KVNQpF2dMmtITw13tb4d2e5DBIJR5+IiEzFIgLQunXr8O677yIvLw/9+/fHhx9+iMGDB7e4/7Zt27Bo0SJcvHgRoaGhWLVqFcaNG6d7XRAELFmyBBs3bkRpaSmGDh2K9evXIzQ0tD0+DlkgiUQCF4UdXBR2CPRwNPr4mnoVlDfq9YJR48CkrK5HWZV+cFJW16Gsqg7lNfUQBKC6To3quhrkK40ffZJJJU0C0q2X8LSX7269hOfmYAc7GUefiIgaEz0AbdmyBfHx8diwYQMiIyORmJiI2NhYnD17Fr6+vk32/+OPPzBlyhQkJCTg4YcfxjfffIMJEybg6NGjuPvuuwEA77zzDj744AN8/vnn6NatGxYtWoTY2FicPn0aDg4O7f0RyQYo7GTwcZXBx1Vh9LFqtYDymvqbYamZESZtuNIPWJpjalVqqNQCrlfV4XpV21a6d1HY6S7PuTcTnhr3RN36uoO9lKNPRGRzJILIt8VERkZi0KBBWLt2LQBArVYjKCgIc+fOxYIFC5rsP2nSJFRWVuK///2vbtt9992H8PBwbNiwAYIgIDAwEK+88grmz58PACgrK4Ofnx82bdqEyZMn37YmpVIJd3d3lJWVwc3NzUSflMh4giCguk59S1hq/LO+mTDV8KiuR0VN/R3XoG0cb36EyQ4OdjIAmh6pxkFJIgEkkEC7SdJom/Z1zU/tFu3rN8+jfa7dublz3LoNt55DV5v25Zs1NX7/ls6rO0pby63HNDovWtin8fs2OmWTbRLJrc9vvrf2szSuu7FbI+qtmVXSaI/b5Vljjm1t31tfv12Nt+7R+rHt9/nJPFwVmv5JUzLm77eoI0C1tbU4cuQIFi5cqNsmlUoRExODlJSUZo9JSUlBfHy83rbY2Fjs2LEDAJCdnY28vDzExMToXnd3d0dkZCRSUlKaDUA1NTWoqbl5WUKpVN7JxyIyGYlEAke5DI5yGfzcjB+9rFepdf1NzfU2Nb6s13SE6s4bx4mIWvLC/T3w2pjeor2/qAGoqKgIKpUKfn5+etv9/Pxw5syZZo/Jy8trdv+8vDzd69ptLe1zq4SEBCxbtqxNn4HIktnJpPBylsPLWW70sdrG8SYN47c0jtfUqwEIEARAO54saJ/rzqXZBr1tAgQ0PubmNu0G7Xkan+PW86LxPrecQ7tv44FuoZXzas+hfe/mziE02oYm2xodc8tnbbS73udofN7Wvx/9z9BYa+P4tw7yC3qv3bJva+/R5Lwtv9rasUbV08q+txZk6Hvc+j5CM7VzBKh9iN2bKHoPkCVYuHCh3qiSUqlEUFCQiBURia9x43jnNjSOExFZMlHjl7e3N2QyGfLz8/W25+fnw9/fv9lj/P39W91f+9OYcyoUCri5uek9iIiIyHaJGoDkcjkiIiKQnJys26ZWq5GcnIyoqKhmj4mKitLbHwB27dql279bt27w9/fX20epVCI1NbXFcxIREVHHIvolsPj4eEyfPh0DBw7E4MGDkZiYiMrKSsTFxQEApk2bhs6dOyMhIQEAMG/ePIwYMQLvvfceHnroIWzevBl//vknPv74YwCaYfuXXnoJK1asQGhoqO42+MDAQEyYMEGsj0lEREQWRPQANGnSJBQWFmLx4sXIy8tDeHg4kpKSdE3MOTk5kEpvDlQNGTIE33zzDd588038/e9/R2hoKHbs2KGbAwgAXnvtNVRWVuK5555DaWkphg0bhqSkJM4BRERERAAsYB4gS8R5gIiIiKyPMX+/OT8+ERERdTgMQERERNThMAARERFRh8MARERERB0OAxARERF1OAxARERE1OEwABEREVGHwwBEREREHQ4DEBEREXU4oi+FYYm0k2MrlUqRKyEiIiJDaf9uG7LIBQNQM8rLywEAQUFBIldCRERExiovL4e7u3ur+3AtsGao1Wpcu3YNrq6ukEgkJj23UqlEUFAQLl++zHXGzIjfc/vg99w++D23D37P7cOc37MgCCgvL0dgYKDeQurN4QhQM6RSKbp06WLW93Bzc+O/YO2A33P74PfcPvg9tw9+z+3DXN/z7UZ+tNgETURERB0OAxARERF1OAxA7UyhUGDJkiVQKBRil2LT+D23D37P7YPfc/vg99w+LOV7ZhM0ERERdTgcASIiIqIOhwGIiIiIOhwGICIiIupwGICIiIiow2EAakfr1q1DcHAwHBwcEBkZiUOHDoldks3Zu3cvxo8fj8DAQEgkEuzYsUPskmxSQkICBg0aBFdXV/j6+mLChAk4e/as2GXZnPXr1yMsLEw3YVxUVBR++eUXscuyeStXroREIsFLL70kdik2ZenSpZBIJHqP3r17i1YPA1A72bJlC+Lj47FkyRIcPXoU/fv3R2xsLAoKCsQuzaZUVlaif//+WLdundil2LQ9e/Zg9uzZOHjwIHbt2oW6ujqMHj0alZWVYpdmU7p06YKVK1fiyJEj+PPPP/HAAw/g0UcfxalTp8QuzWYdPnwYH330EcLCwsQuxSb169cPubm5usf+/ftFq4W3wbeTyMhIDBo0CGvXrgWgWW8sKCgIc+fOxYIFC0SuzjZJJBJ8//33mDBhgtil2LzCwkL4+vpiz549GD58uNjl2DQvLy+8++67ePbZZ8UuxeZUVFRgwIAB+Ne//oUVK1YgPDwciYmJYpdlM5YuXYodO3YgLS1N7FIAcASoXdTW1uLIkSOIiYnRbZNKpYiJiUFKSoqIlRGZRllZGQDNH2cyD5VKhc2bN6OyshJRUVFil2OTZs+ejYceekjv/6vJtDIzMxEYGIju3btj6tSpyMnJEa0WLobaDoqKiqBSqeDn56e33c/PD2fOnBGpKiLTUKvVeOmllzB06FDcfffdYpdjc06cOIGoqChUV1fDxcUF33//Pfr27St2WTZn8+bNOHr0KA4fPix2KTYrMjISmzZtQq9evZCbm4tly5YhOjoaJ0+ehKura7vXwwBERHdk9uzZOHnypKjX8m1Zr169kJaWhrKyMnz77beYPn069uzZwxBkQpcvX8a8efOwa9cuODg4iF2OzRo7dqzu97CwMERGRqJr167YunWrKJd0GYDagbe3N2QyGfLz8/W25+fnw9/fX6SqiO7cnDlz8N///hd79+5Fly5dxC7HJsnlcoSEhAAAIiIicPjwYbz//vv46KOPRK7Mdhw5cgQFBQUYMGCAbptKpcLevXuxdu1a1NTUQCaTiVihbfLw8EDPnj1x/vx5Ud6fPUDtQC6XIyIiAsnJybptarUaycnJvJZPVkkQBMyZMwfff/89fvvtN3Tr1k3skjoMtVqNmpoascuwKaNGjcKJEyeQlpamewwcOBBTp05FWloaw4+ZVFRUICsrCwEBAaK8P0eA2kl8fDymT5+OgQMHYvDgwUhMTERlZSXi4uLELs2mVFRU6P3XRHZ2NtLS0uDl5YW77rpLxMpsy+zZs/HNN9/g//7v/+Dq6oq8vDwAgLu7OxwdHUWuznYsXLgQY8eOxV133YXy8nJ888032L17N3bu3Cl2aTbF1dW1Sf+as7MzOnXqxL42E5o/fz7Gjx+Prl274tq1a1iyZAlkMhmmTJkiSj0MQO1k0qRJKCwsxOLFi5GXl4fw8HAkJSU1aYymO/Pnn39i5MiRuufx8fEAgOnTp2PTpk0iVWV71q9fDwC4//779bZ/9tlnmDFjRvsXZKMKCgowbdo05Obmwt3dHWFhYdi5cycefPBBsUsjMtqVK1cwZcoUFBcXw8fHB8OGDcPBgwfh4+MjSj2cB4iIiIg6HPYAERERUYfDAEREREQdDgMQERERdTgMQERERNThMAARERFRh8MARERERB0OAxARERF1OAxAREQtkEgk2LFjh9hlEJEZMAARkUWaMWMGJBJJk8eYMWPELo2IbACXwiAiizVmzBh89tlnetsUCoVI1RCRLeEIEBFZLIVCAX9/f72Hp6cnAM3lqfXr12Ps2LFwdHRE9+7d8e233+odf+LECTzwwANwdHREp06d8Nxzz6GiokJvn08//RT9+vWDQqFAQEAA5syZo/d6UVERJk6cCCcnJ4SGhuKHH37QvXb9+nVMnToVPj4+cHR0RGhoaJPARkSWiQGIiKzWokWL8PjjjyM9PR1Tp07F5MmTkZGRAQCorKxEbGwsPD09cfjwYWzbtg2//vqrXsBZv349Zs+ejeeeew4nTpzADz/8gJCQEL33WLZsGZ566ikcP34c48aNw9SpU1FSUqJ7/9OnT+OXX35BRkYG1q9fD29v7/b7Aoio7QQiIgs0ffp0QSaTCc7OznqPf/zjH4IgCAIA4fnnn9c7JjIyUpg1a5YgCILw8ccfC56enkJFRYXu9Z9++kmQSqVCXl6eIAiCEBgYKLzxxhst1gBAePPNN3XPKyoqBADCL7/8IgiCIIwfP16Ii4szzQcmonbFHiAislgjR47E+vXr9bZ5eXnpfo+KitJ7LSoqCmlpaQCAjIwM9O/fH87OzrrXhw4dCrVajbNnz0IikeDatWsYNWpUqzWEhYXpfnd2doabmxsKCgoAALNmzcLjjz+Oo0ePYvTo0ZgwYQKGDBnSps9KRO2LAYiILJazs3OTS1Km4ujoaNB+9vb2es8lEgnUajUAYOzYsbh06RJ+/vln7Nq1C6NGjcLs2bOxevVqk9dLRKbFHiAisloHDx5s8rxPnz4AgD59+iA9PR2VlZW61w8cOACpVIpevXrB1dUVwcHBSE5OvqMafHx8MH36dHz11VdITEzExx9/fEfnI6L2wREgIrJYNTU1yMvL09tmZ2enazTetm0bBg4ciGHDhuHrr7/GoUOH8MknnwAApk6diiVLlmD69OlYunQpCgsLMXfuXPz1r3+Fn58fAGDp0qV4/vnn4evri7Fjx6K8vBwHDhzA3LlzDapv8eLFiIiIQL9+/VBTU4P//ve/ugBGRJaNAYiILFZSUhICAgL0tvXq1QtnzpwBoLlDa/PmzXjhhRcQEBCA//znP+jbty8AwMnJCTt37sS8efMwaNAgODk54fHHH8eaNWt055o+fTqqq6vxz3/+E/Pnz4e3tzeeeOIJg+uTy+VYuHAhLl68CEdHR0RHR2Pz5s0m+OREZG4SQRAEsYsgIjKWRCLB999/jwkTJohdChFZIfYAERERUYfDAEREREQdDnuAiMgq8eo9Ed0JjgARERFRh8MARERERB0OAxARERF1OAxARERE1OEwABEREVGHwwBEREREHQ4DEBEREXU4DEBERETU4TAAERERUYfz/wFQHff1Fs3YWgAAAABJRU5ErkJggg==\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "plt.title('Learning Curve')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('Accuracy')\n", "plt.plot(hist.history['accuracy'], label='train')\n", "plt.plot(hist.history['val_accuracy'], label='val')\n", "plt.legend()\n", "plt.show()" ], "metadata": { "id": "MIh8fOjcNWAg", "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "outputId": "4aa4e096-4725-4cc6-f4a7-d86356863ab1" }, "execution_count": 38, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [ "##Saving" ], "metadata": { "id": "kNyuIssDK36s" } }, { "cell_type": "code", "source": [ "model.save('language_identifcation_model.h5')" ], "metadata": { "id": "MxpbSlWnN1Cm", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "0e3cb1ab-305c-4821-bfd5-43b8aa5d882e" }, "execution_count": 39, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py:3103: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.\n", " saving_api.save_model(\n" ] } ] }, { "cell_type": "markdown", "source": [ "##Testing" ], "metadata": { "id": "O2WkRJfNK6kA" } }, { "cell_type": "code", "source": [ "# using the model for prediction\n", "import numpy as np\n", "sent = \"\"\"आप कितना सोचते हो\n", "अगर आप ठिठुरती रातों को गिनें\n", "अरे क्या आप मिल सकते हैं (अरे, क्या आप मिल सकते हैं?)\n", "क्या तुम मिलोगे (क्या तुम मिलोगे?)\n", "सर्दियों का अंत बताओ\n", "एक कोमल वसंत के दिन तक\n", "मैं चाहता हूं कि तुम तब तक रहो जब तक फूल खिल न जाएं\n", "ज्यों का त्यों\"\"\"\n", "\n", "\n", "def predict_language(text, model, cv, le):\n", " cleaned_text = clean_text(text) #Cleaning the text\n", " text_vectorized = cv.transform([cleaned_text]) #Converting tokens into vectors\n", " prediction = model.predict(text_vectorized) #Making predictions\n", " predicted_label = le.inverse_transform([np.argmax(prediction)])[0] #Get the first element of the list\n", " return predicted_label\n", "\n", "predict_language(sent, model, cv, le)" ], "metadata": { "id": "5c2aczzzN64J", "colab": { "base_uri": "https://localhost:8080/", "height": 55 }, "outputId": "ea8bc990-cf9e-4dd4-d7c1-bf13925d1930" }, "execution_count": 44, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1/1 [==============================] - 0s 315ms/step\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "'Hindi'" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" } }, "metadata": {}, "execution_count": 44 } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "RTC8BPTYJvgO" }, "execution_count": null, "outputs": [] } ] }