Programar Juegos Arcade
con Python y Pygame

Lab 15: Corrector Ortográfico

En este taller te mostraremos como crear un corrector ortográfico. Para prepararlo, vete a:
ProgramArcadeGames.com/index.php?lang=es&chapter=examples list
...y descarga los siguientes archivos. También los puedes encontrar en la sección “Ejemplos de Búsquedas y Ordenamientos”.

Si estás trabajando con el repositorio de BitBucket, entonces, los archivos los encontrarás allí y no tendrás que descargarlos.

15.1 Requisitos

Escribe un sencillo programa en Python que compruebe la ortografía del primer capítulo de “Alicia en el País de las Maravillas.” Utiliza primero una búsqueda lineal y luego una binaria. Imprime el número de línea junto con la palabra que no existe en el diccionario.

Sigue exactamente los siguientes pasos. Si no sabes como completar uno de ellos, pregunta antes de seguir avanzando al siguiente.

15.2 Pasos a completar:

  1. Si trabajas con la plantilla de BitBucket template, salta hasta el punto 6.
  2. Encuentra o créate una carpeta para tu proyecto.
  3. Descarga el diccionario a esa carpeta.
  4. Descarga las 200 primeras líneas de Alicia en el País de las Maravillas a tu carpeta.
  5. Abre un archivo nuevo de Python para tu proyecto.
  6. Es necesario separar las palabras del cuento para que puedan ser comprobadas individualmente. También es necesario eliminar todos los signos de puntuación y espacios en blanco extras. De momento, con lo que llevamos del libro, no existe una forma sencilla de hacer esto. El código para conseguirlo es corto, pero una explicación completa del mismo está más allá del objetivo de esta clase. Incluye la siguiente función en tu programa. Recuerda, las definiciones de funciones deben ir en la parte superior de tu programa, justo después de los “import.” A esta función la llamaremos en el último paso.
    import re
    
    # Esta función toma una línea de texto y devuelve
    # una lista de las palabras en la línea.
    def separar_linea(linea):
        return re.findall('[A-Za-z]+(?:\'[A-Za-z]+)?',linea)
    
    Este código emplea expresiones regulares para separar el texto. Las expresiones regulares son muy potentes y relativamente fáciles de aprender. Si quieres aprender más sobre ellas mira:
    http://regexone.com/
  7. Pasa el archivo dictionary.txt a un array. Revisa el capítulo sobre Búsquedas o mira searching_example_es.py para que veas un ejemplo de código de cómo hacer esto. Esto no tiene nada que ver con comandos import, bibliotecas o módulos. No llames al diccionario con algo como lista_palabras o algo así de genérico, ya que podría llevarnos a confusión. Llámalo dictionario_lista o similar.
  8. Cierra el archivo.
  9. Imprime --- Búsqueda Lineal ---
  10. Abre el archivo AliceInWonderLand200.txt
  11. No vamos a pasar el cuento a una lista. No vayas a hacer una lista nueva como hicimos con el diccionario.
  12. Empieza un bucle for que itere a través de cada línea.
  13. llama a la función separar_linea para que separe las líneas de texto que son leídas. Almacena la lista que devuelve la función en una nueva variable llamada palabras. Recuerda, con solo llamar a la función no hacemos nada de utilidad. Necesitas asignarle a una variable (palabras) el resultado. Si has olvidado como capturar el valor devuelto (return) por una función, vuelve al capítulo de funciones y encuéntralo.
  14. Empieza un bucle anidado for para que itere a través de cada palabra de la línea. Este bucle debería ir dentro del bucle for que itera a través de cada línea del archivo. (Un bucle para cada línea, y otro bucle para cada palabra en esa línea.)
  15. Usando una búsqueda lineal, confronta la palabra actual con las palabras que hay en el diccionario. Mírate el capítulo sobre búsquedas o el ejemplo searching_example_es.py para que te hagas una idea. La búsqueda lineal son solo tres líneas de código. Convierte a mayúsculas la palabra confrontada con las del diccionario. Para ello, en tu bucle while, basta con usar palabra.upper() en lugar de palabra para la clave. La búsqueda lineal existirá dentro del bucle for creado en el paso anterior. Estamos iterando a través de cada palabra del diccionario, buscando la palabra actual en la línea que acabamos de leer.
  16. Si la palabra extraña no aparece en el diccionario, imprímela. No vayas a imprimir nada si la encuentras, el resultado podría ser muy molesto
  17. Cierra el archivo.
  18. Asegúrate de que el programa se ejecuta correctamente antes de seguir avanzando.
  19. Crea una nueva variable que lleve la cuenta de la línea sobre la que te encuentras. Imprime ese número de línea junto con la palabra mal escrita encontrada en el paso anterior.
  20. Asegúrate de que el programa se ejecuta correctamente antes de seguir avanzando.
  21. Imprime --- Búsqueda Binaria ---
  22. La búsqueda lineal toma bastante tiempo hasta completarse. Para inhabilitarla temporalmente, podrías comentarla usando comillas triples al principio y final del código. Pregunta si no estás segura de cómo hacerlo.
  23. Repite el mismo patrón de código anterior, pero esta vez usando una búsqueda binaria. Gran parte del código de la búsqueda lineal puedes copiarlo, sustituyendo tan solo, las líneas de código que representan la búsqueda lineal con las de la búsqueda binaria.
  24. Observa la diferencia de velocidad entre los dos tipos de búsqueda.
  25. Comprueba que la búsqueda lineal vuelva a estar habilitada (si es que fue inhabilitada mientras probabas la búsqueda binaria.)
  26. Sube el programa final. Observación: si estás usando el procedimiento de BitBucket, haz un “commit” por separado del diccionario y de la historia. Esto permite hacer un mejor feedback línea a línea.

15.3 Ejemplo de Ejecución

--- Búsqueda Lineal ---
Línea 3  posible palabra mal escrita: Lewis
Línea 3  posible palabra mal escrita: Carroll
Línea 46  posible palabra mal escrita: labelled
Línea 46  posible palabra mal escrita: MARMALADE
Línea 58  posible palabra mal escrita: centre
Línea 59  posible palabra mal escrita: learnt
Línea 69  posible palabra mal escrita: Antipathies
Línea 73  posible palabra mal escrita: curtsey
Línea 73  posible palabra mal escrita: CURTSEYING
Línea 79  posible palabra mal escrita: Dinah'll
Línea 80  posible palabra mal escrita: Dinah
Línea 81  posible palabra mal escrita: Dinah
Línea 89  posible palabra mal escrita: Dinah
Línea 89  posible palabra mal escrita: Dinah
Línea 149  posible palabra mal escrita: flavour
Línea 150  posible palabra mal escrita: toffee
Línea 186  posible palabra mal escrita: croquet
--- Búsqueda Binaria ---
Línea 3  posible palabra mal escrita: Lewis
Línea 3  posible palabra mal escrita: Carroll
Línea 46  posible palabra mal escrita: labelled
Línea 46  posible palabra mal escrita: MARMALADE
Línea 58  posible palabra mal escrita: centre
Línea 59  posible palabra mal escrita: learnt
Línea 69  posible palabra mal escrita: Antipathies
Línea 73  posible palabra mal escrita: curtsey
Línea 73  posible palabra mal escrita: CURTSEYING
Línea 79  posible palabra mal escrita: Dinah'll
Línea 80  posible palabra mal escrita: Dinah
Línea 81  posible palabra mal escrita: Dinah
Línea 89  posible palabra mal escrita: Dinah
Línea 89  posible palabra mal escrita: Dinah
Línea 149  posible palabra mal escrita: flavour
Línea 150  posible palabra mal escrita: toffee
Línea 186  posible palabra mal escrita: croquet

You are not logged in. Log in here and track your progress.