Corrección de palabras usando NLTK en Python

nltk significa Natural Language Toolkit y es un potente paquete que consta de bibliotecas y programas que se pueden utilizar para el procesamiento estadístico del lenguaje natural. Las bibliotecas pueden implementar tokenización, clasificación, análisis, derivación, etiquetado, razonamiento semántico, etc. Este conjunto de herramientas puede hacer que las máquinas entiendan el lenguaje humano. 

Vamos a utilizar dos métodos para la corrección ortográfica. Cada método toma una lista de palabras mal escritas y sugiere la palabra correcta para cada palabra incorrecta. Intenta encontrar una palabra en la lista de ortografías correctas que tenga la distancia más corta y la misma letra inicial que la palabra mal escrita. Luego devuelve la palabra que coincide con los criterios dados. Los métodos se pueden diferenciar en función de la medida de distancia que utilizan para encontrar la palabra más cercana. El paquete ‘words’ de nltk se utiliza como diccionario de palabras correctas.

Método 1: Uso del método de distancia Jaccard

La distancia de Jaccard, lo opuesto al coeficiente de Jaccard, se utiliza para medir la disimilitud entre dos conjuntos de muestras. Obtenemos la distancia de Jaccard restando el coeficiente de Jaccard de 1. También podemos obtenerla dividiendo la diferencia entre los tamaños de la unión y la intersección de dos conjuntos por el tamaño de la unión. Trabajamos con Q-gramas (estos son equivalentes a N-gramas) que se denominan caracteres en lugar de tokens. La distancia Jaccard viene dada por la siguiente fórmula.

Dj(A,B)= 1-J(A,B)= (|A ∪ B|-|A ∩ B|) / |A ∪ B|

Implementación paso a paso

Paso 1: Primero, instalamos e importamos la suite nltk y la métrica de distancia Jaccard que discutimos antes. Los ‘ngramas’ se utilizan para obtener un conjunto de palabras simultáneas en una ventana determinada y se importan del paquete nltk.utils.

Python3

# importing the nltk suite 
import nltk
  
# importing jaccard distance
# and ngrams from nltk.util
from nltk.metrics.distance import jaccard_distance
from nltk.util import ngrams

Paso 2: ahora, descargamos el recurso ‘palabras’ (que contiene la lista de palabras con la ortografía correcta) del descargador nltk, lo importamos a través de nltk.corpus y lo asignamos a correct_words.

Python3

# Downloading and importing
# package 'words' from nltk corpus
nltk.download('words')
from nltk.corpus import words
  
  
correct_words = words.words()

Paso 3: Definimos la lista de palabras_incorrectas para las que necesitamos la ortografía correcta. Luego ejecutamos un bucle para cada palabra en la lista de palabras incorrectas en el que calculamos la distancia de Jaccard de la palabra incorrecta con cada palabra de ortografía correcta que tiene la misma letra inicial en forma de bigramas de caracteres . Luego los ordenamos en orden ascendente para que la distancia más corta esté en la parte superior y extraemos la palabra correspondiente y la imprimimos.

Python3

# list of incorrect spellings
# that need to be corrected 
incorrect_words=['happpy', 'azmaing', 'intelliengt']
  
# loop for finding correct spellings
# based on jaccard distance
# and printing the correct word
for word in incorrect_words:
    temp = [(jaccard_distance(set(ngrams(word, 2)),
                              set(ngrams(w, 2))),w)
            for w in correct_words if w[0]==word[0]]
    print(sorted(temp, key = lambda val:val[0])[0][1])

Producción:

Captura de pantalla de salida después de implementar Jaccard Distance para encontrar palabras ortográficas correctas

Método 2: Uso del método de edición de distancia

Editar distancia mide la disimilitud entre dos strings al encontrar el número mínimo de operaciones necesarias para transformar una string en la otra. Las transformaciones que se pueden realizar son:

  • Insertar un nuevo carácter: 
bat -> bats (insertion of 's')
  • Eliminación de un carácter existente. 
care -> car (deletion of 'e')
  • Sustituir un personaje existente.
bin -> bit (substitution of n with t)
  • Transposición de dos caracteres consecutivos existentes. 
sing -> sign (transposition of ng to gn)

Implementación paso a paso

Paso 1: En primer lugar, instalamos e importamos la suite nltk.

Python3

# importing the nltk suite 
import nltk
  
# importing edit distance  
from nltk.metrics.distance  import edit_distance

Paso 2: ahora, descargamos el recurso ‘palabras’ (que contiene la ortografía correcta de las palabras) del descargador nltk, lo importamos a través de nltk.corpus y lo asignamos a correct_words.

Python3

# Downloading and importing package 'words'
nltk.download('words')
from nltk.corpus import words
correct_words = words.words()

Paso 3: Definimos la lista de palabras_incorrectas para las que necesitamos la ortografía correcta. Luego ejecutamos un ciclo para cada palabra en la lista de palabras incorrectas en el que calculamos la distancia de edición de la palabra incorrecta con cada palabra de ortografía correcta que tiene la misma letra inicial. Luego los ordenamos en orden ascendente para que la distancia más corta esté en la parte superior y extraemos la palabra correspondiente y la imprimimos.

Python3

# list of incorrect spellings
# that need to be corrected 
incorrect_words=['happpy', 'azmaing', 'intelliengt']
  
# loop for finding correct spellings
# based on edit distance and
# printing the correct words
for word in incorrect_words:
    temp = [(edit_distance(word, w),w) for w in correct_words if w[0]==word[0]]
    print(sorted(temp, key = lambda val:val[0])[0][1])

Producción:

Captura de pantalla de salida después de implementar Editar distancia para encontrar palabras ortográficas correctas

Publicación traducida automáticamente

Artículo escrito por rahulsinghal1904 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *