Kit de herramientas de lenguaje natural: tokenización de texto

¿Qué es Tokenizing?

Puede definirse como el proceso de dividir un fragmento de texto en partes más pequeñas, como oraciones y palabras. Estas partes más pequeñas se llaman tokens. Por ejemplo, una palabra es un símbolo en una oración y una oración es un símbolo en un párrafo.

Como sabemos que la PNL se usa para construir aplicaciones como análisis de sentimientos, sistemas de control de calidad, traducción de idiomas, chatbots inteligentes, sistemas de voz, etc., por lo tanto, para construirlos, es vital comprender el patrón en el texto. Los tokens, mencionados anteriormente, son muy útiles para encontrar y comprender estos patrones. Podemos considerar la tokenización como el paso base para otras recetas como la derivación y la lematización.

Paquete NLTK

nltk.tokenize es el paquete proporcionado por el módulo NLTK para lograr el proceso de tokenización.

Convertir oraciones en palabras

Dividir la oración en palabras o crear una lista de palabras a partir de una cadena es una parte esencial de toda actividad de procesamiento de texto. Vamos a entenderlo con la ayuda de varias funciones / módulos proporcionados pornltk.tokenize paquete.

módulo word_tokenize

word_tokenizeEl módulo se utiliza para la tokenización básica de palabras. El siguiente ejemplo utilizará este módulo para dividir una oración en palabras.

Ejemplo

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')

Salida

['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']

TreebankWordTokenizer Class

word_tokenize módulo, utilizado anteriormente es básicamente una función contenedora que llama a la función tokenize () como una instancia de la TreebankWordTokenizerclase. Dará el mismo resultado que obtenemos al usar el módulo word_tokenize () para dividir las oraciones en palabras. Veamos el mismo ejemplo implementado anteriormente:

Ejemplo

Primero, necesitamos importar el kit de herramientas de lenguaje natural (nltk).

import nltk

Ahora, importe el TreebankWordTokenizer clase para implementar el algoritmo de tokenizador de palabras -

from nltk.tokenize import TreebankWordTokenizer

A continuación, cree una instancia de la clase TreebankWordTokenizer de la siguiente manera:

Tokenizer_wrd = TreebankWordTokenizer()

Ahora, ingrese la oración que desea convertir en tokens:

Tokenizer_wrd.tokenize(
   'Tutorialspoint.com provides high quality technical tutorials for free.'
)

Salida

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials', 'for', 'free', '.'
]

Ejemplo de implementación completo

Veamos el ejemplo de implementación completo a continuación.

import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')

Salida

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials','for', 'free', '.'
]

La convención más importante de un tokenizador es separar las contracciones. Por ejemplo, si usamos el módulo word_tokenize () para este propósito, dará el resultado de la siguiente manera:

Ejemplo

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')

Salida

['wo', "n't"]]

Tal tipo de convención por TreebankWordTokenizeres inaceptable. Es por eso que tenemos dos tokenizadores de palabras alternativas, a saberPunktWordTokenizer y WordPunctTokenizer.

WordPunktTokenizer (clase)

Un tokenizador de palabras alternativo que divide toda la puntuación en tokens separados. Entendamos con el siguiente ejemplo sencillo:

Ejemplo

from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")

Salida

['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']

Tokenizar texto en oraciones

En esta sección vamos a dividir el texto / párrafo en oraciones. NLTK proporcionasent_tokenize módulo para este propósito.

¿Por qué es necesario?

Una pregunta obvia que nos vino a la mente es que cuando tenemos un tokenizador de palabras, ¿por qué necesitamos un tokenizador de oraciones o por qué necesitamos convertir el texto en oraciones? Supongamos que necesitamos contar palabras promedio en oraciones, ¿cómo podemos hacer esto? Para lograr esta tarea, necesitamos tanto la tokenización de frases como la tokenización de palabras.

Entendamos la diferencia entre el tokenizador de oración y palabra con la ayuda del siguiente ejemplo simple:

Ejemplo

import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer. 
It is going to be a simple example."
sent_tokenize(text)

Salida

[
   "Let us understand the difference between sentence & word tokenizer.", 
   'It is going to be a simple example.'
]

Tokenización de oraciones usando expresiones regulares

Si cree que la salida del tokenizador de palabras es inaceptable y desea un control completo sobre cómo tokenizar el texto, tenemos una expresión regular que se puede usar al realizar la tokenización de oraciones. NLTK proporcionaRegexpTokenizer clase para lograr esto.

Entendamos el concepto con la ayuda de dos ejemplos a continuación.

En el primer ejemplo, usaremos expresiones regulares para hacer coincidir tokens alfanuméricos más comillas simples para que no dividamos contracciones como “won’t”.

Ejemplo 1

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")

Salida

["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']

En el primer ejemplo, usaremos expresiones regulares para tokenizar en espacios en blanco.

Ejemplo 2

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")

Salida

["won't", 'is', 'a', 'contraction']

De la salida anterior, podemos ver que la puntuación permanece en los tokens. El parámetro gaps = True significa que el patrón identificará los huecos en los que se tokenizará. Por otro lado, si usamos el parámetro gaps = False, entonces el patrón se usaría para identificar los tokens que se pueden ver en el siguiente ejemplo:

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")

Salida

[ ]

Nos dará la salida en blanco.