# Cuenta patrones del ficheru patrones.txt testu. # Versión 2: # - pidi nome del ficheru # - optimización de la sustitución # Versión 3: # - pidi nome del ficheru col ratón # - función pa eliminar lo que nun son lletres y espacios # Versión 4: # - cuenta por separao cada artículu # Versión 5: # - cuenta los patrones señalaos nel ficheru patrones.txt # Escrito por José A. Corrales 28-nov-2023 # pal diálogu d'apertura de ficheros from tkinter import filedialog def quita_non_lletres(testu): # devuelve un testu pero solo con lletres y espacios # lletres (valen les minúscules) lletres="abcdefghijklmnñopqrstuvwxyz"+"áéíóúü" # p'anotar y nun repetir los caracteres yá cambiaos ya_cambiaos="" for c in testu: if c not in lletres+" "+ya_cambiaos: testu=testu.replace(c," ") # yá se cambió una vez, nun fae falta repetilo ya_cambiaos=ya_cambiaos+c return testu def obtener_patrones(nome_ficheru): # devuelve la llista de patrones del ficheru que s'especifica ficheru_con_patrones=open(nome_ficheru) patrones=ficheru_con_patrones.read().replace(","," ").split() ficheru_con_patrones.close() return patrones # Programa principal # llista de patrones, deben tar separaos por espacios, comes o llínies patrones=obtener_patrones("patrones.txt") # print(patrones) # depuración, pa comprobar que llee bien los patrones # contadores: unu por cada patrón contadores=[0]*len(patrones) # nome del ficheru a procesar #nome_ficheru="Don Quijote de la Mancha texto.txt" #nome_ficheru=input("nome del ficheru a procesar: ") nome_ficheru=filedialog.askopenfilename( title="Seleccione'l nome del ficheru a analizar", filetypes=(("ficheros de testu","*.txt"),) ) if nome_ficheru=="": print("nun s'especificó un ficheru pa analizar") exit() # llectura de datos ficheru=open(nome_ficheru) testu=ficheru.read() # too na misma cadena ficheru.close() # se pasa tol testu a minúscules testu=testu.lower() # eliminación de tolo que nun son lletres y espacios testu=quita_non_lletres(testu) # nesti puntu tenemos una cadena con solo lletres y espacios llista_palabres=testu.split() # cuenta patrones y muestra resultaos for i in range(len(patrones)): contadores[i]=contadores[i]+llista_palabres.count(patrones[i]) print(patrones[i],contadores[i]) # resultaos print("hai",sum(contadores),"patrones nel ficheru",nome_ficheru)