PNL simple en Python con TextBlob: tokenización

    Introducción

    La cantidad de datos textuales en Internet ha aumentado significativamente en las últimas décadas. No cabe duda de que el procesamiento de esta cantidad de información debe ser automatizado y el TextBlob package es una de las formas bastante simples de realizar NLP – Natural Language Processing.

    Proporciona una API simple para sumergirse en tareas comunes de procesamiento de lenguaje natural (NLP), como etiquetado de parte del discurso, extracción de frases nominales, tokenización, análisis de sentimientos, clasificación, traducción y más.

    No se necesitan requisitos previos técnicos especiales para emplear esta biblioteca. Por ejemplo, TextBlob es aplicable tanto para Python 2 como para 3. En caso de que no tenga ninguna información textual para el proyecto en el que desea trabajar, TextBlob proporciona los corpus necesarios del NLTK base de datos.

    Instalación de TextBlob

    Comencemos instalando TextBlob y los corpus NLTK:

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

    Nota: Este proceso puede llevar algún tiempo debido a la gran cantidad de algoritmos y corpus que contiene esta biblioteca.

    ¿Qué es la tokenización?

    Antes de profundizar en el campo de la PNL, también debería poder reconocer estos términos clave:

    • Cuerpo (o corpora en plural) – es simplemente una cierta colección de datos del lenguaje (por ejemplo, textos). Los corpus se utilizan normalmente para entrenar diferentes modelos de clasificación de texto o análisis de sentimientos, por ejemplo.
    • Simbólico – es una cadena final que se separa del texto principal, o en otras palabras, es una salida de tokenización.

    ¿Qué es la tokenización en sí?

    La tokenización o segmentación de palabras es un proceso simple de separar oraciones o palabras del corpus en pequeñas unidades, es decir, tokens.

    Una ilustración de esto podría ser la siguiente oración:

    • Entrada (corpus): El mal que hacen los hombres vive después de ellos
    • Salida (tokens): | El | maldad | que | hombres | hacer | vidas | después | ellos |

    Aquí, la oración de entrada se tokeniza sobre la base de espacios entre palabras. También puede tokenizar caracteres de una sola palabra (por ejemplo, manzana de manzana) o separar oraciones de un texto.

    La tokenización es una de las etapas básicas y cruciales del procesamiento del lenguaje. Transforma material textual no estructurado en datos. Esto podría aplicarse aún más en el desarrollo de varios modelos de traducción automática, optimización de motores de búsqueda o diferentes consultas comerciales.

    Implementación de tokenización en código

    En primer lugar, es necesario establecer una TextBlob object y defina un corpus de muestra que será tokenizado más adelante. Por ejemplo, intentemos tokenizar una parte del poema si está escrito por R. Kipling:

    from textblob import TextBlob
    
    # Creating the corpus
    corpus=""'If you can force your heart and nerve and sinew to serve your turn long after they are gone. And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
    '''
    

    Una vez que se crea el objeto, debe pasarse como argumento al TextBlob constructor:

    blob_object = TextBlob(corpus)
    

    Una vez construido, podemos realizar varias operaciones en este blob_object. Ya contiene nuestro corpus, categorizado hasta cierto punto.

    Tokenización de palabras

    Finalmente, para obtener las palabras tokenizadas, simplemente recuperamos el words atributo a lo creado blob_object. Esto nos da una lista que contiene Word objetos, que se comportan de manera muy similar a str objetos:

    from textblob import TextBlob
    
    corpus=""'If you can force your heart and nerve and sinew to serve your turn long after they are gone. And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
    '''
    
    blob_object = TextBlob(corpus)
    
    # Word tokenization of the sample corpus
    corpus_words = blob_object.words
    # To see all tokens
    print(corpus_words)
    # To count the number of tokens
    print(len(corpus_words))
    

    Los comandos de salida deberían proporcionarle lo siguiente:

    ['If', 'you', 'can', 'force', 'your', 'heart', 'and', 'nerve', 'and', 'sinew', 'to', 'serve', 'your', 'turn', 'long', 'after', 'they', 'are', 'gone', 'and', 'so', 'hold', 'on', 'when', 'there', 'is', 'nothing', 'in', 'you', 'except', 'the', 'Will', 'which', 'says', 'to', 'them', 'Hold', 'on']
    38
    

    Vale la pena señalar que este enfoque tokeniza palabras usando SPACE como carácter delimitador. Podemos cambiar este delimitador, por ejemplo, a un TAB:

    from textblob import TextBlob
    from nltk.tokenize import TabTokenizer
    
    corpus=""'If you can force your heart and nerve and sinew to serve your turn long after they are gone. 	And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
    '''
    
    tokenizer = TabTokenizer()
    blob_object = TextBlob(corpus, tokenizer = tokenizer)
    
    # Word tokenization of the sample corpus
    corpus_words = blob_object.tokens
    # To see all tokens
    print(corpus_words)
    

    Tenga en cuenta que hemos agregado un TAB después de la primera oración aquí. Cómo, el corpus de las palabras se parece a:

    ['If you can force your heart and nerve and sinew to serve your turn long after they are gone.','And so hold on when there is nothing in you except the Will which says to them: 'Hold on!']
    

    nltk.tokenize también contiene otras opciones de tokenización. Por defecto, usa el SpaceTokenizer que no necesita definir explícitamente, pero puede. Aparte de estos dos, también contiene tokenizadores útiles como LineTokenizer, BlankLineTokenizer y WordPunctTokenizer.

    Puede encontrar una lista completa en su documentación.

    Tokenización de sentencias

    Para tokenizar a nivel de oración, usaremos el mismo blob_object. Esta vez, en lugar del words atributo, usaremos el sentences atributo. Esto devuelve una lista de Sentence objetos:

    from textblob import TextBlob
    
    corpus=""'If you can force your heart and nerve and sinew to serve your turn long after they are gone. And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
    '''
    
    blob_object = TextBlob(corpus)
    
    # Sentence tokenization of the sample corpus
    corpus_sentence = blob_object.sentences
    # To identify all tokens
    print(corpus_sentence)
    # To count the number of tokens
    print(len(corpus_sentence))
    

    Salida:

    [Sentence("If you can force your heart and nerve and sinew to serve your turn long after they are gone"), Sentence("And so hold on when there is nothing in you except the Will which says to them: 'Hold on!")]
    2
    

    Conclusión

    La tokenización es un paso de preprocesamiento de datos muy importante en NLP e implica la división de un texto en trozos más pequeños llamados tokens. Estos tokens pueden ser palabras, oraciones o caracteres individuales en el texto original.

    TextBlob es una gran biblioteca para ingresar a la PNL, ya que ofrece una API simple que permite a los usuarios comenzar rápidamente a realizar tareas de PNL.

    En este artículo, discutimos solo una de las tareas de PNL de las que se ocupa TextBlob, pero en una próxima serie, veremos cómo resolver problemas más complejos, como tratar con inflexiones de palabras, formas de palabras en plural y singular, y más.

     

    Etiquetas:

    Deja una respuesta

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