-
-
Save lucasrcezimbra/aed8052c68e7aa06e64ad8b9f405ca74 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
13. wordcount | |
Este desafio é um programa que conta palavras de um arquivo qualquer de duas | |
formas diferentes. | |
A. Lista todas as palavras por ordem alfabética indicando suas ocorrências. | |
Ou seja... | |
Dado um arquivo letras.txt contendo as palavras: A a C c c B b b B | |
Quando você executa o programa: python wordcount.py --count letras.txt | |
Ele deve imprimir todas as palavras em ordem alfabética seguidas | |
do número de ocorrências. | |
Por exemplo: | |
$ python wordcount.py --count letras.txt | |
a 2 | |
b 4 | |
c 3 | |
B. Lista as 20 palavras mais frequêntes indicando suas ocorrências. | |
Ou seja... | |
Dado um arquivo letras.txt contendo as palavras: A a C c c B b b B | |
Quando você executa o programa: python wordcount.py --topcount letras.txt | |
Ele deve imprimir as 20 palavras mais frequêntes seguidas | |
do número de ocorrências, em ordem crescente de ocorrências. | |
Por exemplo: | |
$ python wordcount.py --topcount letras.txt | |
b 4 | |
c 3 | |
a 2 | |
Abaixo já existe um esqueleto do programa para você preencher. | |
Você encontrará a função main() chama as funções print_words() e | |
print_top() de acordo com o parâmetro --count ou --topcount. | |
Seu trabalho é implementar as funções print_words() e depois print_top(). | |
""" | |
import sys | |
from collections import Counter | |
class WordCounter(Counter): | |
@classmethod | |
def from_text(cls, text): | |
return cls(text.lower().split()) | |
@classmethod | |
def from_filename(cls, filename): | |
with open(filename) as f: | |
text = f.read() | |
return cls.from_text(text) | |
def sorted_by_word(self): | |
return sorted( | |
[(word, count) for word, count in self.items()], | |
key=lambda counter: counter[0], | |
) | |
def print_words(filename): | |
for word, count in WordCounter.from_filename(filename).sorted_by_word(): | |
print(word, count) | |
def print_top(filename): | |
for word, count in WordCounter.from_filename(filename).most_common(): | |
print(word, count) | |
# A função abaixo chama print_words() ou print_top() de acordo com os | |
# parêtros do programa. | |
def main(): | |
if len(sys.argv) != 3: | |
print('Utilização: ./wordcount.py {--count | --topcount} file') | |
sys.exit(1) | |
option = sys.argv[1] | |
filename = sys.argv[2] | |
if option == '--count': | |
print_words(filename) | |
elif option == '--topcount': | |
print_top(filename) | |
else: | |
print('unknown option: ' + option) | |
sys.exit(1) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment