140 lines
3.9 KiB
Python
140 lines
3.9 KiB
Python
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,dict[str,int]] = dict()
|
|
freq_apelido : dict[str,dict[str,int]] = dict()
|
|
na_regex = re.compile(r"(\w+) (\w+ )*(\w+)")
|
|
for folder in data.values():
|
|
for proc in folder:
|
|
na = na_regex.match(proc.pessoa.nome)
|
|
if na:
|
|
ano = proc.ano
|
|
seculo = str((ano // 100) + 1)
|
|
nome = na.group(1)
|
|
apelido = na.group(3)
|
|
freq_nome.setdefault(seculo,{})
|
|
freq_nome[seculo].setdefault(nome,0)
|
|
freq_nome[seculo][nome] += 1
|
|
freq_apelido.setdefault(seculo, {})
|
|
freq_apelido[seculo].setdefault(apelido,0)
|
|
freq_apelido[seculo][apelido] += 1
|
|
top5_nome_seculo = {}
|
|
for seculo,nomes in freq_nome.items():
|
|
top_nome = sorted(nomes.items(), key=lambda x: -x[1])[:5]
|
|
top5_nome_seculo.__setitem__(seculo,top_nome)
|
|
|
|
top5_apelido_seculo = {}
|
|
for seculo,apelidos in freq_apelido.items():
|
|
top_apelido = sorted(apelidos.items(), key=lambda x: -x[1])[:5]
|
|
top5_apelido_seculo.__setitem__(seculo,top_apelido)
|
|
print(top5_nome_seculo)
|
|
return (top5_nome_seculo, top5_apelido_seculo)
|
|
|
|
def freq_relacoes():
|
|
|
|
relationship = dict()
|
|
exp = re.compile(r"[a-zA-Z ]*,([a-zA-Z\s]*)\.[ ]*Proc\.\d+\.")
|
|
for folder in data.values():
|
|
for proc in folder:
|
|
obs = proc.pessoa.obs
|
|
matches = exp.finditer(obs)
|
|
for match in matches:
|
|
relationship.setdefault(match.group(1),0)
|
|
relationship[match.group(1)] += 1
|
|
return relationship
|
|
|
|
|
|
|
|
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):
|
|
for seculo in sorted(freqs[0].keys()):
|
|
print(f"Seculo {seculo}")
|
|
print("\tTop 5 nomes")
|
|
for k, v in freqs[0][seculo]:
|
|
print(f"\t\t{k} : {v}")
|
|
print("\n\tTop 5 apelidos")
|
|
for k, v in freqs[1][seculo]:
|
|
print(f"\t\t{k} : {v}")
|
|
|
|
def print_freq_relacoes(freqs:dict[str,int]):
|
|
for k,v in freqs.items():
|
|
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)
|
|
frequencia_relacoes = freq_relacoes()
|
|
print_freq_relacoes(frequencia_relacoes)
|
|
if __name__ == "__main__":
|
|
main()
|