PNL simple en Python con TextBlob: detección de N-gramos

     

    Introducción

    El crecimiento constante de datos en Internet crea una demanda de una herramienta que pueda procesar información textual de una manera más rápida y sin esfuerzo por parte del usuario común.

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

    TextBlob es una gran biblioteca ligera para una amplia variedad de tareas de PNL.

    En este tutorial, arrojaremos algo de luz sobre 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, estos elementos no significan necesariamente cadenas de palabras, también pueden ser fonemas, sílabas o letras, según lo que desee lograr.

    Sin embargo, en el procesamiento del lenguaje natural se refiere más comúnmente a los N-gramas como cadenas de palabras, donde n representa la cantidad de palabras que está buscando.

    Por lo general, se distinguen los siguientes tipos de N-gramos:

    • Unigrama – Un N-gram con solo una cadena adentro (por ejemplo, puede ser una palabra única – YouTube o TikTok de una oración determinada, por ejemplo, YouTube está lanzando un nuevo formato de video de formato corto que se parece muchísimo a TikTok).
    • 2 gramos 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 probablemente será un resultado de búsqueda de bigramas en un determinado corpus de textos (y no video de formato, video de formato corto como el orden de las palabras sigue siendo el mismo).
    • 3 gramos o Trigrama – 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.

    N -grams encontró su aplicación principal en un área de modelos lingüísticos probabilísticos. A medida que estiman la probabilidad del siguiente elemento en una secuencia de palabras.

    Este enfoque para el modelado de lenguaje asume una estrecha relación entre la posición de cada elemento en una cadena, calculando la ocurrencia de la siguiente palabra con respecto a la anterior. En particular, el modelo de N-gramos 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 basándose en las dos palabras anteriores como N-1 = 2.

    Los otros casos de implementación de modelos 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 determinar 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-gramos en Python, primero tendrá que instalar el paquete TexBlob. Nota que esta biblioteca es aplicable tanto para Python 2 como para Python 3.

    También queremos descargar los corpus de texto necesarios para que funcione:

    $ 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-gramos 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:

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

    Hemos creado un sentence cadena que contiene la oración que queremos analizar. Luego pasamos esa cadena al TextBlob constructor, inyectándolo en el TextBlob instancia en la que ejecutaremos operaciones:

    ngram_object = TextBlob(sentence)
    

    Ahora, ejecutemos la detección de N-gram. Para empezar, hagamos una detección de 2 gramos. Esto es especifico en la lista de argumentos del ngrams() Llamada de función:

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

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

    [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

    A pesar de la naturaleza simple de esta biblioteca de Python, TextBlob también proporciona una variedad de funciones avanzadas para el análisis. La mayoría de las veces, no trabajamos con frases únicas para la detección de N-gramos. Es mucho más común trabajar con documentos, artículos o corporas más grandes.

    En nuestro siguiente ejemplo, usaremos un artículo del portal de noticias de CNBC sobre Bill Gates.

    Creemos un documento de texto y llamémoslo como algo parecido a Input.txt para el próximo análisis:

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

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

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

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

    [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:

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

    Un fragmento de la salida:

    [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 PNL. En este artículo, hemos repasado cómo realizar la detección de N-Gram en Python usando TextBlob.

     

    Etiquetas:

    Deja una respuesta

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