miércoles, 28 de agosto de 2013

Detectar noticias interesantes con un clasificador Naive Bayes


Detectar noticias interesantes con un clasificador Naive Bayes

Hace mucho tiempo, cuando empezo el auge de internet y solo tenía acceso a las redes desde el trabajo, me ví que no podía acaparar toda información a la que tenía acceso. ¿Qué solución me podría proporcionar?
ChotaWeb, una aplicación que tuviese todas las páginas web en las cuales estuviese interesado y luego el programa detectase si en alguna página habría alguna noticia interesante. Y si fuese así, avisarme por mensaje o por un correo.

El sistema que idee en aquella época era de los más simple: por palabras clave. Aún el interfaz de usuario conserva sus reminiscencias.



Pero hasta que hace poco, retome esté proyecto personal y mejorarlo de forma que de verdad detectara las noticias que me interesasen. Entonces, me tope con el clasificador Naive Bayes.

Encontre este tutorial en pdf el cual me sirvio para implementar un proyecto de prueba en C#, Bayes.sln

Tutorial on Naive Bayes Classification


El cual cuando se ejecuta para comprar que da los mismos resultados que el tutorial, tiene este aspecto:



Este proyecto se puede descargar el código fuente aquí

Una vez, desarrollado el algoritmo núcleo que determinará si una noticia es interesante o no, habrá que codificar el algoritmo anterior de C# a c++, ya que ChotaWeb está en c++ con MFC.


El formato que usa ChotaWeb en el fihero .cht es:

9    <numero de páginas>
http://elpais.com/tag/astronomia/a/ 
http://www.expansion.com/ 
http://www.noticias.com 
http://www.elmundo.es 
http://www.elmundo.es/navegante 
http://www.newscientist.com/news/ 
http://news.bbc.co.uk/ 
http://news.bbc.co.uk/2/hi/technology/default.stm 
http://news.bbc.co.uk/2/hi/health/default.stm 

03:00   <tiempo que se activa automáticamente para inspeccionar cada página>
1  <1 para que cada vez que se inicie windows se ejecute chotaweb. Aunque no funciona muy bien por el tema del directorio que tiene por defecto. Bug conocido>


El aspecto que tiene es el siguiente y donde se muestra una página que habla sobre los planetas extrasolares y como se ha entrenado al clasificador de Bayes con un documento que habla sobre los planetas extrasolares. Entonces, si todo va bien, en la inspección, debería de avisaros de que en dicha página hay una noticia que nos interesa.



Para su descarga el ejecutable del ChotaWeb y ver un poco mejor como funciona, aquí.

Necesitará que el fichero TrainingDocuments.xml contenga más documentos para que así, de unos resultados más precisos. Esos resultados, una vez mostrados el usuario, se guardan en disco para no volverlos a mostrar.

Creo que el crear otro proyecto en C# para investigar, probar un algoritmo, es bastante útil, ya que uno no 'guarrea' el código del proyecto en el que está trabajando. Además, el diseño del algoritmo se verá menos condicionado al proyecto en curso, y solo se centrará en el algoritmo.

Un saludo
Félix