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:

Detectar si un tweet es irónico, ¿Qué ironía no?

Estándar

¿Utilizar tweets?, ¿Para qué?

Twitter

En los últimos años hemos utilizado algunos recursos tecnológicos que han marcado nuestra vida para poder ayudarnos en algo, ya sea para tomar desiciones en algún negocio, en la posible detección de enfermedades o de accidentes o simplemente para poder “predecir”.

Twitter siendo una red social inmensa con más de 560 millones de usuarios registrados (wikipedia) publicando tweets a cada segundo en miles de lugares al rededor del mundo, en distintos idiomas y con diferente contenido hacen de éste un diamante en bruto donde se puede explotar desde diferentes áreas.

¿Porque en el título del post escribí la palabra ironía?

  • Segun wikipedia, la ironía es la figura literaria usada cuando una ocurre alguna obviedad o estupidez.
  • Segun la RAE, la ironía es una burla fina y desimulada dicha en tono burlón

Perfecto, continuemos en lo que estabamos, en nuestro caso, el área es simple, no tan sencilla pero para completar la frase digamos que es “Simple y sencilla”. La ironía es algo que no se enseña en la escuela o en algún curso (creo), sin embargo forma parte de nuestra vida cotidiana, en el trabajo, la escuela, con la familia y en donde casi no ocupamos la ironía, con los amigos (ésto es irónico).

Twitter como ya lo he dicho es un diamante en bruto, el cual podemos pulir con un par de lineas de código para sacarle brillo, hagamos una hipótesis, quizá alguien quiere saber como está funcionando su cafetería, si el servicio es bueno, si el café tiene buen sabor, el estacionamiento o los baños son buenos, ¿que tal el precio? ¿valdría la pena ir a tomarse un café con los amigos o con tu novia?. Con twitter y un par de lineas de código podemos recolectar información acerca de como es que los usuarios están hablando de tu cafetería, limpiar los tweets y ver las palabras positivas de cada texto, hacer un análisis del sentimiento de cada tweet y saber si hablan positivamente, negativamente o neutral de tu cefetería, pero que sucede si encontramos un tweet asi:

  • El servicio fue perfecto!!, me tardaron una hora en llevarme mi café!!

¿Crees que el servicio fue bueno? a mi punto de vista creo que no, es aquí donde entramos nosotros y la idea de detectar si un tweet es irónico, ya que no es un mensaje positivo sin embargo tendría toda la estructura para tener un mensaje positivo, por lo que nuestro análisis de sentimiento estaría fallando.

¿Podriamos detectar si estamos frente a un tweet irónico o no? creo que si, con un poco de Machine Learning podríamos tener una solución, este es nuestro trabajo de titulación, así que tenemos la meta de poder clasificar un tweet y saber si es irónico o no lo es, con la ayuda de nuestro Asesor, el Dr. Iván Vladimir Mesa Ruiz,  Técnico Academico en el IIMAS, UNAM podríamos tener una respuesta, así que en las proximas semanas trataré de escribir un resumen de lo que estamos realizando para resolver este problema.

Solo termino con una despedida corta y bien agradecida por la lectura de estas lineas. ¡Saludos!

PD: El trabajo que se desarrollará es en base a un trabajo similar hecho por Gabriela Jasso, así que la idea original fue de ella, nuestro trabajo es replicar el trabajo para obtener resultados similares a los de Gabriela.

PD2: La investigación y el desarrollo del proyecto lo estamos realizando en equipo, Fernanda Hernández y yo, investigando desde lo más sencillo hasta temas que nunca en nuestra vida creimos encontrar, Que divertido está el proyecto!!! (No fue ironía)

Enlaces de interés: