elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Bloc de notas con corrector ortográfico propio.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bloc de notas con corrector ortográfico propio.  (Leído 4,712 veces)
El mas antiguo

Desconectado Desconectado

Mensajes: 103



Ver Perfil
Bloc de notas con corrector ortográfico propio.
« en: 30 Agosto 2022, 17:47 pm »

Estoy consiente que esto no tiene mucho que ver con la esencia del foro,
pero necesito de esas mentes brillantes y criteriosas de este para darle
forma a mi proyecto de "bloc de notas" con corrector ortográfico.-
Lo que llevo hecho:
1): Si la palabra está bien escrita(está en el diccionario, todo ok)
2): De no ser así busco una a una las letras(con igual longitud) y si hay 1 o 2
      diferencias las incluyo para mostrar posibles palabras correctas.-
Hasta hay está casi correcto, casi porque por momentos aparecen
20 o más coincidencia y no se pueden ni mostrar.-
Pero las dudas me las da las hache al comienzo y en el interior de las palabras.-
¿alguna idea?.-

Mi idea con las haches:
Al inicio: "hirvieron", si la palabra a corregir es "irvieron" fácil, busco palabras en el
diccionario que tengan una letra más y comparo "irvieron" con "irvieron"
y la agrego con un error, pero que pasa si la palabra a corregir es "irbieron"
(lo mando a la primaria, jajajajaj).-
Con una hache intermedia "albahaca" comparo "alba" y "aca" y si coinciden la agrego.-

Les dejo lo que llevo hecho, si alguien desea ayudarme muchas gracias...
Aclaro que tengo conocimiento de la existencia de las bibliotecas "autocorrect"
"pyspellchecker" "textblob" es para practicar e ir aprendiendo el lenguaje más
en profundidad.-

Código
  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(f'\nLa palabra "{palabra}" existe en el diccionario y es correcta.\n')
  10.        else:
  11.           parecidos = buscar_parecidos(palabra, lemario)
  12.           if len(parecidos) >= 1 and len(parecidos) <= 10:
  13.                print(f'Palabras parecidas:\n{parecidos}\n')
  14.           else:
  15.               print("Posible faltante de hache...")
  16.  
  17.  
  18. def leer_lemario():
  19.    lemario = []
  20.    with codecs.open('Ortografia.txt', 'r', encoding='utf-8') as archivo:
  21.        for linea in archivo:
  22.            linea = linea.strip()
  23.            if len(linea) > 0:
  24.                lemario.append(linea)
  25.    return lemario
  26.  
  27.  
  28. def buscar_palabra(palabra, lemario):
  29.    for lema in lemario:
  30.        if palabra == lema:
  31.            return True
  32.    return False
  33.  
  34.  
  35. def buscar_parecidos(palabra, lemario):
  36.    parecidos = []
  37.    for lema in lemario:
  38.        if len(lema) == len(palabra) and letras_distintas(lema, palabra) <= 2:
  39.            parecidos.append(lema)
  40.    return parecidos
  41.  
  42.  
  43. def letras_distintas(palabra, lema):
  44.    errores = 0
  45.    for i in range(len(palabra)):
  46.        if palabra[i] != lema[i]:
  47.            errores = errores + 1
  48.    return errores
  49.  
  50.  
  51. main()


Slds. Daniel ☕☕☕


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
Re: Bloc de notas con corrector ortográfico propio.
« Respuesta #1 en: 30 Agosto 2022, 20:22 pm »

Me gustaría colaborar pero no entiendo bien cuales son los problemas si es que hay... Del code ni hablar.

Para que aparezcan más palabras de las que entran en pantalla deberías hacer aparecer un menú con barra de desplazamiento. Tal vez no puedes porque usas un programa o función que no puedes configurar, no sé.

Las palabras con 1 letra de diferencia deberían aparecer antes de las que tienen 2.

Se te va a complicar, pero en lo posible deberías tener en cuenta que en ciertos casos, por más que las palabras estén bien escritas, la oración está mal. Si corriges esas cosas, bueno, tal vez ya no sería un simple corrector ortográfico sino uno de sintáxis o no sé qué, y no quieras tanto, pero es importante. Por ejemplo cuando dices "Hasta hay está casi correcto", es un error porque es "Hasta ahí está casi correcto". También hay otro tipo de errores más complicados como este:
Citar
De no ser así busco una a una las letras(con igual longitud) y si hay 1 o 2
      diferencias las incluyo para mostrar posibles palabras correctas.
...o al menos yo no puedo entender eso de "con igual longitud" ¿no querrás decir "palabras" en vez de "letras"?

Citar
Pero las dudas me las da las hache al comienzo y en el interior de las palabras.-
¿alguna idea?.-
Según lo que has dicho no veo el problema. Es igual, buscas las palabras más parecidas y ya está...
Tal vez es por eso de "con igual longitud", es claro que deberías buscar palabras lo más parecidas posibles, no limitándote a que sean de igual longitud.

Citar
Con una hache intermedia "albahaca" comparo "alba" y "aca" y si coinciden la agrego.-
La palabra está bien escrita, no entiendo qué corrección estás haciendo... Tal vez es al revés a como lo interpreto, sería que tienes "alba aca" y lo quieres corregir a "albahaca", lo veo complicado... Creo que "aca" no existe, es "acá", lo obvio es que el programa te daría esa posible corrección, pero para darte "albahaca" tendría que "mirar" la palabra anterior, tendrías que decirle a la computadora que analice las palabras como si fueran 1. "Albaaca". Se me ocurre eso.

Si pones el code en pseudocode quizá pueda ayudarte más. Y de paso entender qué has hecho, jeje.


« Última modificación: 30 Agosto 2022, 20:26 pm por Tachikomaia » En línea

reymosquito

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Bloc de notas con corrector ortográfico propio.
« Respuesta #2 en: 30 Agosto 2022, 20:51 pm »

veamos:
1) todo esto ya está muy planteado en la red hace mucho, para el corrector se usa la distancia de Levenshtein, es solo cuestión de buscar, hay implementación en python y son pocas líneas.
2)Si hay muchas coincidencias y están en una lista las mostrás de a una o la cantidad que elijas.
3)está bien querer aprender un lenguaje ¿pero inventar la rueda para ello?
4)para aprender enfocate en algo práctico y actual, te dría aprende numpy,pandas,simpy matpliolib etc. y para entornos gráficos pyqt, tkinter es lo más básico.
5)te parecen críticas, pero parece que te falta información.

Edito:
como tengo tiempo antes de irme te muestro un código:
Código
  1. #-*- coding:utf-8 -*-
  2. import re
  3. from collections import Counter
  4.  
  5. WORDS = Counter()
  6. patron = re.compile(r'\w+')
  7. with open('Ortografia.txt') as diccionario:
  8.    for text in diccionario:
  9.        WORDS.update(patron.findall(text.lower()))
  10. N=sum(WORDS.values())
  11.  
  12.  
  13. def h(word):
  14.    candidates = (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
  15.    return list(candidates)
  16.  
  17. def known(words):
  18.    return set(w for w in words if w in WORDS)
  19.  
  20. def edits1(word):
  21.    letters = 'abcdefghijklmnñopqrstuvwxyz'
  22.    splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
  23.    deletes = [L + R[1:] for L, R in splits if R]
  24.    transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R) > 1]
  25.    replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
  26.    inserts = [L + c + R for L, R in splits for c in letters]
  27.    return set(deletes + transposes + replaces + inserts)
  28.  
  29. def edits2(word):
  30.    return (e2 for e1 in edits1(word) for e2 in edits1(e1))
  31.  
  32. palabra = "albaaca"
  33. lista = h(palabra)
  34.  
  35. print(lista)
  36.  

por supuesto que ahora depende de tu archivo de texto con las palabras, en la red hay varios en texto plano con el listado de la RAE

Después si querés verificás el largo de la lista y elegís cuantas mostrar, como dije tema muy  facil.
« Última modificación: 30 Agosto 2022, 21:52 pm por reymosquito » En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 103



Ver Perfil
Re: Bloc de notas con corrector ortográfico propio.
« Respuesta #3 en: 30 Agosto 2022, 22:21 pm »

Gracias a ambos por ocuparse, Tachikomaia dame un rato para aclararte
las dudas, estoy entusiasmado con la librería "enchant" con la "h" funciona
maravilloso, con el resto hay algunas cosas para refinar, dejo lo que llevo hecho.-
!!!Sorpresa Rey!!!, bueno expongo igual mi código.-

Código
  1. import enchant
  2. import codecs
  3.  
  4. def leer_lemario():
  5.    lemario = []
  6.    with codecs.open('Ortografia.txt', 'r', encoding='utf-8') as archivo:
  7.        for linea in archivo:
  8.            linea = linea.strip()
  9.            if len(linea) > 0:
  10.                lemario.append(linea)
  11.    return lemario
  12.  
  13.  
  14. def main():
  15.    lemario = leer_lemario()
  16.    palabra = True
  17.    while palabra:
  18.        palabra = input("Ingrese la palabra a corregir...: ")
  19.        if buscar_palabra(palabra, lemario) == True:
  20.            print(f'\nLa palabra "{palabra}" existe en el diccionario y es correcta.\n')
  21.        else:
  22.            resultado = diferencias(lemario, palabra)        
  23.            if len(resultado) >= 1:
  24.                print(resultado)
  25.  
  26. def buscar_palabra(palabra, lemario):
  27.    for lema in lemario:
  28.        if palabra == lema:
  29.            return True
  30.    return False
  31.  
  32. def diferencias(lemario, palabra):
  33.    cantidad = []
  34.    for lem in lemario:
  35.        difer = enchant.utils.levenshtein(lem, palabra)
  36.        if difer >=1 and difer <=2:
  37.            cantidad.append(lem)
  38.  
  39.    return cantidad
  40.  
  41. main()
           

Slds. Daniel ☕☕☕
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Corrector ortografico « 1 2 3 »
Sugerencias y dudas sobre el Foro
d(-_-)b 23 15,216 Último mensaje 9 Diciembre 2007, 20:21 pm
por Ragnarok
problemas con el corrector ortografico? [SOLUCIONADO]
Sugerencias y dudas sobre el Foro
Ferсhu 4 3,604 Último mensaje 19 Febrero 2008, 03:09 am
por sirdarckcat
corrector ortográfico Abiword 2.8
GNU/Linux
Joe Fraddy 5 9,126 Último mensaje 27 Noviembre 2010, 12:17 pm
por Exe U.
Corrector ortográfico ¿Se puede realizar en VB.NET?
.NET (C#, VB.NET, ASP)
Crazy.sx 2 8,848 Último mensaje 10 Abril 2013, 05:35 am
por Crazy.sx
Corrector ortografico
Scripting
Ur1cchio 0 2,134 Último mensaje 1 Octubre 2015, 20:21 pm
por Ur1cchio
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines