Cómo usar el módulo Tokenize en Python

Cómo usar el módulo Tokenize en Python
Este artículo cubrirá una guía sobre el uso del módulo "Tokenize" en Python. El módulo de tokenize se puede usar para segmentar o dividir el texto en piezas pequeñas de varias maneras. Puede usar estos segmentos en aplicaciones de Python que utilizan el aprendizaje automático, el procesamiento del lenguaje natural y los algoritmos de inteligencia artificial. Todas las muestras de código en este artículo se prueban con Python 3.9.5 en Ubuntu 21.04.

Sobre el módulo de tokenize

Como su nombre indica, el módulo de tokenize se puede usar para crear "tokens" a partir de un párrafo o un trozo de texto. Cada pieza rota individual regresada después del proceso de tokenización se llama token. Una vez que toca un texto, puede implementar su propia lógica en su programa de Python para procesar los tokens de acuerdo con su caso de uso. El módulo tokenize proporciona algunos métodos útiles que se pueden usar para crear tokens. El uso de estos métodos se puede entender mejor a través de ejemplos. Algunos de ellos se explican a continuación.

Tokenizing un párrafo o oración

Puede tokenizar un párrafo o una oración con palabras separadas por espacios utilizando la muestra de código explicada a continuación.

Importar tokenizar
de io import bytesio
Text = "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolor magna aliqua."
tokens = tokenize.Tokenize (bytesio (texto.encode ('utf-8')).línea de lectura)
para t en fichas:
Imprimir (t)

Las dos primeras declaraciones importan los módulos de pitón necesarios requeridos para convertir una pieza de texto en tokens individuales. Una variable llamada "texto" contiene una cadena de ejemplo. A continuación, se llama al método "Tokenize" desde el módulo Tokenize. Utiliza el método "Readline" como argumento obligatorio. Dado que la variable de texto es de tipo "STR", usarla directamente lanzará un error. El argumento Readline es un método llamable que debe devolver bytes en lugar de una cadena para que el método de tokenize funcione correctamente. Entonces, utilizando la clase "bytesio", el texto se convierte en un flujo de bytes especificando un tipo de codificación.

El método de tokenize genera una tupla con nombre que contiene cinco tipos: tipo (tipo del token), cadena (nombre del token), inicio (posición inicial del token), final (posición final del token) y línea (la línea (la línea (la línea que se usó para crear tokens). Entonces, después de ejecutar la muestra de código anterior, debe obtener una salida similar a esta:

Tokeninfo (type = 62 (codificación), string = 'utf-8', start = (0, 0), end = (0, 0), línea = ")
Tokeninfo (type = 1 (nombre), string = 'lorem', start = (1, 0), end = (1, 5), línea = 'lorem ipsum dolor sit amet, consecttur adipiscing elit, sed do do do tempor labore et dolore magna aliqua.')


Tokeninfo (type = 54 (op), string = '.', inicio = (1, 122), final = (1, 123), línea =' lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolor magna aliqua.')
Tokeninfo (type = 4 (newline), string = ", start = (1, 123), end = (1, 124), línea =")
TokenInfo (type = 0 (endmarker), string = ", start = (2, 0), end = (2, 0), línea =")

Como puede ver en la salida anterior, el método Tokenize genera un "Tokeninfo"Objeto con cinco tipos mencionados anteriormente. Si desea acceder a estos tipos individualmente, use notación de puntos (como se muestra en la muestra de código a continuación).

Importar tokenizar
de io import bytesio
Text = "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolor magna aliqua."
tokens = tokenize.Tokenize (bytesio (texto.encode ('utf-8')).línea de lectura)
para t en fichas:
imprimir (t.cuerda, t.Empiece, t.fin, t.tipo)

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:


UTF-8 (0, 0) (0, 0) 62
Lorem (1, 0) (1, 5) 1
iPsum (1, 6) (1, 11) 1

Tenga en cuenta que el "T.tipo"La llamada devuelve un número constante para el tipo de token. Si desea un tipo de token más legible por humanos, use el "simbólico"Módulo y el"tok_name"Diccionario disponible en él.

Importar tokenizar
de io import bytesio
token de importación
Text = "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolor magna aliqua."
tokens = tokenize.Tokenize (bytesio (texto.encode ('utf-8')).línea de lectura)
para t en fichas:
imprimir (t.cuerda, t.Empiece, t.Fin, token.tok_name [t.tipo])

Suministrando "t.Tipo "Diccionario constante para" Tok_name ", puede obtener un nombre legible en humanos para el tipo de token. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

UTF-8 (0, 0) (0, 0) codificación
Lorem (1, 0) (1, 5) nombre
iPsum (1, 6) (1, 11) nombre
Dolor (1, 12) (1, 17) Nombre

Una lista completa de todos los tipos de tokens y sus nombres está disponible aquí. Tenga en cuenta que el primer token es siempre el tipo de codificación de la secuencia de entrada, y no tiene un valor de inicio y finalización.

Puede obtener fácilmente una lista de solo nombres de tokens utilizando para declaraciones de bucle o comprensiones de lista, como se muestra en la muestra de código a continuación.

Importar tokenizar
de io import bytesio
Text = "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolor magna aliqua."
tokens = tokenize.Tokenize (bytesio (texto.encode ('utf-8')).línea de lectura)
token_list = [t.cadena para t en tokens]
Imprimir (Token_List)

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

['utf-8', 'lorem', 'iPsum', 'dolor', 'sentarse', 'amet', ',', 'consectetur', 'adipiscing', 'elit', ',', 'sed' , 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolor', 'magna', 'aliqua', '.', ","]

Puede usar el método "Generate_Tokens" disponible en el módulo Tokenize si desea tokenizar una cadena sin convertirlo en bytes. Todavía toma un método de línea de lectura llamable como argumento obligatorio, pero solo maneja las cadenas devueltas por el método de línea de lectura y no los bytes (a diferencia del método tokenize explicado anteriormente). La muestra de código a continuación ilustra el uso del método Generate_Tokens. En lugar de la clase Bytesio, ahora se usa la clase "Stringio".

Importar tokenizar
de io import stringio
Text = "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolor magna aliqua."
tokens = tokenize.generar_tokens (stringio (texto).línea de lectura)
token_list = [t.cadena para t en tokens]
Imprimir (Token_List)

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

['Lorem', 'iPsum', 'dolor', 'sentarse', 'amet', ',', 'consecttetur', 'adipiscing', 'elit', ',', 'sed', 'do', ',', ',' eiusmod ',' tempor ',' incididunt ',' ut ',' labore ',' et ',' dolor ',' magna ',' aliqua ',',.', ","]

Contenido de tokenización de un archivo

Puede usar la instrucción "Con Open" en el modo "RB" para leer directamente el contenido de un archivo y luego tokenizarla. El modo "R" en "RB" significa modo de solo lectura, mientras que "B" significa modo binario. La muestra de código a continuación abre una "muestra.archivo txt "y tokeniza su contenido utilizando los métodos de tokenize y readline.

Importar tokenizar
con abierto ("Muestra.txt "," rb ") como f:
tokens = tokenize.Tokenize (F.línea de lectura)
token_list = [t.cadena para t en tokens]
Imprimir (Token_List)

También puede usar "Abrir", un método de conveniencia disponible en el módulo Tokenize, y luego llamar a Generate_Tokens y Readline Methods para crear tokens desde un archivo directamente.

Importar tokenizar
con tokenize.Abierto ("Muestra.txt ") como f:
tokens = tokenize.generar_tokens (F.línea de lectura)
token_list = [t.cadena para t en tokens]
Imprimir (Token_List)

Suponiendo que la muestra.El archivo txt contiene la misma cadena de ejemplo, debe obtener la siguiente salida después de ejecutar las dos muestras de código explicadas anteriormente.

['Lorem', 'iPsum', 'dolor', 'sentarse', 'amet', ',', 'consecttetur', 'adipiscing', 'elit', ',', 'sed', 'do', ',', ',' eiusmod ',' tempor ',' incididunt ',' ut ',' labore ',' et ',' dolor ',' magna ',' aliqua ',',.', ","]

Conclusión

El módulo Tokenize en Python proporciona una forma útil de tokenizar trozos de texto que contienen palabras separadas por el espacio. También crea un mapa de posiciones iniciales y finales de tokens. Si desea tokenizar cada palabra de un texto, el método de tokenización es mejor que el método "dividido", ya que también se encarga de los caracteres de puntuación de la tokenización / otros símbolos e infiere el tipo de token.