import operator def estraiParola(stringa): parola = "" for car in stringa: if car.isalpha(): parola += car return parola.lower() def creaListaParole(testo): stringhe = testo.split() parole = [] for stringa in stringhe: if "'" in stringa: substringhe = stringa.split("'") for s in substringhe: if s != "": parole.append(estraiParola(s)) else: parola = estraiParola(stringa) if parola != "": parole.append(parola) return parole def creaInsiemeParole(testo): stringhe = testo.split() parole = set() for stringa in stringhe: if "'" in stringa: substringhe = stringa.split("'") for s in substringhe: if s != "": parole.add(estraiParola(s)) else: parola = estraiParola(stringa) if parola != "": parole.add(parola) return parole def frequenzeParole(listaParole, testo): frequenza = {} for parola in listaParole: frequenza[parola] = 0 paroleTesto = creaListaParole(testo) for parola in paroleTesto: if parola in listaParole: frequenza[parola] = frequenza[parola] + 1 return sorted(frequenza.items(), key=operator.itemgetter(1), reverse=True) def insieme(lista): risult = set() for elem in lista: risult.add(elem) return risult # crea una lista in cui all'elemento di indice i # è associato l'insieme di parole distinte contenute nella riga i def creaParoleInRighe(file): paroleInRighe = [""] for riga in file: paroleRiga = creaInsiemeParole(riga) paroleInRighe.append(paroleRiga) return paroleInRighe # crea un dizionario in cui a ogni parola distinta è associato # un insieme di righe distinte def indiceAnalitico(file): paroleInRighe = creaParoleInRighe(file) indice = {} for i in range(len(paroleInRighe)): paroleRiga = paroleInRighe[i] for parola in paroleRiga: if parola in indice: indice[parola].add(i) else: indice[parola] = {i} return indice def ricercaParola(parolaCercata, file): numeriRighe = set() paroleInRighe = creaParoleInRighe(file) for i in range(len(paroleInRighe)): paroleRiga = paroleInRighe[i] for parola in paroleRiga: if parolaCercata == parola: numeriRighe.add(i) return numeriRighe