Google+ Seguidores

domingo, 18 de febrero de 2018

StringTagger: Clasificación de Texto con Python

Hola a todos, les doy la bienvenida nuevamente a "Mi Diario Python". Mi nombre es Luis y te agradezco por estar leyendo esto :D.


En el articulo de hoy, quisiera mostrarles un proyecto en el que he estado trabajando. Lo he hecho con motivos educativos, con lo cual podremos ver las maravillas que se pueden lograr con una formula matemática y un lenguaje de programación.

StringTagger - Etiquetador de Texto:

"StringTagger" es el nombre que le he dado a este proyecto. Se trata de un modulo que implementa un clasificador bayesiano simple para la clasificación de cadenas de textos.


La analogía es muy simple, el clasificador clasificara las cadenas de texto según el numero de las palabras más frecuentes.  Lo primero que debemos hacer para poner en funcionamiento el clasificador, es entrenarlo. La forma en la que entrenamos al clasificador es dándole largos contenidos de texto, luego este los dividirá en palabras para saber cuales son las palabras más frecuentes, de esta manera a las nuevas cadenas de texto podrá clasificarlas según la frecuencia de palabras.

¿Un ejemplo? Claro, aquí lo tenemos: (clasificador_de_texto_ejemplo.py)

"""
Uso sencillo de "StringTagger" para el etiquetado (clasificación) de texto.
"""

__author__ = "Luis Salcedo" 

from StringTagger.StringClf import Classifier
from StringTagger.getPage import getTextPage

training_data = { # Datos para entrenar al clasificador
 "Ciencia":[
  'https://es.wikipedia.org/wiki/Ciencia', # Entrenamos al clasificador con paginas de wikipedia.
  'https://es.wikipedia.org/wiki/Qu%C3%ADmica'
 ],
 "Deportes":[
  'https://es.wikipedia.org/wiki/Deporte',
  'https://es.wikipedia.org/wiki/Deportes_ol%C3%ADmpicos'
 ],
 "Tecnologia":[
  'https://es.wikipedia.org/wiki/Tecnolog%C3%ADa',
  'https://es.wikipedia.org/wiki/Rob%C3%B3tica'
 ],
 
}

clf = Classifier() # Instancia del clasificador

for category,urls in training_data.items(): # Entrenamos al clasificador con el contenido de cada pagina
 for url in urls:
  clf.train(getTextPage(url),category) # El metodo "getTextPage", recive como argumento una url para extraer su texto

# Iniciamos el proceso de clasificación con el metodo "String"
# Solo le pasamos como argumento el texto que deseamos etiquetar (clasificar)
string = "Molécula de agua, dos átomos de hidrógeno unidos a uno de oxígeno."
clas = clf.String(string)
print('\n')
print("Texto: %s " % string)
print("Etiqueta del Texto: %s" % clas)


El código anterior nos muestro el uso básico de "StringTagger", como se puede apreciar, lo primero que se hace es crear un diccionario, el cual contiene el nombre de todas las categorías. Cada categoría contiene un par de url, a las cuales el método "getTextPage" extrae todo su texto y lo usa para el entrenamiento del clasificador. 

Luego de entrenar al clasificador, utilizamos el método "String" para clasificar el texto que ingrese el usuario. El método "String" de la clase "Classifier" nos devolverá el nombre de la categoría a la cual pertenezca el texto.

El resultado del ejemplo anterior seria:


Puedes descargar StringTagger y el ejemplo anterior ingresando al siguiente enlace: https://github.com/LuisAlejandroSalcedo/StringTagger-Clasificador-de-Texto.

Como se puede observar en la imagen, el script extrae todo el texto de las paginas web que les proporcionamos, para que luego este aprenda de los textos.  Luego le pasamos una cadenas de texto, para luego obtener el resultado que este caso es "Ciencia".

(Si se preguntan porque el nombre del usuario es PILAR, es por que esta no es mi PC :D)

Entre más datos, mejor. Entre más contenido podamos administrarle al clasificador, este sera más eficaz en sus clasificaciones. 

Este método puede ser usado para muchos propósitos: Clasificador de noticias, clasificador de tweets, hackeo de la CIA y del pentágono, entre otros. (Las ultimas 2 no están confirmadas, pero no perdemos nada intentándolo).

Bueno, eso es todo, creo que al mirar y experimentar con esto, podremos aprender mucho.

¿Quieres que explique la creación de StringTagger? Deja un comentario y déjamelo saber.

Te reto a mejorar esto, a que le agregues más funcionalidades y las compartas con nosotros.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

5 comentarios :
Write comentarios
  1. mm muy intrezante el post,siempre he querido hacer algo parecido,esto es sin duda alguna algo que me gustaria mirar,gracias por compartirlo

    ResponderEliminar
  2. Excelente! super interesante! gracias por compatir! saludos y ojala pueda aprender mas de python para llegar a este nivel!
    saludos.

    ResponderEliminar
  3. Muy buen artículo, lo reviso más tarde. Saludos

    ResponderEliminar
  4. Hola, muchas gracias por compartir, una consulta tengo un error cuando le paso un texto como "Coca-Cola" no realiza la clasificación, alguna ayuda...
    Muchas Gracias...

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .