{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# FILE READER" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following code will read several books in .pdf format to later compute the frequency of the words by language." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "de10e45fb50044019eab08c096b3e7cb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=4), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "-----------------------------\n", " lang author book_title \\\n", "0 english shakespeare A Midsummer Night's Dream \n", "1 english shakespeare Hamlet \n", "2 english shakespeare Macbeth \n", "3 english shakespeare Othello \n", "4 english shakespeare Richard III \n", "5 english shakespeare Romeo and Juliet \n", "6 english shakespeare The Merchant of Venice \n", "7 french chevalier L'ale de sable \n", "8 french chevalier L'enfer et le paradis de l'autre monde \n", "9 french chevalier La capitaine \n", "10 french chevalier La fille des indiens rouges \n", "11 french chevalier La fille du pirate \n", "12 french chevalier Le chasseur noir \n", "13 french chevalier Les derniers Iroquois \n", "14 french de Maupassant Boule de Suif \n", "15 french de Maupassant Claire de Lune \n", "16 french de Maupassant Contes de la Becasse \n", "17 french de Maupassant Euvres completes de Guy de Maupassant \n", "18 french de Maupassant L'inutile beaut \n", "19 french de Maupassant La Main Gauche \n", "20 french de Maupassant La Maison Tellier \n", "21 french de Maupassant La petite roque \n", "22 french de Maupassant Le Horla \n", "23 french diderot Ceci n'est pas un conte \n", "24 french diderot Entretien d'un pare avec ses enfants \n", "25 french diderot L'oiseau blanc \n", "26 french diderot Les deux amis de Bourbonne \n", "27 french diderot Regrets sur ma vieille robe de chambre \n", "28 french sand cora \n", "29 french sand Jacques le fataliste et son maatre \n", ".. ... ... ... \n", "72 german shakespeare Romeo und Julia \n", "73 portuguese branco A Filha do Arcediago \n", "74 portuguese branco A Neta do Arcediago \n", "75 portuguese branco A Queda d'um Anjo \n", "76 portuguese branco Agulha em Palheiro \n", "77 portuguese branco Amor de Perdicao \n", "78 portuguese branco Amor de Salvacao \n", "79 portuguese branco Annos de Prosa \n", "80 portuguese branco Carlota Angela \n", "81 portuguese branco Estrellas Funestas \n", "82 portuguese branco Estrellas Propicias \n", "83 portuguese branco Lagrimas Abenaoadas \n", "84 portuguese branco Livro de Consolacao \n", "85 portuguese branco O Olho de Vidro \n", "86 portuguese branco O que fazem mulheres \n", "87 portuguese branco O Regicida \n", "88 portuguese branco Scenas Contemporaneas \n", "89 portuguese dinis A Morgadinha dos Cannaviaes \n", "90 portuguese dinis Os fidalgos da Casa Mourisca \n", "91 portuguese dinis Uma familia ingleza \n", "92 portuguese Queiros A Cidade e as Serras \n", "93 portuguese Queiros A correspondancia de Fradique Mendes \n", "94 portuguese Queiros A Illustre Casa de Ramires \n", "95 portuguese Queiros A Reliquia \n", "96 portuguese Queiros Cartas de Inglaterra \n", "97 portuguese Queiros O crime do padre Amaro \n", "98 portuguese Queiros O Mandarim \n", "99 portuguese Queiros O Primo Bazilio \n", "100 portuguese Queiros Os Maias \n", "101 portuguese shakespeare Hamlet \n", "\n", " process_time uniq_words total_words \n", "0 81.30 3226 16972 \n", "1 145.04 4794 29575 \n", "2 86.92 3552 17646 \n", "3 131.33 4032 27379 \n", "4 164.85 4705 34665 \n", "5 136.36 4325 28920 \n", "6 99.99 3529 21951 \n", "7 498.27 13420 77237 \n", "8 238.54 7549 44085 \n", "9 281.60 9421 49153 \n", "10 468.99 12677 72098 \n", "11 325.74 11148 52969 \n", "12 317.44 8860 55197 \n", "13 368.96 11370 59296 \n", "14 216.56 8322 39201 \n", "15 142.55 6434 28054 \n", "16 200.75 7948 37309 \n", "17 353.40 11747 57768 \n", "18 222.65 7967 41145 \n", "19 197.98 7431 37089 \n", "20 274.03 9308 47994 \n", "21 241.70 8027 44309 \n", "22 244.25 8129 44560 \n", "23 50.01 3111 11379 \n", "24 51.34 3027 11679 \n", "25 111.02 4992 23468 \n", "26 37.41 2545 8804 \n", "27 21.43 1636 5264 \n", "28 59.10 3742 13224 \n", "29 587.25 12076 95090 \n", ".. ... ... ... \n", "72 111.66 5365 23293 \n", "73 488.96 12740 78149 \n", "74 342.99 10690 58000 \n", "75 333.35 12274 52895 \n", "76 275.29 10048 46938 \n", "77 296.79 9580 51352 \n", "78 322.33 11600 52100 \n", "79 436.01 12960 67263 \n", "80 299.18 10465 50429 \n", "81 305.61 10431 51228 \n", "82 271.82 9644 47073 \n", "83 284.45 9699 49025 \n", "84 369.52 12429 58501 \n", "85 283.07 10423 48083 \n", "86 254.62 9819 43882 \n", "87 335.32 11662 55239 \n", "88 320.58 11097 53202 \n", "89 1200.59 19715 148738 \n", "90 1126.08 17492 144454 \n", "91 969.08 17612 121923 \n", "92 508.40 14453 71227 \n", "93 388.24 13465 56881 \n", "94 834.74 17577 107379 \n", "95 616.67 15747 84947 \n", "96 300.57 11205 48481 \n", "97 1129.89 18832 141629 \n", "98 116.44 6831 22486 \n", "99 900.40 17980 118417 \n", "100 1989.46 24453 215271 \n", "101 183.22 7206 34327 \n", "\n", "[102 rows x 6 columns]\n", "\n", "-----------------------------\n", " lang author book_title words freq\n", "0 english shakespeare A Midsummer Night's Dream the 579\n", "1 english shakespeare A Midsummer Night's Dream and 562\n", "2 english shakespeare A Midsummer Night's Dream i 443\n", "3 english shakespeare A Midsummer Night's Dream to 337\n", "4 english shakespeare A Midsummer Night's Dream you 273\n", "5 english shakespeare A Midsummer Night's Dream of 269\n", "6 english shakespeare A Midsummer Night's Dream a 264\n", "7 english shakespeare A Midsummer Night's Dream in 239\n", "8 english shakespeare A Midsummer Night's Dream my 204\n", "9 english shakespeare A Midsummer Night's Dream is 190\n", "10 english shakespeare A Midsummer Night's Dream that 184\n", "11 english shakespeare A Midsummer Night's Dream with 175\n", "12 english shakespeare A Midsummer Night's Dream me 174\n", "13 english shakespeare A Midsummer Night's Dream not 171\n", "14 english shakespeare A Midsummer Night's Dream this 162\n", "15 english shakespeare A Midsummer Night's Dream her 148\n", "16 english shakespeare A Midsummer Night's Dream for 143\n", "17 english shakespeare A Midsummer Night's Dream it 132\n", "18 english shakespeare A Midsummer Night's Dream your 128\n", "19 english shakespeare A Midsummer Night's Dream but 121\n", "20 english shakespeare A Midsummer Night's Dream thou 118\n", "21 english shakespeare A Midsummer Night's Dream as 115\n", "22 english shakespeare A Midsummer Night's Dream so 113\n", "23 english shakespeare A Midsummer Night's Dream will 111\n", "24 english shakespeare A Midsummer Night's Dream loue 105\n", "25 english shakespeare A Midsummer Night's Dream be 104\n", "26 english shakespeare A Midsummer Night's Dream haue 95\n", "27 english shakespeare A Midsummer Night's Dream his 93\n", "28 english shakespeare A Midsummer Night's Dream all 91\n", "29 english shakespeare A Midsummer Night's Dream no 85\n", "... ... ... ... ... ...\n", "825219 portuguese shakespeare Hamlet lançarmas 1\n", "825220 portuguese shakespeare Hamlet arrancarme 1\n", "825221 portuguese shakespeare Hamlet representem 1\n", "825222 portuguese shakespeare Hamlet esbofetearme 1\n", "825223 portuguese shakespeare Hamlet attentado 1\n", "825224 portuguese shakespeare Hamlet inacção 1\n", "825225 portuguese shakespeare Hamlet fico 1\n", "825226 portuguese shakespeare Hamlet confusa 1\n", "825227 portuguese shakespeare Hamlet tibia 1\n", "825228 portuguese shakespeare Hamlet ficavam 1\n", "825229 portuguese shakespeare Hamlet vilipendios 1\n", "825230 portuguese shakespeare Hamlet possiveis 1\n", "825231 portuguese shakespeare Hamlet inoffensivo 1\n", "825232 portuguese shakespeare Hamlet fel 1\n", "825233 portuguese shakespeare Hamlet trahese 1\n", "825234 portuguese shakespeare Hamlet espontanea 1\n", "825235 portuguese shakespeare Hamlet perturbaram 1\n", "825236 portuguese shakespeare Hamlet dramaticas 1\n", "825237 portuguese shakespeare Hamlet assistindo 1\n", "825238 portuguese shakespeare Hamlet eila 1\n", "825239 portuguese shakespeare Hamlet pausa 1\n", "825240 portuguese shakespeare Hamlet procuremos 1\n", "825241 portuguese shakespeare Hamlet imprecações 1\n", "825242 portuguese shakespeare Hamlet vãs 1\n", "825243 portuguese shakespeare Hamlet gastar 1\n", "825244 portuguese shakespeare Hamlet instigam 1\n", "825245 portuguese shakespeare Hamlet adulterio 1\n", "825246 portuguese shakespeare Hamlet impudico 1\n", "825247 portuguese shakespeare Hamlet abutres 1\n", "825248 portuguese shakespeare Hamlet hear 1\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[825249 rows x 5 columns]\n" ] } ], "source": [ "import os\n", "import pandas as pd\n", "import time\n", "from tqdm import tqdm_notebook as tqdm\n", "\n", "# specify the folder's directory where the book files are located\n", "book_dir = './Books'\n", "\n", "# create two empty Dataframes to later store the info computed from every book file\n", "count_result = pd.DataFrame(columns=['lang', 'author', 'book_title', 'words', 'freq'])\n", "stat_result = pd.DataFrame(columns=['lang', 'author', 'book_title', 'process_time',\n", " 'uniq_words','total_words'])\n", "\n", "time_start = time.time()\n", "time_accum = 0\n", "\n", "# iterate and read every file by language, author, and title\n", "for language in tqdm(os.listdir(book_dir)):\n", " for author in os.listdir(book_dir + '/' + language):\n", " for title in os.listdir(book_dir + '/' + language + '/' + author):\n", " \n", " # this is the resulting path...\n", " title_path = book_dir + '/' + language + '/' + author + '/' + title\n", " \n", " # now it will read on every file\n", " with open(title_path, 'r', encoding='utf8') as current_file:\n", " text = current_file.read()\n", " \n", " # the following lines clean the book's content for the further analysis\n", " text = text.replace('\\n', ' ').replace('\\r', ' ') \n", " text = text.lower() # turn every letter into lower case\n", " \n", " # remove the most common symbols, marks, and numbers\n", " skip_list = [',', '.', ':', ';', '¿', '?', '¡', '!', '#' '\"', \"'\", '-', '(', ')', '{', '}',\n", " '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']\n", " \n", " for ch in skip_list:\n", " text = text.replace(ch, '')\n", " \n", " # create a temporary dataframe for every book title to store and isolate the stats collected\n", " temp_df = pd.DataFrame(columns=['lang', 'author', 'book_title', 'words', 'freq'])\n", " \n", " # this loop will count the frequency for every unique word\n", " for word in list(filter(None, text.split(' '))):\n", " if word in temp_df['words'].values:\n", " temp_df.loc[temp_df.words == word, 'freq'] += 1\n", " else:\n", " temp_df.loc[len(temp_df)] = language, author, title.replace('.txt', ''), word, 1\n", " \n", " temp_df = temp_df.sort_values('freq', ascending=False) # sort the dataframe in descending order\n", " \n", " # collect the data from the current file before moving to the next one\n", " process_time = round(time.time() - time_accum - time_start, 2)\n", " time_accum += process_time\n", " stat_result.loc[len(stat_result)] = language, author, title.replace('.txt', ''), process_time, len(temp_df), sum(temp_df['freq'].values)\n", " \n", " # this will save and accumulate the info collected from the temporary dataframe into a different table\n", " count_result = pd.concat([count_result, temp_df], axis=0, ignore_index=True)\n", "\n", "# output the results as a .csv file\n", "stat_result.to_csv('stat_summary.csv', sep=',')\n", "count_result.to_csv('word_frequencies.csv', sep=',')\n", "\n", "print('\\n-----------------------------')\n", "print(stat_result)\n", "print('\\n-----------------------------')\n", "print(count_result)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### VISUALIZE THE RESULTS" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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AABArgkHgwqtbpaNRCRJg729Cq1uliT5GhvdLC2u4g7X4X2prafh6quvHgnEmzZtUnd3t9avXx/9mHBYu3fv1kknnaRFixapurpakrRgwQLt2bNHPp9Pfr9fCxculCSdfvrpI+9bV1cnn88nSZozZ45ef/11wjUAACg4B9esHQnWMTYS0cE1awnXOcdXPdwSEmfdIeXl5SN/ttbqnnvu0ZIlS8a85rnnntPJJ5888rykpESDg4Oy1soYE/d9470eAACg0AyGQimtu624e67rmqUy79i1Mm90PQOWLFmie++9VwMDA5KkV199VX19fQlff+6556q3t1dbtmyRJL399tuEaAAAUFRK/f6U1t1W3DvXsb5qh6eFJPLZz35We/bsUW1tray1Ouuss7Rhw4aErz/ppJP0+OOP64tf/KL6+/vl9Xr1k5/8JCO1AQAA5KKpK1eM6bmWJOPxaOrKFS5WlZiJTaXIR4FAwHZ1dY1Z27lzp2bPnu1SRcWJ3zkAAMikcDCog2vWajAUUqnfr6krV2S939oYs9VaG5jodcW9cw0AAICc52tszMnDi/EUd881AAAA4CDCNQAAAOAQwjUAAADgEMI1AAAA4BDCNQAAAOAQwjUAAADgkKIP1x09HapfX6+ah2tUv75eHT0drtbDDYwAAAD5q6jnXHf0dKhlc4siQ9Ebf0J9IbVsbpEkNcxsmNR733HHHXrkkUc0ffp0nXnmmTr//PP10Y9+VP/wD/+gN954Q6eccooeeOABnXvuubr55pv1rne9S9u3b1dtba1OO+00/f73v1coFNKrr76qu+++W7/85S/1zDPPaNq0aQoGgyorK1Nra6uCwaD6+/t10UUX6bvf/a6MMbriiit0wQUX6Nlnn9WhQ4f04IMP6tJLL53srwsAAAATKOqd67ZtbSPBOiYyFFHbtrZJvW9XV5d++MMfavv27XryyScVu0Vy2bJluueee7R161bddddduvXWW0d+5tVXX9VPfvITffvb35Ykvfbaa+ro6NBTTz2lG2+8UR/84Af18ssvy+v1qqMjurt+2223acuWLXrllVfU39+vp59+euT9BgcH9d///d9au3atvv71r0/q7wMAAIDkFPXO9YG+AymtJ+v555/XRz7yEXm9XklSY2OjIpGINm/erOuvv37kdUeOHBn58/XXX6+SkpKR5x/+8IdVVlamefPmaWhoSFdeeaUkad68edqzZ48k6dlnn9W3vvUtHT58WG+99ZY+8IEPqHH49qJrr71WknT++eePvB4AAACZVdThurK8UqG+UNz1ybDWnrB29OhRVVRUaMeOHXF/pry8fMzzk08+WZI0ZcoUlZWVyRgz8nxwcFCRSES33nqrurq6NH36dLW0tCgSiZzw8yUlJfRxAwAAZElRt4U01TbJU+IZs+Yp8aiptmlS73vJJZcoGAwqEononXfeUUdHh0455RSdffbZeuKJJyRFA/hLL72U9mfEgvSZZ56pd955R+vXr59UzQAAAJi8ot65jh1abNvWpgN9B1RZXqmm2qZJH2ZcuHChrr76as2fP1/vfe97FQgE5PP59Mgjj+gLX/iCvvGNb2hgYEAf//jHNX/+/LQ+o6KiQp/73Oc0b948zZgxQwsXLpxUzQAAAJg8E6+FIV8EAgEbOywYs3PnTs2ePdulio555513dOqpp+rw4cO67LLLdP/996u2ttbtsjIiV37nAAAAmWKM2WqtDUz0uqLeuc6kZcuW6Te/+Y0ikYhuuummgg3WAAAAOIZwnSH/8R//4XYJAAAAyLKiPtAIAAAAOIlwDQAAADiEcA0AAAA4hHANAAAAOIRwnYMeeugh9fb2ul0GAAAAUlT04TocDGr34jrtnD1HuxfXKRwMulrP0NAQ4RoAACBPFXW4DgeDCq1u1mBvr2StBnt7FVrdPOmAvWfPHp177rm66aabVFNTo+uuu06HDx9WZ2enzjvvPM2bN0+f/vSndeTIEUnSjBkz1NraqksuuUSPPvqourq6dMMNN2jBggXq7+/XjBkz9Kc//UmS1NXVpSuuuEKS9MYbb+hDH/qQamtrdcstt+i9732v/vSnP2nPnj2aO3fuSD133XWXWlpaJEmvvfaarrzySp1//vm69NJL9dvf/laS9MQTT2ju3LmaP3++LrvsMknRoL9q1SotXLhQNTU1+u53vzup3wsAAEChK+pwfXDNWtlIZMyajUR0cM3aSb/3rl27tGzZMnV3d+v000/X3XffrZtvvlmPP/64Xn75ZQ0ODuree+8deb3H49Hzzz+vG2+8UYFAQI888oh27Nghr9eb8DO+/vWva/Hixdq2bZs++tGP6g9/+MOEdS1btkz33HOPtm7dqrvuuku33nqrJKm1tVUbN27USy+9pB/96EeSpAcffFA+n09btmzRli1b9MADD+j3v//9JH8zAAAAhauow/VgKJTSeiqmT5+uiy++WJJ04403qrOzU2effbbe//73S5Juuukm/fznPx95/cc+9rGUP+P555/Xxz/+cUnSlVdeqTPOOGPc17/zzjvavHmzrr/+ei1YsEC33HKLQsN/14svvlg333yzHnjgAQ0NDUmSNm3apO9///tasGCBLrjgAr355pvavXt3ynUCAAAUi6K+obHU74+2hMRZnyxjTEqvLy8vT/i90tJSHT16VJIUGbXTbq2d8PWjf+bo0aOqqKjQjh07TviZ++67T7/61a/U0dGhBQsWaMeOHbLW6p577tGSJUtS+rsAAAAUq6LeuZ66coWMxzNmzXg8mrpyxaTf+w9/+INefPFFSdKjjz6qv/u7v9OePXv0u9/9TpL0gx/8QJdffnncnz3ttNP09ttvjzyfMWOGtm7dKkn64Q9/OLJ+ySWXqL29XVJ0l/nPf/6zJOk973mPDh48qDfffFNHjhzR008/LUk6/fTTdfbZZ+uJJ56QFA3nL730kqRoL/YFF1yg1tZWnXnmmdq7d6+WLFmie++9VwMDA5KkV199VX19fZP+3QAAABSqog7XvsZG+e9oVWlVlWSMSquq5L+jVb7Gxkm/9+zZs/Xwww+rpqZGb731llauXKl/+7d/0/XXX6958+ZpypQp+vznPx/3Z2+++WZ9/vOfHznQ+LWvfU1NTU269NJLVVJSMvK6r33ta9q0aZNqa2v1zDPPyO/367TTTlNZWZmam5t1wQUX6KqrrtK555478jOPPPKIHnzwQc2fP18f+MAH9NRTT0mSVq1apXnz5mnu3Lm67LLLNH/+fH32s5/VnDlzVFtbq7lz5+qWW27R4ODgpH83AAAAhcokai3IB4FAwHZ1dY1Z27lzp2bPnu1SRVF79uzRVVddpVdeeSWjn3PkyBGVlJSotLRUL774or7whS/EbfnItFz4nQMAAGSSMWartTYw0euKuuc63/3hD3/Q0qVLdfToUZ100kl64IEH3C4JAACgqBGuM2DGjBkZ37WWpHPOOUfbt2/P+OcAAAAgOUXdcw0AAAA4qSDDdT73kecbftcAAADHFFy49ng8evPNNwl9WWCt1ZtvvinPceMMAQAAilXB9VxXV1dr3759euONN9wupSh4PB5VV1e7XQYAAEBOKLhwXVZW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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "plt.figure(figsize = (12,12))\n", "\n", "# plot the stat from every book by language\n", "for language in os.listdir(book_dir):\n", " subset = stat_result[stat_result.lang == language] # filter the stat data by language\n", " plt.loglog(subset.total_words, subset.uniq_words, \"o\", label = language)\n", "\n", "plt.legend()\n", "plt.xlabel(\"Total Number of Words\")\n", "plt.ylabel(\"Number of unique words\")\n", "plt.savefig(\"total_vs_unique_words.png\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" } }, "nbformat": 4, "nbformat_minor": 2 }