(Python).Faça um programa, usando funções, que leia o nome de um arquivo texto contendo várias palavras por linha. Produza um dicionário com todas as palavras do arquivo e suas respectivas contagens de ocorrência. Escreva, ordenado alfabeticamente todas as palavras que ocorreram mais que cinco vezes no arquivo.
Soluções para a tarefa
No programa, logo abaixo, é solicitado do usuário o nome do arquivo a ser lido, nos exemplos anexados este arquivo era "teste.txt", sendo que o arquivo deve estar na mesma pasta do programa.
Após o código, comento um pouco sobre o que foi feito.
Obs.: Os pontos que precedem as linhas estão para garantir a indentação, não fazem parte do código.
--------------------------------------------------------------------
nome=str(input('Nome do arquivo: ')).strip()
f=open(nome,"r")
s=f.read()
s=s.replace('.','')
s=s.replace(',','')
s=s.lower().split()
dicionario=dict()
for c in s:
.....if c not in dicionario.keys():
..........dicionario[c]=1
.....else:
..........dicionario[c]+=1
print(f'\n\n{dicionario},\n\n')
for c in sorted(dicionario):
.....if dicionario[c]>5:
.....print(f'{c} : {dicionario[c]} ocorrências.')
f.close()
--------------------------------------------------------------------
Comentários:
--> Como já dito, começamos o código solicitando do usuário o "nome" do arquivo.
--> Utilizamos a função open() passando como parâmetros o nome do arquivo e "r" para indicar que será feita apenas a leitura do arquivo.
Note que a variável "f" se torna a "representação" do arquivo, um objeto.
--> Para facilitar a manipulação do texto presente no arquivo, utilizamos o método read() para retornar todo texto do arquivo e guardamos na variável "s".
--> Agora fazemos algumas manipulações no conteúdo do texto afim de capturar as palavras de forma correta. Utilizamos o método replace() para substituir todos pontos e todas virgulas por um caractere vazio e, depois, utilizamos os métodos lower() e split(). O método lower() foi utilizado para deixar todos caracteres em minusculo evitando que haja diferenciação entre uma mesma palavra digitada com capitalização. Já o split() tem como função separar o texto pelos espaços guardando em uma lista.
--> Até agora, temos em "s" uma lista com todas palavras em letra minuscula.
--> Depois de declararmos o dicionario, utilizamos utilizamos um laço for para percorrer toda palavra "c" na lista "s". Dentro do for, temos uma estrutura condicional (if/else). Essa estrutura verifica se a palavra atual é uma chave (key) no dicionario, em outras palavras, verifica se esta palavra já apareceu antes.
--> Caso negativo, criamos outro item no dicionario, sendo que a chave será a palavra (c) e damos 1 como valor (primeira ocorrência da palavra). Caso positivo (palavra repetida), o item do dicionario cuja chave tem nome igual a palavra atual do laço tem seu valor incrementado.
--> Até agora, temos o dicionario montado com todas palavras (chaves) e suas respectivas quantidades de ocorrência (valores).
--> Utilizamos outro laço for para percorrer cada palavra na lista contendo todas chaves do dicionario já ordenadas alfabeticamente (utilização da função sorted()).
--> Dentro do laço temos um condicional. Caso o valor do item do dicionario cuja chave tem nome "c" for superior a 5, mostramos ao usuário a chave (palavra do texto) e, também, o numero de ocorrências.
--> Por fim, fechamos o arquivo "f" pelo método close().
Obs.: Tenha em vista que esta não é a unica ou a melhor forma para resolver o exercício.