NLTK Tokenizing y Python

Python
Estándar

Hola, bienvenidos al blog, en esta ocasión les traigo algo “nuevo”, está bien, no es nuevo pero si es interesante. Vamos a hablar de PNL, el cuál es un tema muy interesante. involucra muchísimas cosas y aqui vamos a tratar especificamente de un cosa; El texto.

Así es, como lo dice el título del post hoy vamos a aprender un poco de Tokenizing que no es más que dividir algo en una lista de algo.

Tokenizing

Conceptualmente es la división de texto o cadenas de texto en partes más pequeñas como frases, palabras o símbolos, utilizando así un concepto como el de “divide y vencerás“. El resultado de hacer el Tokenizing será una lista de Tokens.

Por ejemplo, si aplicamos el Tokenizing a un párrafo el resultado será una lista de tokens los cuales estarán compuestos de oraciones, si hacemos lo mismo pero para una oración obtendremos una lista de tokens compuestos por las palabras que componen dicha oración.

Teniendo la siguiente oración podemos ver que al hacer el Tokenizing obtendremos dos tokens, el de color azul y el de color naranja. Estos a su vez puedes ser separados en palabras pero para el ejmeplo utilizaremos primero la separación por sentencias.

Text Tokenizing

Text Tokenizing

Python y NLTK

Hacer el Tokenizing en python es ralmente sencillo, y si programar algoritmos en python es fácil, utilizando librerías como NLTK es aún más sencillo.

Crearemos un nuevo archivo de script python o desde la consola puedes trabajar.

from nltk.tokenize import sent_tokenize

para = "Today is good to see you. How are you?"
print sent_tokenize(para)

En el código de python importamos la librería NLTK y en concreto la parte de Tokenize el cuál nos ayudará con la creación de tokens.

Screenshot (27)

Con esto podemos empezar a probar la magia de la librería. Con una cadena vamos a realizar el tokenizing, para este ejemplo la cadena es la variable para al final para hacer el tokenizing solamente tenemos que hacer la función sent_tokenize() con la variable como parámetro y en pantalla veremos algo como lo siguiente:

Un vector con token por cada frase será nuestro resultado. sin embargo esta manera resulta no tan efectiva para cuando tenemos un montón de texto, así que ahora vamos a ver una de las maneras más usuales. Utilizar el Tokenize.

Para usar el Tokenize debemos hacer algo un poco similar a lo anterior, solo que con una parte diferente, ahora con NLTK->Data vamos a importarla al script.

import nltk.data

para = "Today is good to see you. How are you?"
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
print tokenizer.tokenize(para)

Tenemos la misma variable(para) con las sentencias y al ejecutarlo vemos que tenemos el mismo resultado que con la funcion sent_tokenize().

Screenshot (27)

Entonces me dirán que cuál es la diferencia, la pequeña gran diferencia es que para hacer el tokenizing de un monton de sentencias la eficiencia se refleja al utilizar ésta forma.

Una línea diferente es la variable tokenizer la cual es cargada con el lenguaje que se va a utilizar en éste caso es Inglés, pero de igual manera se puede realizar con el español y nos funcionara exactamente igual.

import nltk.data

para = "Hola amigos. Gracias por ver este video. Saludos"
tokenizer = nltk.data.load('tokenizers/punkt/spanish.pickle')
print tokenizer.tokenize(para)

EL resultado de las tres maneras de realizar el tokenizing nos mostrará una pantalla como la siguiente:

Screenshot (26)

Entonces podemos trabajar con un montón de lenguajes (que soporte NLTK obviamente), así terminaremos este sincillo post sobre el tokenizing de oraciones, en el próximo veremos algo más a fondo que sera el tokenizing de frases para que los tokens resultantes sean las palabras de la frase.

Me despido y nos vemos en la siguiente entrada. Cualquier duda o comentario estoy atento y les responderé en breve.

Les dejo ésta canción que tiene buen ritmo y me encantó. Saludos.

Referencias

Trabajando con documentos en Python

Python
Estándar

Trabajando con Python

Python

En esta entrada vamos a trabajar un poco con documentos, saber como se leen y poder hacer cosas interesantes que tal vez nos podrían servir en un futuro muy lejano. Utilizaremos Python como está escrito en el titulo del post para abrir el documento y contar las palabras que contiene el documento.

Leyendo un archivo de texto

En python el abrir el documento para comenzar a leerlo es algo realmente sencillo, tan sencillo que solamente en una linea se realiza, a continuación la instrucción:

archivo = open(‘MiArchivo.txt’, ‘r’)

La función open() recibe dos parámetros, el primero es el nombre del archivo y el segundo es la forma como se abrirá el archivo, ya sea para leer(r)crear y escribir un archivo(w) o abrir y escribir al final del archivo(a), en nuestro caso utilizaremos el método de solo lectura.

Una vez abierto nuestro archivo, podemos leerlo con un par de lineas más, utilizando una estructura repetitiva for, vamos a leer linea tras linea hasta el final del documento.

for linea in archivo1:
       linea= unicode(linea,’utf-8′)
       linea=linea.strip()

Con la estructura repetitiva recorremos todas las lineas que contenga el documento y dentro de cada recorrido vamos a guardar la linea leída, utilizando una decodificación utf-8 a través del método unicode() para posteriormente eliminar los saldos de linea que el documento contiene por cada linea utilizando el método strip().

Teniendo nuestra linea almacenada en una variable, podemos hacer la separación de palabras, sabemos que cada palabra comienza y termina con un espacio en blanco, así que de esa forma separaremos nuestra linea, utilizando el método split() es posible hacer esto de la siguiente manera:

palabras=linea.split()

De esta forma se guardaran todas las palabras de la linea en el vector palabras, listo para poder contarlas. Para contar las palabras de cada linea utilizaremos una variable y otro método(python esta lleno de métodos muy útiles 😀 ) llamado len() el cual nos regresa el tamaño de un vector o lista, así que en cada linea iremos sumando el total de palabras que hay para que al final conozcamos el total de palabras que existen en el documento.

totalPalabras = totalPalabras + len(palabras)

Ahora solo queda mostrar el total de palabras encontradas y cerrar el documento, esto lo haremos con un print de la siguiente manera:

print “En el docuemento existen:”, totalPalabras, “palabras”
archivo.close()

Con esto conoceremos el total de palabras que existen en nuestro documento, el script final debería quedar de la siguiente manera:

Script Final

Script Final

Y en la consola podremos observar algo como esto:

Resultado en consola

Resultado en consola

En mi archivo de texto he pegado un poema de Edel Juárez para realizar la prueba.

Poema

Poema

Así termino esta entrada, agradeciendo la lectura del post y esperando que sea de utilidad, si existe alguna duda con gusto podré resolverla. ¡Saludos! 😀

Enlaces de interés: