# Constantes

TEXTE = 'texte.txt'

AMOUR = 'champ_amour.txt'
GUERRE = 'champ_guerre.txt'
MORT = 'champ_mort.txt'
FAMILLE = 'champ_famille.txt'

CHAMPS = {'amour':AMOUR, 'guerre':GUERRE, 'mort':MORT, 'famille':FAMILLE}


# Fonctions

def creer_compteur(champs:dict) -> dict:
    """Crée le compteur-dictionnaire vide"""
    compteur = {}
    for cle in champs.keys():
        compteur[cle] = 0
    return compteur

def filtrer(ligne:str) -> str:
    
    ligne = ligne.replace('.', ' ')
    ligne = ligne.replace("'", ' ')
    ligne = ligne.replace("?", ' ')
    return ligne

def lire_ligne(ligne:str, champs:dict, compteur:dict):
    """Modifie le dict compteur en comptant les mots du thème"""
    
    ligne = filtrer(ligne)
    mots = ligne.split()
    for mot in mots:
        for champ, mots_du_champs in champs.items():
            if mot.lower() in mots_du_champs:
                compteur[champ] = compteur[champ] + 1                
            

def analyser(nom:str, champs:dict) -> dict:
    """Renvoie le dict-compteur des champs sémantiques"""
    
    compteur = creer_compteur(champs)  
    f = open(nom, 'r', encoding="utf-8")
    for ligne in f:
        lire_ligne(ligne, champs, compteur)
    
    return compteur

def trois_plus_grand(reponses:dict) -> dict:
    """Renvoie uniquement les 3 plus grandes valeurs"""
    
    trois = {}
    copie = {}
    for cle in reponses.keys():
        copie[cle] = reponses[cle]
    
    for _ in range(3):
        clemax = None
        maximum = -1
        for cle, valeur in copie.items():
            if valeur > maximum:
                maximum = valeur
                clemax = cle
        trois[cle] = copie[cle]
        del copie[cle]
    
    return trois
                
                

# Programme

reponses = analyser(TEXTE, CHAMPS)
print( trois_plus_grand(reponses))