uaveiro-leci/1ano/fp/extra2/twitter.py

59 lines
1.7 KiB
Python

# Este programa demonstra a leitura e utilização de dados de um ficheiro JSON
# com mensagens do Twitter.
# Modifique-o para resolver o problema proposto.
# O módulo json permite descodificar ficheiros no formato JSON.
# São ficheiros de texto que armazenam objetos compostos que podem incluir
# números, strings, listas e/ou dicionários.
import json
# Abre o ficheiro e descodifica-o criando o objeto twits.
with open("twitter.json", encoding="utf8") as f:
twits = json.load(f)
# Analise os resultados impressos para perceber a estrutura dos dados.
print(type(twits)) # deve indicar que é uma lista!
print(type(twits[0])) # cada elemento da lista é um dicionário.
print(twits[0].keys()) # mostra as chaves no primeiro elemento.
# Cada elemento contém uma mensagem associada à chave "text":
print(twits[0]["text"])
# Algumas mensagens contêm hashtags:
print(twits[880]["text"])
# A)
word_count: dict[str, int] = {}
for tweet in twits:
tweet_content: str = tweet["text"]
for word in tweet_content.split():
if word not in word_count:
word_count[word] = 0
word_count[word] += 1
word_list = list(word_count.keys())
print("A)\n" + str(word_list), end="\n\n")
# B)
ordered_list = sorted(word_list, key=lambda t: word_count[t], reverse=True)
print("B)\n" + str(ordered_list), end="\n\n")
# C)
ordered_hashtag_list = [word for word in ordered_list if word.startswith('#')]
print("C)\n" + str(ordered_hashtag_list), end="\n\n")
# D)
print("D)\n")
most_used = word_count[ordered_hashtag_list[0]]
for hashtag in ordered_hashtag_list:
print(f"{hashtag:<30} ({word_count[hashtag]:>2}) {'+' * ((word_count[hashtag]*18)//most_used)}")