tpc3 faltam 2
This commit is contained in:
parent
79fc8f3bfd
commit
4fa4a07e5c
2 changed files with 38005 additions and 0 deletions
37886
TPC3/processos.txt
Normal file
37886
TPC3/processos.txt
Normal file
File diff suppressed because it is too large
Load diff
119
TPC3/tpc3.py
Normal file
119
TPC3/tpc3.py
Normal file
|
@ -0,0 +1,119 @@
|
|||
import re
|
||||
from dataclasses import dataclass
|
||||
|
||||
# para correr o codigo usar o python 3.10+
|
||||
|
||||
|
||||
@dataclass
|
||||
class Pessoa:
|
||||
nome: str
|
||||
pai: str
|
||||
mae: str
|
||||
obs: str
|
||||
|
||||
|
||||
@dataclass
|
||||
class Processo:
|
||||
ano: int
|
||||
mes: int
|
||||
dia: int
|
||||
pessoa: Pessoa
|
||||
|
||||
|
||||
data: dict[str, list[Processo]] = {}
|
||||
|
||||
|
||||
def freq_ano():
|
||||
dict_freq = dict()
|
||||
|
||||
for folder in data.values():
|
||||
for proc in folder:
|
||||
dict_freq.setdefault(proc.ano, 0)
|
||||
dict_freq[proc.ano] += 1
|
||||
return dict_freq
|
||||
|
||||
|
||||
def top5_nome_apelido():
|
||||
freq_nome: dict[str,int] = dict()
|
||||
freq_apelido : dict[str,int] = dict()
|
||||
na_regex = re.compile(r"(\w+) (\w+ )*(\w+)")
|
||||
for folder in data.values():
|
||||
for proc in folder:
|
||||
na_pessoa = na_regex.match(proc.pessoa.nome)
|
||||
na_pai = na_regex.match(proc.pessoa.pai)
|
||||
na_mae = na_regex.match(proc.pessoa.mae)
|
||||
if na_pessoa:
|
||||
freq_nome.setdefault(na_pessoa.group(1), 0)
|
||||
freq_nome[na_pessoa.group(1)] += 1
|
||||
freq_apelido.setdefault(na_pessoa.group(2), 0)
|
||||
freq_apelido[na_pessoa.group(2)] += 1
|
||||
if na_pai:
|
||||
freq_nome.setdefault(na_pai.group(1), 0)
|
||||
freq_nome[na_pai.group(1)] += 1
|
||||
freq_apelido.setdefault(na_pai.group(2), 0)
|
||||
freq_apelido[na_pai.group(2)] += 1
|
||||
if na_mae:
|
||||
freq_nome.setdefault(na_mae.group(1), 0)
|
||||
freq_nome[na_mae.group(1)] += 1
|
||||
freq_apelido.setdefault(na_mae.group(2), 0)
|
||||
freq_apelido[na_mae.group(2)] += 1
|
||||
top_nome = sorted(freq_nome.items(), key=lambda x: -x[1])[:5]
|
||||
top_apelido = sorted(freq_apelido.items(), key=lambda x: -x[1])[:5]
|
||||
return (top_nome, top_apelido)
|
||||
|
||||
|
||||
def print_freq_ano(freq_ano: dict[int, int]):
|
||||
print("Ano - Freq")
|
||||
for k, v in sorted(freq_ano.items()):
|
||||
print(f"{k} - {v}")
|
||||
|
||||
|
||||
def print_top5_nome_apelido(freqs: tuple):
|
||||
print("Top 5 nomes")
|
||||
for k, v in freqs[0]:
|
||||
print(f"{k} : {v}")
|
||||
|
||||
print("\nTop 5 apelidos")
|
||||
for k, v in freqs[1]:
|
||||
print(f"{k} : {v}")
|
||||
|
||||
|
||||
def parseFile(filename):
|
||||
casos_erro = 0
|
||||
f = open(filename, "r")
|
||||
|
||||
all_regex = re.compile(
|
||||
r"(\d+)::(\d{4})-(\d{2})-(\d{2})::([a-zA-Z ]+)::([a-zA-Z ]*)::([a-zA-Z ]*)::(.*)::"
|
||||
)
|
||||
|
||||
for line in f.readlines():
|
||||
all_mo = all_regex.match(line)
|
||||
if all_mo != None:
|
||||
pasta = all_mo.group(1)
|
||||
ano = int(all_mo.group(2))
|
||||
mes = int(all_mo.group(3))
|
||||
dia = int(all_mo.group(4))
|
||||
nome = all_mo.group(5)
|
||||
pai = all_mo.group(6)
|
||||
mae = all_mo.group(7)
|
||||
obs = all_mo.group(8)
|
||||
|
||||
data.setdefault(pasta, list())
|
||||
pessoa = Pessoa(nome, pai, mae, obs)
|
||||
processo = Processo(ano, mes, dia, pessoa)
|
||||
data[pasta].append(processo)
|
||||
else:
|
||||
casos_erro += 1
|
||||
return casos_erro
|
||||
|
||||
|
||||
def main():
|
||||
casos_erro = parseFile("processos.txt")
|
||||
print(f"Casos de erro : {casos_erro}")
|
||||
#frequencia_ano = freq_ano()
|
||||
#print_freq_ano(frequencia_ano)
|
||||
top5 = top5_nome_apelido()
|
||||
print_top5_nome_apelido(top5)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in a new issue