PNL simple en Python con TextBlob: Detección de N-Grams

En este tutorial, repasaremos la teoría y los ejemplos sobre cómo realizar la detección de N-Grams en Python usando TextBlob para tareas y proyectos de NLP.

Introducción

El crecimiento constante de datos en Internet genera una demanda de herramientas que procesen información textual.

Además, es muy importante que este instrumento de análisis de texto pueda implementar soluciones para tareas de PNL de bajo y alto nivel, como contar frecuencias de palabras, calcular el análisis de sentimientos de los textos o detectar patrones en las relaciones entre palabras.

TextBlob es una gran biblioteca liviana para una amplia variedad de tareas de NLP.

En este tutorial, arrojaremos algo de luz cómo realizar la detección de N-Grams en Python usando TextBlob.

¿Qué son los N-Gramos?

Los N-gramas representan una secuencia continua de N elementos de un conjunto dado de textos. En términos generales, dichos elementos no representan necesariamente cadenas de palabras, también pueden ser fonemas, sílabas o letras, según lo que desee lograr.

Sin embargo, en Procesamiento del lenguaje natural se suele hacer referencia a los N-gramas como cadenas de palabras, donde n representa la cantidad de palabras que está buscando.

Se suelen distinguir los siguientes tipos de N-gramas:

  • Unigrama: un N-grama con solo una cadena dentro (por ejemplo, puede ser una palabra única - YouTube o TikTok de una oración dada, por ejemplo, YouTube está lanzando un nuevo formato de video de formato corto se parece mucho a TikTok).

  • 2-gram o Bigram - Por lo general, una combinación de dos cadenas o palabras que aparecen en un documento: video de formato corto o formato de video será probablemente un resultado de búsqueda de bigramas en un cierto corpus de textos (y no formato de video, video de formato corto ya que el orden de las palabras sigue siendo el mismo).

  • 3-gram o Trigram: un N-gram que contiene hasta tres elementos que se procesan juntos (por ejemplo, formato de video de formato corto o nuevo video de formato corto), etc.

Los N-gramas encontraron su aplicación principal en un área de modelos de lenguaje probabilístico. A medida que estiman la probabilidad del siguiente elemento en una secuencia de palabras.

Este enfoque para el modelado del lenguaje asume una estrecha relación entre la posición de cada elemento en una cadena, calculando la aparición de la siguiente palabra con respecto a la anterior. En particular, el modelo N-gram determina la probabilidad de la siguiente manera: N-1.

Por ejemplo, un modelo de trigrama (con N = 3) predecirá la siguiente palabra en una cadena en función de las dos palabras anteriores como N-1 = 2.

Los otros casos de implementación de modelos de N-gramas en la industria pueden ser la detección de plagio, donde los N-gramas obtenidos de dos textos diferentes se comparan entre sí para averiguar el grado de similitud de los documentos analizados.

Detección de N-gram en Python usando TextBlob

Análisis de una oración

Para comenzar a detectar los N-gramas en Python, primero deberá instalar el paquete TexBlob. Tenga en cuenta que esta biblioteca es aplicable tanto para Python 2 como para Python 3.

También querremos descargar el corpus de texto requerido para que funcione con:

1
2
$ pip install -U textblob 
$ python -m textblob.download_corpora

Una vez que se configura el entorno, está listo para cargar el paquete y calcular N-gramas en una oración de muestra. Al principio, veremos los N-gramas en la cita de M. Mullenweg: La tecnología es mejor cuando une a las personas.

Empecemos:

1
2
3
4
from textblob import TextBlob

# Sample sentence for N-gram detection
sentence = "Technology is best when it brings people together"

Hemos creado una cadena sentence que contiene la oración que queremos analizar. Luego, pasamos esa cadena al constructor TextBlob, inyectándola en la instancia de TextBlob en la que ejecutaremos las operaciones:

1
ngram_object = TextBlob(sentence)

Ahora, ejecutemos la detección de N-gramas. Para empezar, hagamos una detección de 2 gramos. Esto se especifica en la lista de argumentos de la llamada a la función ngrams():

1
2
ngrams = ngram_object.ngrams(n=2) # Computing Bigrams
print(ngrams) 

La función ngrams() devuelve una lista de tuplas de n palabras sucesivas. En nuestra oración, un modelo de bigrama nos dará el siguiente conjunto de cadenas:

1
2
3
4
5
6
7
[WordList(['Technology', 'is']), 
WordList(['is', 'best']), 
WordList(['best', 'when']), 
WordList(['when', 'it']), 
WordList(['it', 'brings']), 
WordList(['brings', 'people']), 
WordList(['people', 'together'])]

Análisis de documentos {#análisis de documentos}

A pesar de la naturaleza simple de esta biblioteca de Python, TextBlob también proporciona una gama de funciones avanzadas para el análisis. La mayoría de las veces, no estamos trabajando con oraciones individuales para la detección de N-gramas. Es mucho más común trabajar con documentos, artículos o corpus más grandes.

En nuestro próximo ejemplo, usaremos un artículo de el portal de noticias de la CNBC sobre Bill Gates.

Vamos a crear un documento de texto y llamarlo algo parecido a Input.txt para el siguiente análisis:

1
2
3
4
import sys

# Opening and reading the `Input.txt` file
corpus = open("Input.txt").read()

Luego, como de costumbre, crearemos una instancia de TextBlob, pasando el corpus al constructor, y ejecutaremos la función ngrams():

1
2
3
ngram_object = TextBlob(corpus)
trigrams = ngram_object.ngrams(n=3) # Computing Trigrams
print(trigrams) 

Esto imprimirá los trigramas del contenido que hemos proporcionado. Sin embargo, tenga en cuenta que la salida puede diferir según el enfoque que aplique para manejar los signos de puntuación:

1
2
3
4
5
6
[WordList(['Bill', 'Gates', 'says']), 
WordList(['Gates', 'says', 'that']),
WordList(['says', 'that', 'antitrust']), 
WordList(['that', 'antitrust', 'regulators']),
WordList(['antitrust', 'regulators', 'should'])
<...>]

En comparación, el análisis de Bigram para el artículo dado nos proporcionará una lista diferente:

1
2
3
ngram_object = TextBlob(corpus)
Bigram = ngram_object.ngrams(n=) # Computing Bigrams
print(Bigram) 

Un fragmento de la salida:

1
2
3
4
5
6
[WordList(['Bill', 'Gates']),
WordList(['Gates', 'says']),
WordList(['says', 'that']),
WordList(['that', 'antitrust']),
WordList(['antitrust', 'regulators'])
<...>]

Conclusión

La detección de N-Grams es una tarea simple y común en muchos proyectos de NLP. En este artículo, hemos repasado cómo realizar la detección de N-Gram en Python usando TextBlob. TextBlob*.