PNL simple en Python con TextBlob: tokenización

P

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.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad