{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Ficha técnica\n", "\n", "__identificador__: AulaP10;\n", "\n", "__título__: Análise de textos de Fernando Pessoa;\n", "\n", "__data início__: 2021-12-13;\n", "\n", "__autor__: José Carlos Ramalho, D1513;\n", "\n", "__resumo__: Nesta aula, irás demonstrar o que aprendeste num cenário real de análise.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset\n", "\n", "Para esta aula descarrega o dataset de Fernando Pessoa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ficheiros numa pasta\n", "\n", "Para conseguires obter os ficheiros existentes numa pasta podes usar o seguinte módulo:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['alma.txt', 'arte.txt', 'arte2.txt', 'dobrada.txt', 'evaristo.txt', 'grande-tuga.txt', 'metafisica.txt', 'musica.txt']\n" ] } ], "source": [ "from os import listdir\n", "from os.path import isfile, join\n", "\n", "mypath = \"../datasets/fpessoa/\"\n", "onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]\n", "onlyfiles.sort()\n", "print(onlyfiles)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Resolve os seguintes exercícios:\n", "\n", "1. Calcula uma distribuição em que para cada ficheiro calculas o número de linhas e o número de caráteres desse ficheiro;\n", "2. Calcula uma distribuição para o documento \"arte2.txt\", com a frequência de cada letra;\n", "2. Para o documento \"evaristo.txt\", calcula o número de palavras no documento;\n", "3. Para o mesmo documento calcula a frequência de cada palavra;\n", "4. Ordena o resultado anterior por ordem alfabética da palavra;\n", "5. Ordena o resultado anterior por ordem decrescente de frequência;\n", "6. Lista na consola o Top10;\n", "7. Cria um gráfico para o Top10;\n", "8. Calcula a frequência de cada palavra usando o conteúdo de todos os documentos e repete os últimos passos para a distribuição resultante." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Número de linhas" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{'evaristo.txt': 454}, {'metafisica.txt': 17}, {'musica.txt': 47}, {'arte2.txt': 18}, {'dobrada.txt': 45}, {'grande-tuga.txt': 48}, {'alma.txt': 15}, {'arte.txt': 7}]\n" ] } ], "source": [ "def nlinhas(fnome):\n", " n = 0\n", " f = open(fnome, encoding=\"utf-8\")\n", " for linha in f:\n", " n = n+1\n", " return n\n", "\n", "contalinhas = [{x:nlinhas(mypath + x)} for x in onlyfiles]\n", "print(contalinhas)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{'alma.txt': 1459}, {'arte.txt': 659}, {'arte2.txt': 1121}, {'dobrada.txt': 885}, {'evaristo.txt': 41367}, {'grande-tuga.txt': 4345}, {'metafisica.txt': 1386}, {'musica.txt': 729}]\n" ] } ], "source": [ "def nchars(fnome):\n", " n = 0\n", " f = open(fnome, encoding=\"utf-8\")\n", " for linha in f:\n", " n = n + len(linha)\n", " return n\n", "\n", "contachars = [{x:nchars(mypath + x)} for x in onlyfiles]\n", "print(contachars)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'alma.txt': {'l': 15, 'c': 1459}, 'arte.txt': {'l': 7, 'c': 659}, 'arte2.txt': {'l': 18, 'c': 1121}, 'dobrada.txt': {'l': 45, 'c': 885}, 'evaristo.txt': {'l': 454, 'c': 41367}, 'grande-tuga.txt': {'l': 48, 'c': 4345}, 'metafisica.txt': {'l': 17, 'c': 1386}, 'musica.txt': {'l': 47, 'c': 729}}\n" ] } ], "source": [ "from os import listdir\n", "from os.path import isfile, join\n", "\n", "def analisaTextos(path):\n", " ficheiros = [join(path,f) for f in listdir(path) if isfile(join(path, f))]\n", " ficheiros.sort()\n", "\n", " analise = {}\n", " for fnome in ficheiros:\n", " f = open(fnome, encoding=\"utf-8\")\n", " l = 0\n", " c = 0\n", " for linha in f:\n", " l = l+1\n", " c = c + len(linha)\n", " nome = fnome.split(\"/\")[-1]\n", " analise[nome] = {\"l\":l, \"c\":c}\n", "\n", " return analise\n", "\n", "print(analisaTextos(\"../datasets/fpessoa\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def isLetra(c):\n", " if (c >= 'a' and c <= 'z') or (c >= 'A' and c <= 'Z'):\n", " return True\n", " else:\n", " return False" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "frase = \"A alma é grande\"\n", "for c in frase:\n", " print(c+\"\\a\")" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'A': 2, 'a': 82, 'r': 65, 't': 36, 'e': 109, 'l': 19, 'i': 44, 'v': 9, 'n': 45, 'o': 109, 's': 92, 'u': 43, 'm': 40, 'd': 42, 'z': 4, 'E': 1, 'q': 16, 'j': 3, 'H': 1, 'p': 23, 'c': 14, 'D': 3, 'O': 3, 'g': 9, 'x': 2, 'f': 6, 'M': 2, 'h': 4, 'b': 3, 'N': 1, 'P': 2, 'S': 1}\n" ] } ], "source": [ "def letrasFreq(fpath):\n", " fletras = {}\n", " f = open(fpath, encoding=\"utf-8\")\n", " for linha in f:\n", " for c in linha:\n", " if isLetra(c):\n", " if c not in fletras:\n", " fletras[c] = 1\n", " else:\n", " fletras[c] = fletras[c]+1\n", " return fletras\n", "\n", "print(letrasFreq(\"../datasets/fpessoa/arte2.txt\"))" ] } ], "metadata": { "interpreter": { "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" }, "kernelspec": { "display_name": "Python 3.9.4 64-bit", "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.9.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }