Python

Aplicando Tokenizing a Texto

Así es,  vamos a practicar un poco sobre lo que hemos aprendido, en este caso vamos a realizar una practica con todo lo que hemos aprendido de Tokenize y obtener Tokens, si aún no haz leido los post pasados te invito a que leas la entrada de Tokenizing Sentencias y Tokenizing texto en palabras para que entiendas mejor de lo que vamos a hablar en esta entrada.

Antes de comenzar

Tenemos que tener un texto al cual podamos aplicar el tokenizing que hemos aprendido, en mi caso obtuve un fragamento del libro “Las cosas que no nos dijimos” de Marc Levy, bueno libro por si deseas leerlo, el fragmento lo almacené en un archivo de texto, si deseas el archivo te dejo el link en las referencias del post y puedas seguir mejor los pasos que haremos para utilizar le tokenize.

Un problema que tuve al hacer este post fue la vizualización correcta de palabras en el alfabeto español, la solución que encontré fue utilizar Win_Unicode_Console, si necesitas instalarlo te dejo el link:

El texto

En nuestro Script vamos a leer el fragmento del libro que les habia comentado, para esto vamos a utilizar la librería de codecs (dependerá de tu versión de Python, la que estoy usando es 2.7, si es superior puede realizarse con la librería io), para abrir el archivo con el texto.

import codecs
import win_unicode_console

Para trabajar con el texto también necesitamos sent_tokenize() word_tokenize(), estas funciones debemos importarlas de la librería de NLTK como lo haciamos en las entradas anteriores.

import codecs
import win_unicode_console
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize

Ahora vamos a guardar nuestro texto en una variable, como se ve en el código de abajo, leemos cada línea del documento y vamos eliminando los espacios de cada una de ellas.

#Utilizado para vizualizar caracteres correctamente en consola
win_unicode_console.enable()

#Abrimos el archivo
archivo = codecs.open('texto.txt', 'r', encoding='utf-8')
texto = ""

#Almacenamos el texto en una variable
for linea in archivo:
    linea = linea.strip()
    texto = texto + " " + linea

Tokenize en sentencias

Ya que tenemos nuestra variable lista para trabajar con ella vamos a aplicar el tokenize para obtener las sentencias de el fragmento del texto.

Utilizando la fúnción Sent_tokenize() vamos a obtener en el vector tokens, el conjunto de tokens que serán las oraciones del fragmento de texto. Con estos tokens ya podemos hacer muchas cosas para tratar su informacion y darles el uso que queramos. En nuestro caso podemos sacarle un poco más de provecho usando la función Word_tokenize().

#Realizamos el Tokenizing con Sent_Tokenize() a cada una de las sentencias del texto
tokens = sent_tokenize(texto)

Tokenize de sentencias a palabras

Con nuestros tokens ya listos vamos ahora a utilizar la funcion Word_tokenize(), la cual nos obtendrá tokens de cada sentencia, estos serán cada una de las palabras que conforman la sentencia.

La forma en que lo podemos utilizar es la siguiente:

#Realizamos el Word_Tokenize() para cada una de las sentencias
word_tokens = []
for token in tokens:
    word_tokens.append(word_tokenize(token))

Una vez que ya tenemos nuestros tokens resultantes de cada sentencia podemos mostrarlos en pantalla para ver mas detalladamente.

#Se imprimen los tokens resutantes en pantalla
n = 0
for tok in word_tokens[numero_sentencia]:
    print "Token " + str(n) + " -> " + tok
    n = n + 1

Agregamos un poco más de código a nuestro programa para que no sea tan “cuadrado”; a continuación se muestra el código final.

import codecs
import win_unicode_console
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize

#Utilizado para vizualizar caracteres correctamente en consola
win_unicode_console.enable()

#Abrimos el archivo
archivo = codecs.open('texto.txt', 'r', encoding='utf-8')
texto = ""

#Almacenamos el texto en una variable
for linea in archivo:
    linea = linea.strip()
    texto = texto + " " + linea

#Realizamos el Tokenizing con Sent_Tokenize() a cada una de las sentencias del texto
tokens = sent_tokenize(texto)

#Preguntamos por el numero de sentencia a mostrar
print "\nEl texto contine {} sentencias.\nComenzando de 0 hasta {}\n".format(len(tokens), len(tokens) - 1)
numero_sentencia = input("Ingresa en numero de sentencia: ")

if(numero_sentencia > 0 and numero_sentencia < len(tokens)):     print "\n[Sentencia " + str(numero_sentencia) + "] -> " + tokens[numero_sentencia], '\n'

    #Realizamos el Word_Tokenize() para cada una de las sentencias
    word_tokens = []
    for token in tokens:
        word_tokens.append(word_tokenize(token))

    #Se imprimen los tokens resutantes en pantalla
    n = 0
    for tok in word_tokens[numero_sentencia]:
        print "Token " + str(n) + " -> " + tok
        n = n + 1

    print "\nTotal de tokens por palabras de la sentencia {} son: {} Tokens".format(numero_sentencia, len(word_tokens[numero_sentencia]))

    print "\nTotal de sentencias: {}".format(len(tokens) - 1)

else:
    print "\n\nNumero de sentencia no valido"

Agregamos una interacción con el usuario (nosotros) para preguntar por la sentencia de la cual deseamos aplicar el Word_tokenize() y mostrarlo en pantalla.

Al ejecutarlo tendremos en pantalla algo como lo siguiente:

Screenshot (35)

¿Se imaginan que podemos hacer con esta información obtenida de un texto cualquiera?. Podemos hacer muchas cosas, pero vamos poco a poco.

El código también estará disponible en Github por si quieres ir a buscarlo al final te dejo el link al Git.

Con esto se termina el post donde podemos ver como utilizar las funciones ya escritas en este blog, si necesitan algo más concreto o alguna idea que se les pueda ocurrir pueden enviarme un mail y con gusto estaré leyendolos.

Mientras tanto seguiré con mas de PLN, profundizando el tema de texto y atentos al blog que se viene una forma de comparar textos para obtener similitud.

Hasta la próxima, excelente día.

Referencias

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s