# Genera frasi a partire da un testo contenuto in un # file "dc.txt" (ma ovviamente cambiando il nome del # file si puo' cambiare il testo da imitare). # Per farlo mette in fila tutte le parole del testo, # considera le coppie (w,z) consecutive di parole # e crea un dizionario che contiene come chiavi le # parole w e come valori la liste delle parole z # che seguono w nel testo (w puo' comparire diverse # volte seguita da diverse parole). La lista puo' # contenere ripetizioni. # Costruito questo dizionario, si prende una parola # a caso in esso e si sceglie a caso una delle # parole che la seguono dal dizionario. Poi si fa # lo stesso con la parola scelta, e cosi' via. # Un criterio per terminare la frase puo' essere # scriverci un numero massimo di parole, o controllare # se una parola termina con un punto: in questo # caso diciamo che la frase e' terminata. # Optiamo per questa seconda possibilita'. Inoltre # per partire scegliamo una parola a caso fra quelle # che seguono una parola che termina con un punto. import random nomefile = "dc.txt" # Legge il contenuto del file, separa le sequenze # di caratteri delimitate da spazi (per noi sono le # parole) e torna la liste ordinata delle parole # nella variabile testo with open(nomefile) as f: s = f.read() testo = s.split() # D conterra' il dizionario le cui chiavi sono # le parole del testo e i cui valori la lista delle # parole che seguono la chiave nel testo D = {} i = 1 while i < len(testo): parola = testo[i-1] parola_seguente = testo[i] if parola in D: D[parola].append(parola_seguente) else: D[parola] = [parola_seguente] i += 1 # Ora generiamo frasi a caso e le stampiamo: dopo # ogni stampa il programma chiede una stringa in # input solo per interrompersi fino a che l'utente # non abbia premuto "INVIO" o "ENTER". # Cerchiamoa una parola che ne segue una che termina # con un punto. parola = random.choice(list(D.keys())) while parola[-1] not in [".", "!", "?"]: parola = random.choice(list(D.keys())) # Ora parola termina con un punto, quindi una delle # parole che la seguono e' buona per iniziare una # frase parola = random.choice(D[parola]) frase = parola while True: while parola[-1] not in [".", "!", "?"]: parola = random.choice(D[parola]) frase += " " + parola print(frase) input() parola = random.choice(D[parola]) frase = parola