from random import random

def extraire_ngrammes(txt, n):
    """Extrait la liste des n-grammes d'un texte.
    Entrée : texte = le texte à analyser ( str )
             n = la taille des n-grammes
    Sortie : liste des n-grammes du fichier
    """

    ngrammes = []
    i = 0
    while ... : # tant qu'on n'a pas atteint la fin du texte - n caractères
        ngramme = ''
        for j in range(...): # extraction de n caractères
            ngramme += ...
        ngrammes.append(...)
        i += ... # "avance" de n caractères

    return ...


def analyse_contexte(ngrammes):
    """Renvoie les dictionnaires de contexte.
    Entrée : nrammes = la liste des ngrammes extraits du corpus d'entraînement (list)
    Sortie : contexte = dictionnaire des listes des ngrammes suivants chaque ngramme du corpus (dict)
             compteur = dictionnaire indiquant combien de fois chaque ngramme de contexte apparaît dans le corpus
    """
    pass


def calcul_frequences(contexte, compteur):
    """Fonction de calcul de la fréquence d'apparition de chaque suite de deux n-grammes possibles.
    Entrées : contexte et compteur = les deux dictionnaires
    Sortie : un dictionnaire fréquence dont les clés sont les n-grammes, et les valeurs, les listes des tuples (n-gramme suivant, fréquence).
    """
    pass




def choisir_mot(candidats):
    """Renvoie un candidat probable dans une liste de candidats possibles.
    Entrée : la liste des candidats sous forme (n-gramme, fréquence)
    Sortie : le n-gramme sélectionné
    """
    p = random() # tire aléatoirement un nombre entre 0 et 1.0

    # tri de la liste des tokens suivants par ordre de probalité DECROISSANTE
    pass

    # Choix du n-gramme
    pass


def genere_texte(prompt, n, N):
    """Génère un texte aléatoire à partir d'un corpus contenu dans un fichie texte.
    Entrée : prompt = le prompt initial (str), n = la taille des n-grammes (int), N = le nombre de mots à générer
    Sortie : le texte généré (str)
    """

    with open("les_miserables.txt", 'r') as f:
        corpus = f.read()

    # suppression des retours à la ligne
    corpus = corpus.replace('\n', ' ')

    pass


texte = "aabbababaaabcaabca"
n = 2

