A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estudo de caso: Seleção de estrutura de dados

Apresentações semelhantes


Apresentação em tema: "Estudo de caso: Seleção de estrutura de dados"— Transcrição da apresentação:

1 Estudo de caso: Seleção de estrutura de dados
CHRISTOPHER FREIRE SOUZA EWERTON AMORIM DE OLIVEIRA LUCAS HENRIQUE SILVA

2 Análise de frequência de palavras
Escreva um programa que leia um arquivo, quebre cada linha em palavras, retire pontuação e espaços em branco entre as palavras e as transforme em letras minúsculas. Dica: O módulo string contém uma string chamada whitespace que contém todos os tipos de espaços em branco e uma chamada punctuation, que contém todos os tipos de pontuação. Você pode também considerar utilizar os métodos strip(), replace() e translate(). >>> import string >>> string.punctuation

3 Exercícios Vá no projeto Gutemberg e baixe seu livro preferido no formato texto. Você consegue fazer os exercícios a seguir? A resolução destes itens seguem no conteúdo deste material. Modifique o programa proposto no slide anterior para desconsiderar a primeira linha e fazer a leitura do restante do texto. Modifique o programa para contar o número total de palavras no texto e o número de vezes que cada palavra é usada. Imprima o número de diferentes palavras utilizadas no texto. Compare diferentes livros de diferentes autores. Que autores utilizam vocabulário mais diversificado? Modifique o programa para imprimir as vinte palavras mais utilizadas no texto

4 Números aleatórios Dadas as mesmas entradas, muitos programas geram a mesma saída toda vez. Estes programas são chamados de determinísticos. Determinismo é normalmente uma coisa boa, desde que nós esperemos que efetuar várias vezes o mesmo cálculo gere sempre os mesmos resultados. No entanto, em muitas aplicações, queremos que o computador seja imprevisível. Um exemplo trivial disso é um jogo, mas existem mais exemplos. Criar programas que não sejam determinísticos normalmente é uma tarefa complicada, mas existem meios de fazer algo próximo disso. Um caminho é utilizar algoritmos que geram números pseudo-aleatórios. Números pseudo-aleatórios são gerados utilizando algoritmos determinísticos.

5 Números aleatórios O módulo random contém funções que geram números pseudo-aleatórios (chamaremos simplesmente de aleatórios a partir daqui). A função random retorna um número real no intervalo [0,1). Cada vez que você executa a função você tem um número novo a partir de uma longa série. Para ver um exemplo, execute o seguinte código: import random for i in range(10): x = random.random() print(x)

6 Números aleatórios A função randint recebe dois parâmetros (low e high) e retorna um inteiro entre low e high, incluindo ambos. Para escolher aleatoriamente um elemento de uma lista, utilize a função choice(). >>> random.randint(5, 10) 5 9 >>> t = [1, 2, 3] >>> random.choice(t) 2 3

7 Exercício Escreva uma função nomeada escolha_a_partir_do_histograma, que recebe como argumento um histograma, como definido na função desenvolvida quando do estudo de dicionários, e retorna um valor aleatório do histograma, escolhido com probabilidade proporcional à frequência. Por exemplo, para este histograma: Sua função deve retornar a com probabilidade 2/3 e retornar b com probabilidade 1/3. >>> t = ['a', 'a', 'b'] >>> hist = histograma(t) >>> hist {'a': 2, 'b': 1}

8 Histograma de palavras
A seguir segue um programa que lê um arquivo e cria um histograma de palavras no arquivo: import string def processa_arquivo(filename): hist = dict() fp = open(filename) for line in fp: processa_linha(line, hist) return hist def processa_linha(line, hist): line = line.replace('-', ' ') for word in line.split(): word = word.strip(string.punctuation + string.whitespace) word = word.lower() hist[word] = hist.get(word, 0) + 1 hist = processa_arquivo('emma.txt')

9 Histograma de palavras
A função processa_arquivo percorre o arquivo de texto, linha a linha, repassando-as para a função processa_linha. processa_linha usa um método de string replace que substitui hifens em espaços antes de usar o método split para quebrar a linha em uma lista de palavras. Ela percorre a lista de palavras para retirar os acentos utilizando o método strip e transformar em minúscula utilizando o método lower. Finalmente, a função processa_arquivo atualiza o histograma criando um novo item ou atualizando um existente. Para contar o número de palavras no arquivo, podemos somar todas as frequências no histograma. def total_palavras(hist): return sum(hist.values())

10 Histograma de palavras
O número de diferentes palavras é justamente o tamanho do histograma. Aqui vai um simples código para imprimir o resultado. def diferentes_palavras(hist): return len(hist) print(‘Número total de palavras:', total_palavras(hist)) print('Número de palavras diferentes:', diferentes_palavras(hist))

11 Palavras mais comuns Para encontrar as palavras mais comuns, podemos fazer uma lista de tuplas, onde cada tupla contem uma palavra e sua frequência e ordená- la. A função a seguir recebe um histograma como parâmetro e retorna uma lista de tuplas de palavras mais frequentes. Em cada tupla, a frequência aparece primeiro, então a lista resultante é ordenada pela frequência def most_common(hist): t = [] for key, value in hist.items(): t.append((value, key)) t.sort(reverse=True) return t

12 Palavras mais comuns O programa a seguir imprime as 10 palavras mais comuns: O código pode ser simplificado usando o parâmetro key da função sort. t = most_common(hist) print('The most common words are:') for freq, word in t[:10]: print(word, freq, sep='\t')

13 Parâmetros opcionais Já vimos funções existentes em Python que recebem argumentos opcionais. É possível criar funções com argumento opcional. Veja um exemplo esta função que imprime as n palavras mais comuns. Se você apenas fornecer um argumento: num obtém o valor padrão (10). Se você fornecer dois argumentos: Ao invés do valor padrão, num obtém o valor passado como argumento (5). Para definir parâmetros opcionais de funções, o Python requisita que os obrigatórios devem ser listados antes como argumentos. def print_most_common(hist, num=10): t = most_common(hist) print('The most common words are:') for freq, word in t[:num]: print(word, freq, sep='\t') print_most_common(hist) print_most_common(hist,5)

14 Subtração de dicionário
Encontrar as palavras do livro que não estão na lista de palavras de words.txt é um problema que você pode encarar como se fosse uma subtração de conjuntos. Ou seja, queremos encontrar as palavras de um conjunto (palavras em um livro) que não estão em outro conjunto (palavras na lista). A função subtrair recebe como argumentos os dicionários d1 e d2 e retorna um dicionário que contém todas as chaves de d1 que não estão em d2. Não estamos preocupados com os valores, então atribuímos None. def subtrair(d1, d2): res = dict() for key in d1: if key not in d2: res[key] = None return res

15 Subtração de dicionário
O programa a seguir compara o histograma criado anteriormente com a lista de palavras. Python tem uma estrutura de dados chamada set que tem várias operações de conjuntos como métodos. words = processa_arquivo('words.txt') diff = subtrair(hist, words) print(“Palavras no livro que não estão na lista de palavras:") for word in diff: print(word, end=' ')

16 Palavras aleatórias A função a seguir retorna uma palavra aleatória do texto, considerando a probabilidade de cada palavra. def palavra_aleatoria(h): t = [] for palavra, freq in h.items(): t.extend([palavra] * freq) return random.choice(t)


Carregar ppt "Estudo de caso: Seleção de estrutura de dados"

Apresentações semelhantes


Anúncios Google