# Extrae palabras de un texto, más eficiente from datetime import datetime def extrae_palabras(texto): # dado un texto extrae todas las palabras que hay # considerando palabra toda secuencia de letras # mayúsculas, minúsculas, acentuadas, u con diéresis # ḥ y h. aspiradas, ḷḷ y l.l vaqueira letras=letras="abcdefghijklmnñopqrstuvwxyz"+"áéíóúü"+"ḥḷ" letras=letras+letras.upper() # cualquier cosa que no sea letra se considerará separador # de palabras, por tanto hay que considerar la l.l como ll # y la h. como h # casos de la ch vaqueira, no pude haber la primera # minúscula y la segunda mayúscula texto=texto.replace("l.l","ḷḷ") texto=texto.replace("L.l","Ḷḷ") texto=texto.replace("L.L","ḶḶ") # casos de la h aspirada seguida de vocal acentuada o no texto=texto.replace("h.a","ḥa") texto=texto.replace("h.e","ḥe") texto=texto.replace("h.i","ḥi") texto=texto.replace("h.o","ḥo") texto=texto.replace("h.u","ḥu") texto=texto.replace("h.á","ḥá") texto=texto.replace("h.é","ḥé") texto=texto.replace("h.í","ḥí") texto=texto.replace("h.ó","ḥó") texto=texto.replace("h.ú","ḥú") # a partir de aquí todo lo que no sea letra será separador ya_reemplazados="" for caracter in texto: if caracter not in letras+ya_reemplazados: # carácter nuevo que no es letra ni ha sido ya reemplazado texto=texto.replace(caracter," ") ya_reemplazados=ya_reemplazados+caracter # el texto ya contiene solo letras y espacios return texto.split() # programa principal fichero=open("Don Quijote de la Mancha.txt") texto=fichero.read() fichero.close() hora_inicial=datetime.now() lista_palabras=extrae_palabras(texto) print("tiempo transcurrido:",datetime.now()-hora_inicial) print("número de palabras:",len(lista_palabras))