Autor Tema: Corrector ortográfico propio con Python.-  (Leído 5162 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Corrector ortográfico propio con Python.-
« en: 25 de Abril de 2022, 11:33:57 »
Hola gente, ¿Cómo están?, si lo que expongo no es para un foro mil disculpas, es que estoy hace 10 días
con el tema y no logro encontrar la solución.-
Estoy intentando hacer mi propio corrector ortográfico y llego a un punto y me quedo sin argumentos.
La pregunta seria ¿Qué criterio utilizarían por ejemplo en el siguiente caso?

Palabra correcta   = avanzar
Palabra a corregir = abansar

Cuando el error es de una sola letra es sencillo, pero cuando hay 2 o 3 letras
incorrectas hay me quedo empantanado y ni les cuento si la palabra tiene “h”.-
Les dejo lo que llevo hecho hasta el momento después de intentarlo con por
Lo menos 10 maneras distintas, un saludo y desde ya muchas gracias…

Código: [Seleccionar]
import codecs

def establecerIndices(corregir):
    letrasCambiar = "vbcsmn"
    letraCambio   = "bvscnm"
    cambios = []
   
    for ind, cor in enumerate(corregir):
        if cor in letrasCambiar:
            cambios.append(ind)
            cambios.append(cor)
            indice = letrasCambiar.find(cor)
            cambios.append(letraCambio[indice])

    return cambios


total = []
with codecs.open('completo.txt', 'r', encoding='utf-8') as archivo:
    for linea in archivo:
        linea = linea.rstrip()
        total.append(linea)

corregir = 'abersión' #aversión

correcto = 0
for tot in total:
    if tot == corregir:
        correcto = 1
        print('No hay error(es) ortográficos...')
        break
       
if correcto == 0:
    indices = establecerIndices(corregir)
[.....]


Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Corrector ortográfico propio con Python.-
« Respuesta #1 en: 25 de Abril de 2022, 17:26:24 »
Hola Daniel.
¿Puedes adjuntar el archivo de texto?
No entiendo bien lo que quieres conseguir.

Te adjunto un link de un lemario en castellano (con las palabras correctas del idioma).
https://olea.org/proyectos/lemarios/

Saludos.

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Corrector ortográfico propio con Python.-
« Respuesta #2 en: 25 de Abril de 2022, 18:26:05 »
Hola Picuino, te muestro un poco porque él .txt que utilizo
tiene 21.500 palabras(un promedio de 1000 c/u de las letras del abecedario).-
No sé que más explicarte, escribo una palabra y quiero que empareje con
la correcta contenida en él .txt, un corrector ortográfico sin utilizar las
reglas ortográficas, ahora mismo estoy practicando dividiendo la palabra
para que la porción de la izquierda contenga una sola letra con posible error.-

Código: [Seleccionar]
aversión
izquierda = aver
derecha = sión

Código: [Seleccionar]
analizar
aspecto
amor
además
apoyo
asimismo
aprovechar
alto
acción
aunque
atender
aplicar
actividad
amigo
alegre
ambivalencia
actualmente
armar
análisis
afirmar
asistir
aparecer
aplicación
armonía
aquello
avanzar
asunto
alma
ayudar
avance
antes
Gracias, muchas gracias por ocuparte.-

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Corrector ortográfico propio con Python.-
« Respuesta #3 en: 26 de Abril de 2022, 16:44:17 »
Parece difícil, sobre todo porque no es sencillo decidir qué palabras correctas son las que corresponden a una palabra mal escrita.
Si solo se ha fallado en una letra (por ejemplo abersión) parece sencillo dar con la correcta (aversión), pero habrá casos en los que se puedan cambiar otras letras e igualmente se consiga una palabra correcta.

En esta palabra habría que buscar todas las palabras del diccionario de 8 letras que coincidan con 7 letras y no coincidan con 1 letra (suponiendo que no falte alguna letra o haya una letra de sobra).

Yo haría una función que compare una a una todas las letras y devuelva el número de letras diferentes (0 = palabra correcta, 1 = palabra posiblemente correcta, 2 o más = palabra no coincidente)

Un saludo.

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Corrector ortográfico propio con Python.-
« Respuesta #4 en: 26 de Abril de 2022, 18:30:22 »
Hola Picuino, sos un genio, eso era lo que necesitaba
alguien que me dé una idea distinta a los 2 ejes por
donde encaraba las soluciones.-
Ahora te pido un esfuercito más, ¿es esto parecido a
lo que propones?, si tenés alguna sugerencia para
hacerlo más conciso, más optimizado, Daniel es todo
ojos.-

Código: [Seleccionar]
import codecs

def verificar(corregir, total):
    error = indice = 0
    coincidentes = []
    lenCorregir = len(corregir)
    for linea in total:
        if len(linea) <= lenCorregir:   
            for letra in linea:
                letraCor = corregir[indice]
                if letra != letraCor:   
                    error += 1
                indice += 1
            if error == 0:
               print(" No hay error(es)")
               break
            else:
                if error >= 1 and error <= 2:
                    if lenCorregir == len(linea):
                        coincidentes.append(linea)
           
            indice = 0
            error = 0

    if len(coincidentes) >= 1:
        print(coincidentes)


total = []
with codecs.open('Ortografia.txt', 'r', encoding='utf-8') as archivo:
    for linea in archivo:
        linea = linea.rstrip()
        total.append(linea)

corregir = "a"
while corregir:
    corregir = input("ingrese palabra a corregir...: ")
    verificar(corregir, total)
Gracias Picuino, muchas gracias.-
Slds. Daniel ☕☕☕
« Última modificación: 26 de Abril de 2022, 20:14:31 por Daniel1952 »
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Corrector ortográfico propio con Python.-
« Respuesta #5 en: 27 de Abril de 2022, 16:24:47 »
Te adjunto un programa para encontrar la palabra en el diccionario y, si no existe, encontrar palabras parecidas.
Un saludo.

Código: Python
  1. import codecs
  2.  
  3. def main():
  4.     lemario = leer_lemario()
  5.     palabra = True
  6.     while palabra:
  7.         palabra = input("Ingrese la palabra a corregir...: ")
  8.         if buscar_palabra(palabra, lemario) == True:
  9.             print('La palabra "%s" existe en el diccionario y es correcta\n' % palabra)
  10.         else:
  11.            parecidos = buscar_parecidos(palabra, lemario)
  12.            print('Palabras parecidas:\n%s\n' % str(parecidos))
  13.  
  14.  
  15. def leer_lemario():
  16.     lemario = []
  17.     for nombre_archivo in ['lemario1.txt', 'lemario2.txt']:
  18.         with codecs.open(nombre_archivo, 'r', encoding='utf-8') as archivo:
  19.             for linea in archivo:
  20.                 linea = linea.strip()
  21.                 if len(linea) > 0:
  22.                     lemario.append(linea)
  23.     return lemario
  24.  
  25.  
  26. def buscar_palabra(palabra, lemario):
  27.     for lema in lemario:
  28.         if palabra == lema:
  29.             return True
  30.     return False
  31.  
  32.    
  33. def buscar_parecidos(palabra, lemario):
  34.     parecidos = []
  35.     for lema in lemario:
  36.         if len(lema) == len(palabra) and letras_distintas(lema, palabra) == 1:
  37.             parecidos.append(lema)
  38.     return parecidos
  39.  
  40.  
  41. def letras_distintas(palabra, lema):
  42.     errores = 0
  43.     for i in range(len(palabra)):
  44.         if palabra[i] != lema[i]:
  45.             errores = errores + 1
  46.     return errores
  47.  
  48.  
  49. main()

He adjuntado el lemario en dos archivos para que quepan en el mensaje (el tamaño máximo es de 200kb)

Un saludo.
« Última modificación: 27 de Abril de 2022, 16:32:18 por Picuino »

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Corrector ortográfico propio con Python.-
« Respuesta #6 en: 27 de Abril de 2022, 18:10:17 »
Hola Picuino ¿ cómo están?.
Me dejaste sin palabras, gracias mil gracias, no lo probé, pero
viniendo de vos seguramente funciona a la perfección.-
Ahora me toca pasarlo a un editor de texto que estoy
programando.-
Aprovecho para consultarte, ¿puedo evacuar mis dudas
con aplicaciones de escritorio(biblioteca tkinter)?.-

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Corrector ortográfico propio con Python.-
« Respuesta #7 en: 28 de Abril de 2022, 07:20:34 »
No conozco bien la biblioteca tkinter, pero intentaré ayudarte en lo que pueda.
Un saludo.


 

anything