import locale import functools import sys import unicodedata from ordenacion import * def caracter_no_contenido(texto): # devuelve un carácter que no esté en el texto buscando # en todos los posible valores de Unicode for i in range(1+sys.maxunicode): if chr(i) not in texto: return chr(i) # no encontró ninguno, caso rarísimo por no decir imposible mensaje="el texto contiene todos los caracteres Unicode" mensaje+=" y no es posible encontrar uno que no esté" raise Exception(mensaje) def extrae_palabras(texto): # dado un texto (cadena de caracteres) devuelve # una lista con las palabras que contiene # se busca un carácter raro que no esté contenido en el texto, # se usará en lugar del . de la ch vaqueira y h aspirada raro=caracter_no_contenido(texto) # obtenidos los separadores entre los que seguramente estará el ".", # se cambian en el texto original los puntos de la h aspirada y de # la ch vaqueira por el carácter raro no previamente contenido # ch vaqueira texto=texto.replace("l.l","l"+raro+"l") texto=texto.replace("L.l","L"+raro+"l") texto=texto.replace("L.L","L"+raro+"L") texto=texto.replace("l.L","l"+raro+"L") # caso improbable # h aspirada for h in "Hh": for vocal in "AEIOUÁÉÍÓÚaeiouáéíóú": # no puede ser con ü texto=texto.replace(h+"."+vocal,h+raro+vocal) # el "." es seguramente separador pero ya no está como # parte de la ch vaqueira ni de la h aspirada y se puede # entonces reemplazar cada separador por un espacio separadores="" for caracter in texto: # las letras tienen categoría "L" categoria=unicodedata.category(caracter)[0] if categoria!="L" and caracter not in separadores+raro: # se ha encontrado un separador nuevo separadores=separadores+caracter # encontrados todos los separadores, se cambian por espacios for separador in separadores: if separador not in " \n": # podemos respetar el salto de línea texto=texto.replace(separador," ") with open("salida.txt","w") as f: print(texto,file=f) # se vuelven a dejar los puntos de la ch vaqueira y h aspirada en su sitio texto=texto.replace(raro,".") ## with open("salida.txt","w") as f: ## print(texto,file=f) # el texto ya contiene solo palabras y espacios return texto.strip().split() if __name__ == "__main__": texto="el neñu ye un guaḥe de Ḷḷena con güeyos color marrón y yê del Barça" texto+=" ¿é braña «viel.la» cola a-s h.oguera?" with open("Don Quijote de la Mancha.txt") as fichero: texto=fichero.read() lista_palabras=extrae_palabras(texto) print(len(lista_palabras)) print(ordena(set(lista_palabras))[-100:])