ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Análisis y recomendación social de noticias, blogs y contenidos mediante correlación de reputación, popularidad y relevancia semántica Autor: Alejandro Prado Montes Director: Diego Ferreiro Val Madrid Mayo 2013 II AUTORIZACIÓN PARA LA DIGITALIZACIÓN, DEPÓSITO Y DIVULGACIÓN EN ACCESO ABIERTO (RESTRINGIDO) DE DOCUMENTACIÓN 1º. Declaración de la autoría y acreditación de la misma. El autor D. Alejandro Prado Montes, como alumno de la UNIVERSIDAD PONTIFICIA COMILLAS (COMILLAS), DECLARA que es el titular de los derechos de propiedad intelectual, objeto de la presente cesión, en relación con la obra proyecto de fin de carrera Análisis y recomendación social de noticias, blogs y contenidos mediante correlación de reputación, popularidad y relevancia semántica1, que ésta es una obra original y que ostenta la condición de autor en el sentido que otorga la Ley de Propiedad Intelectual como titular único o cotitular de la obra. En caso de ser cotitular, el autor (firmante) declara asimismo que cuenta con el consentimiento de los restantes titulares para hacer la presente cesión. En caso de previa cesión a terceros de derechos de explotación de la obra, el autor declara que tiene la oportuna autorización de dichos titulares de derechos a los fines de esta cesión o bien que retiene la facultad de ceder estos derechos en la forma prevista en la presente cesión y así lo acredita. 2º. Objeto y fines de la cesión. Con el fin de dar la máxima difusión a la obra citada a través del Repositorio institucional de la Universidad y hacer posible su utilización de forma libre y gratuita ( con las limitaciones que más adelante se detallan) por todos los usuarios del repositorio y del portal e-ciencia, el autor CEDE a la Universidad Pontificia Comillas de forma gratuita y no exclusiva, por el máximo plazo legal y con ámbito universal, los derechos de digitalización, de archivo, de reproducción, de distribución, de comunicación pública, incluido el derecho de puesta a disposición electrónica, tal y como se describen en la Ley de Propiedad Intelectual. El derecho de transformación se cede a los únicos efectos de lo dispuesto en la letra (a) del apartado siguiente. 1 Especificar si es una tesis doctoral, proyecto fin de carrera, proyecto fin de Máster o cualquier otro trabajo que deba ser objeto de evaluación académica III 3º. Condiciones de la cesión. Sin perjuicio de la titularidad de la obra, que sigue correspondiendo a su autor, la cesión de derechos contemplada en esta licencia, el repositorio institucional podrá: (a) Transformarla para adaptarla a cualquier tecnología susceptible de incorporarla a internet; realizar adaptaciones para hacer posible la utilización de la obra en formatos electrónicos, así como incorporar metadatos para realizar el registro de la obra e incorporar “marcas de agua” o cualquier otro sistema de seguridad o de protección. (b) Reproducirla en un soporte digital para su incorporación a una base de datos electrónica, incluyendo el derecho de reproducir y almacenar la obra en servidores, a los efectos de garantizar su seguridad, conservación y preservar el formato. . (c) Comunicarla y ponerla a disposición del público a través de un archivo abierto institucional, accesible de modo libre y gratuito a través de internet.2 (d) Distribuir copias electrónicas de la obra a los usuarios en un soporte digital. 3 4º. Derechos del autor. El autor, en tanto que titular de una obra que cede con carácter no exclusivo a la Universidad por medio de su registro en el Repositorio Institucional tiene derecho a: a) A que la Universidad identifique claramente su nombre como el autor o propietario de los derechos del documento. b) Comunicar y dar publicidad a la obra en la versión que ceda y en otras posteriores a través de cualquier medio. c) Solicitar la retirada de la obra del repositorio por causa justificada. A tal fin deberá ponerse en contacto con el vicerrector/a de investigación (curiarte@rec.upcomillas.es). d) Autorizar expresamente a COMILLAS para, en su caso, realizar los trámites necesarios para la obtención del ISBN. 2 En el supuesto de que el autor opte por el acceso restringido, este apartado quedaría redactado en los siguientes términos: (c) Comunicarla y ponerla a disposición del público a través de un archivo institucional, accesible de modo restringido, en los términos previstos en el Reglamento del Repositorio Institucional 3 En el supuesto de que el autor opte por el acceso restringido, este apartado quedaría eliminado. IV e) Recibir notificación fehaciente de cualquier reclamación que puedan formular terceras personas en relación con la obra y, en particular, de reclamaciones relativas a los derechos de propiedad intelectual sobre ella. 5º. Deberes del autor. El autor se compromete a: a) Garantizar que el compromiso que adquiere mediante el presente escrito no infringe ningún derecho de terceros, ya sean de propiedad industrial, intelectual o cualquier otro. b) Garantizar que el contenido de las obras no atenta contra los derechos al honor, a la intimidad y a la imagen de terceros. c) Asumir toda reclamación o responsabilidad, incluyendo las indemnizaciones por daños, que pudieran ejercitarse contra la Universidad por terceros que vieran infringidos sus derechos e intereses a causa de la cesión. d) Asumir la responsabilidad en el caso de que las instituciones fueran condenadas por infracción de derechos derivada de las obras objeto de la cesión. 6º. Fines y funcionamiento del Repositorio Institucional. La obra se pondrá a disposición de los usuarios para que hagan de ella un uso justo y respetuoso con los derechos del autor, según lo permitido por la legislación aplicable, y con fines de estudio, investigación, o cualquier otro fin lícito. Con dicha finalidad, la Universidad asume los siguientes deberes y se reserva las siguientes facultades: a) Deberes del repositorio Institucional: - La Universidad informará a los usuarios del archivo sobre los usos permitidos, y no garantiza ni asume responsabilidad alguna por otras formas en que los usuarios hagan un uso posterior de las obras no conforme con la legislación vigente. El uso posterior, más allá de la copia privada, requerirá que se cite la fuente y se reconozca la autoría, que no se obtenga beneficio comercial y que no se realicen obras derivadas. - La Universidad no revisará el contenido de las obras, que en todo caso permanecerá bajo la responsabilidad exclusiva del autor y no estará obligada a ejercitar acciones legales en nombre del autor en el supuesto de infracciones a derechos de propiedad intelectual V derivados del depósito y archivo de las obras. El autor renuncia a cualquier reclamación frente a la Universidad por las formas no ajustadas a la legislación vigente en que los usuarios hagan uso de las obras. - La Universidad adoptará las medidas necesarias para la preservación de la obra en un futuro. b) Derechos que se reserva el Repositorio institucional respecto de las obras en él registradas: - retirar la obra, previa notificación al autor, en supuestos suficientemente justificados, o en caso de reclamaciones de terceros. Madrid, a ……….. de …………………………... de ………. ACEPTA Fdo…………………………………………………………… VI Proyecto realizado por el alumno: Alejandro Prado Montes Fdo:…………………………………… Fecha:…………………… Autoriza la entrega del proyecto cuya información no es de carácter confidencial EL DIRECTOR DEL PROYECTO Diego Ferreiro Val Fdo:…………………………………… Fecha:…………………… Vº Bº del Coordinador de Proyectos Israel Alonso Martínez Fdo:…………………………………… Fecha:…………………… VII Agradecimientos A mis padres, por su apoyo incondicional y por todos los esfuerzos y sacrificios que han hecho por mí para ayudarme a llegar hasta aquí, así como por haberme formado como persona en valores e integridad moral. A mi hermano, por ser la luz que ilumina mi camino, quien siempre me ha ayudado y tan sabiamente me aconseja a pesar de la distancia siempre está a mi lado. A mis amigos, en general por creer en mí, especialmente a Eduardo Garrido por darme fuerzas en los momentos de mayor debilidad y a David Sánchez por darme siempre una segunda visión de la vida. A aquellos profesores que me formaron en el arte de la ingeniería transmitiéndome sus conocimientos con ilusión, dedicación y paciencia. A José Luís Gahete, por su inestimable ayuda en los inicios de mi etapa universitaria. A Lucía Cerrada, por su infinita paciencia y horas de dedicación personal para superar uno de los mayores obstáculos en mi carrera. A Diego Ferreiro, por su colaboración en el desarrollo de este proyecto. VIII Análisis y recomendación social de noticias, blogs y contenidos mediante correlación de reputación, popularidad y relevancia semántica. Autor: Prado Montes, Alejandro Director: Ferreiro Val, Diego Entidad Colaboradora: Salesforce.com Resumen del proyecto Introducción Hoy en día se dispone de demasiada información en Internet, en muchos casos repetida y de dudosa relevancia. Seguir todos los enlaces que se comparten en redes sociales puede resultar una tarea ímproba, que pretendemos simplificar mediante análisis semántico de metadatos (qué temas, tópicos, autores, sitios y categorías suele visitar el usuario) y de relevancia social (cuántas veces se comparte un artículo en Internet y qué interés personal tiene el usuario en ese campo). De esta forma, seremos capaces de descubrir contenidos y potencialmente seleccionar los de mayor relevancia para el usuario, produciendo un resumen de enlaces y descripciones que sea conciso, dinámico y elegante para el usuario final con el consiguiente ahorro de tiempo. Tecnología El proyecto ha sido desarrollado en el lenguaje de programación C# con el entorno de desarrollo Visual Studio 2012. Se ha integrado con el proyecto una serie de tecnologías existentes, librerías y código de probado funcionamiento para mejorar la funcionalidad del sistema. IX Se pueden citar como ejemplos, las siguientes herramientas: Librería Argotic: Argotic Syndication Framework es una librería de Microsoft .NET que permite a los desarrolladores consumir o generar contenido para redifusión web integrándolo en otras aplicaciones. El framework reconoce muchos formatos de redifusión web tales como RSS, Atom, OPML, APML, BlogML y RSD que son los más utilizados en páginas web. Librería Boilerpipe: Boilerpipe es una librería de código libre programada en Java que incorpora algoritmos para la detección y eliminación del desorden que presentan algunas páginas web. La librería proporciona estrategias específicas para acciones comunes, por ejemplo, extracción de artículos, y también puede ser fácilmente extendido para la configuración de los problemas individuales. Google Reader: Google Reader es un lector de RSS que permite organizar y acceder rápidamente a las noticias de páginas web previamente configuradas por el usuario, englobándolas todas en una web y permitiendo una integración de diferentes contenidos y tendencias que le ahorran tiempo. APIs de redes sociales: Diversas API proporcionadas por las principales redes sociales (Facebook, Twitter, Google+ y LinkedIn) para obtener el número de veces que una noticia se ha compartido en la red. Sistema desarrollado El sistema que finalmente se ha desarrollado se centra en una categoría concreta, en este caso temática de noticias del motor, y es capaz de recomendar noticias teniendo en cuenta unos artículos que visite un usuario y generar una serie de artículos recomendados ayudándose de RSS, puntuaciones de palabras clave, veces que se ha compartido la noticia e historial de otros usuarios. El diccionario creado para la temática en concreto, contiene un amplio listado de palabras que en mayor o menor medida aparecen en noticias de este tipo. Cada palabra recibe su puntuación en función de tres niveles que indican el grado de afinidad que ofrece con la temática para evitar problemas derivados de la polisemia. X La tecnología RSS permite que se puedan obtener todas las noticias de una página web con un formato estándar y que de esta forma sea más cómodo juntar una muestra representativa de noticias. Los propios lectores de noticias realizan un importante trabajo cuando las comparten. No es posible saber cuánta gente lee una noticia, ya que esa información es privada de la página web, pero sí es posible calcular el número de veces que se ha compartido la noticia en las redes sociales mediante el uso de las API que estas nos proporcionan. Para ajustar el número de veces que se ha compartido, se diseñó una métrica específica y probada en una gran variedad de iteraciones, que normaliza el cómputo global de votos en función del medio de transmisión de la noticia. Por último, la aplicación genera un informe que manda por correo al usuario con las principales noticias dentro de su temática Desafíos técnicos Hubo muchos desafíos técnicos a la hora de llevar a cabo el desarrollo de la aplicación. El principal problema que se encontró fue la problemática de los formatos. Cada página web tiene su formato, propio de los programadores que las realizan, lo que trae consigo la consecuencia de que para acceder al contenido RSS, a pesar de ser un formato estándar, no se respeta siempre, con lo que encontrar el enlace de una forma mecanizada constituye una tarea abrumadora. No obstante, se analizaron más de 500 enlaces de diferentes noticias no relacionadas entre sí y se estudiaron las diferentes casuísticas que se podrían presentar. Otro problema destacable es que la mayoría de los trabajos de extracción de palabras clave han sido diseñados para la lengua inglesa, dando pésimos resultados en español debido también a la mayor complejidad de su gramática. Para solventar este problema se acotó la temática a una específica y se diseñó un diccionario propio. XI Para solventar estos problemas el paso previo a la programación de cada módulo fue la investigación de tecnologías relacionadas, así como trabajos ya hechos que pudiesen aportar ideas innovadoras para la incorporación en el proyecto. Conclusiones El proyecto ha abarcado un amplio espectro de tecnologías de última generación relacionadas con la publicación de contenidos en foros, blogs, periódicos online y páginas web. Se ha construido un sistema de recomendación de noticias que responde a la necesidad de los usuarios de sintetizar el enorme flujo de información que reciben a diario. Un usuario que desee estar al corriente de las principales noticias de actualidad puede utilizar este sistema para ahorrar tiempo en la búsqueda por su cuenta de dicha información. Los objetivos iniciales se han cumplido en gran medida y son los siguientes: 1. Descubrir contenidos únicos, nuevos y relevantes, manteniendo a los usuarios del sistema siempre actualizados sobre sus intereses principales. Este objetivo está cumplido, el sistema es capaz de descubrir nuevos contenidos únicos a los usuarios debido a la interacción con otros usuarios y a llevar una posible cuenta de datos históricos. 2. Aprender, iterar y evolucionar las temáticas de interés de los usuarios y presentarles un resumen ejecutivo diario que reduzca la sobrecarga informativa. El resumen se genera de forma exitosa con los cinco artículos de mayor puntuación total y se envía por correo electrónico al usuario una vez al día. 3. Permitir al usuario establecer sus filtros, prioridades y gustos en función a unos parámetros, y así poder elaborar un perfil personal de cada usuario. Este objetivo se cumplió en gran medida debido a que ha sido imposible abarcar diferentes temáticas, XII centrándose solo en una temática de prueba, dada la dificultad del diccionario castellano. El perfil del usuario, no obstante, se elabora sobre la base de sus gustos de esta temática y se recomiendan noticias que encajen en esa temática atendiendo a un filtro de palabras clave por relevancia. Referencias [1] Cantador, I. & Castells, P. (2009): Proc. of RecSys’09 workshop 3: workshop on contextaware recommender systems. [2] Sinha, R. & Swearingen, K. (2001): Proc. of the DELOSNSF Workshop on Personalization and Recommender Systems in Digital Libraries, Dublin. [3] Wasserman, S. & Faust, K. (1994): Social Network Analysis, Cambridge University Press, Cambridge. [4] Babai, L. (1979): Technical Report DMS 79-10, Université de Montreal. [5] Burke, R. (2002): User Modeling and User-Adapted Interaction. XIII Analysis and social recommendation of news, blogs and content by correlation of social reputation, popularity and semantic relevance Author: Prado Montes, Alejandro Supervisor: Ferreiro Val, Diego Affiliation: Salesforce.com Abstract: In today’s world we have an ever-growing amount of information and online content available at our fingertips, redundant in many cases and of questionable relevance. Following all the hyperlinks shared in a social network feed can represent a daunting task for even the most avid users. We aim to simplify this via semantic analysis of metadata (what topics, categories, sites, authors, etc. a user interacts with) and social relevance (how often an article is shared online and how influential the individuals sharing it are to the user). This way we will be able to discover new content and potentially select that of higher relevance for the reader, producing a daily summary of news, concise, dynamic and beautifully packaged, maximizing the amount of high-quality content the user has access to and minimizing the amount of time required to browse through it. Technology The project has been developed using C# and Visual Studio 2012, integrated with a number of existing technologies, open source libraries and proven APIs to enhance the system functionality. Some examples follow: Argotic Framework: The Argotic Syndication Framework is a Microsoft .NET class library framework that enables developers to easily consume and/or generate syndicated content from within their own applications. The framework makes the XIV reading and writing syndicated content in common formats such as RSS, Atom, OPML, APML, BlogML, and RSD very easy while still remaining extensible enough to support common/custom extensions to the syndication publishing formats. The framework includes out-of-the-box implementations of the most commonly used syndication extensions, network clients for sending and receiving peer-to-peer notification protocol messages; as well as HTTP handlers, modules, services and controls that provide rich syndication functionality to ASP.NET developers. BoilerPipe: The boilerpipe library provides algorithms to detect and remove the surplus "clutter" (boilerplate, templates) around the main textual content of a web page. The library already provides specific strategies for common tasks (for example: news article extraction) and may also be easily extended for individual problem settings. Extracting content is very fast (milliseconds), just needs the input document (no global or site-level information required) and is usually quite accurate. Google Reader: Google Reader is a content application and platform provided by Google that is an aggregator of content served by web feeds. Social Network APIs: Various APIs provided by Facebook, Twitter, Google+ & LinkedIn to determine how often has a given URL been shared online. The system After several iterations the final service developed for this project is focused around a given category, motor news in our case. The system is able to recommend news articles accounting for content the user has visited in the past and generating a number of related articles obtained via RSS, weighting these against a set of key entities and terms and prorating the number of times a given article has been shared online, as well as history of related users. The dictionary created for the specified use-case contains a sizeable list of keywords that typically appear in related news. Each word or hashtag receives a weight depending on three levels which indicate the degree of affinity with the theme, in order to avoid problems related to polysemy. XV RSS technology allows us to crawl and obtain all the new articles published on a given website in a standard format. This syndicated content is easy for us to manipulate and aggregate for post-processing and sampling. News readers are in fact responsible for a critical part of the job when content is shared. Whilst it is not technically possible for the external observer to gather how many unique users read a particular piece of news -that information is private for the website- we can calculate the number of times the canonical URL has been shared in social networks via a number of public APIs. To better understand the number of times our target URLs have been shared across different services, we designed and tested a simple metric which allows us to normalize the global count of votes depending on what service we are querying against. Last but not least, the application will also generate an executive summary by email with the main articles inside each theme. Technical Challenges One of the key obstacles we had to overcome was format homogeneity –or lack of therefor-. It is apparent that every website on the World Wide Web has its own proprietary format, which means the mechanisms and XPATH expressions required to extract and parse the RSS content endpoints differ on a case-by-case basis. Sometimes the links are easily attainable via normalized elements, but often-times the actual XML links are present on specific pages that that may or may not have outbound references from the initial URL. We were able to analyze more than 500 hyperlinks of different unrelated sources and study the different characteristic they share. Another problem that needs to be highlighted relates to the natural language processing process. Most keyword extraction algorithms were designed for an English corpus, providing less-than-adequate results in Spanish, given the higher grammatical complexity. To address this concern we scoped the topics and designed a more tailored dictionary. XVI These problems needed to be resolved prior to implementing each module – It was clear that investigating the related technologies, as well as prior work, was critical to succeed in this task and leverage existing solutions as a common foundation for the project. Conclusions The project has covered a wide spectrum of state-of-the-art technologies as they relate with online publishing and syndication in blogs, newspapers, etc. We built a working recommendation engine that empowers users by synthesizing, aggregating and properly ranking the big influx of information they consume on a daily basis. A user that wants to keep up with the main events on a given subject can in fact leverage the system to save time and obtain more relevant and popular entries. The goals that we have accomplished so far can be summarized as follows: Discovery of unique, fresh and relevant content, keeping users always updated about their main topics of interest. This goal has been accomplished given the system is able to uncover new content based on past interactions and parsing of historical data Learns how to iterate and evolve themes and topics of interest to the user by presenting a daily summary digest that reduces overall information overload. The summary is generated successfully with the five most relevant articles and delivered once a day Allows the readers to establish filters, priorities and tastes given a number of derived parameters that generate a personal profile for every user. This goal was accomplished although it was not feasible to scope a large variety of different themes; hence, the scope is currently limited to a given category for the Spanish language. However, the user profile is built around the specific interests for that topic and relevant news are recommended based on a custom filter of words by relevance XVII UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA ÍNDICE DE LA MEMORIA Índice de la memoria Parte I Memoria .......................................................................................... 1 Capítulo 1 Introducción ................................................................................... 2 1.1 Estudio de los trabajos existentes / tecnologías existentes ........................... 2 1.1.1 Estudio sobre recomendación social .............................................................................. 3 1.1.2 Métricas.......................................................................................................................... 6 1.1.3 Actualización de la red ................................................................................................... 7 1.1.4 Análisis y simulación ..................................................................................................... 8 1.1.5 Propiedades de la red ................................................................................................... 12 1.1.6 Conclusiones ................................................................................................................ 14 1.2 Motivación del proyecto ................................................................................ 15 1.3 Objetivos......................................................................................................... 15 1.4 Metodología / Solución desarrollada ........................................................... 19 1.4.1 Fases del proceso de desarrollo .................................................................................... 20 1.4.2 Modelos de clases ........................................................................................................ 21 1.4.3 Arquitectura del sistema ............................................................................................... 22 1.5 Recursos / herramientas empleadas............................................................. 22 Capítulo 2 Registro y conexión vía OAuth .................................................... 24 2.1 Introducción ................................................................................................... 24 2.2 Protocolo OAuth ............................................................................................ 24 2.3 OAuth VS OpenID ........................................................................................ 25 2.4 Google Reader................................................................................................ 26 2.4.1 Acceso .......................................................................................................................... 27 2.5 Términos Generales ...................................................................................... 31 2.6 Ejemplo de fichero RSS ................................................................................ 32 XIX UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA ÍNDICE DE LA MEMORIA 2.7 Extracción del fichero RSS ........................................................................... 34 2.7.1 Obtención del enlace al fichero XML .......................................................................... 34 2.7.2 Extracción del fichero XML ........................................................................................ 36 2.8 Extracción de un artículo.............................................................................. 40 2.8.1 Definición de artículo ................................................................................................... 40 2.8.2 Herramienta Boilerpipe ................................................................................................ 42 2.8.2.1 Eficacia ................................................................................................................. 43 2.8.2.2 Métricas ................................................................................................................ 43 2.8.2.3 Resultados ............................................................................................................ 44 Capítulo 3 Extracción semántica de palabras clave ...................................... 48 3.1 Concepto de palabra clave ............................................................................ 48 3.2 Ejemplo de funcionamiento .......................................................................... 49 3.3 Desarrollo de un diccionario......................................................................... 50 Capítulo 4 Popularidad y relevancia del artículo .......................................... 54 4.1 Concepto de popularidad .............................................................................. 54 4.2 Compartir noticias ........................................................................................ 54 4.2.1 Conductas de los usuarios en el intercambio social ..................................................... 56 4.2.2 Conclusiones ................................................................................................................ 59 4.3 Contabilización de la popularidad ............................................................... 59 4.3.1 Acceso a Twitter .......................................................................................................... 60 4.3.2 Acceso a Facebook....................................................................................................... 63 4.3.3 Acceso a Google+ ........................................................................................................ 64 4.3.4 Acceso a LinkedIn ....................................................................................................... 65 Capítulo 5 5.1 Motor de correlaciones ................................................................. 68 Funcionamiento ............................................................................................. 68 Capítulo 6 Generación de resúmenes ............................................................ 72 6.1 Servidor de correo propio ............................................................................. 73 6.2 Utilización de servidor Gmail ....................................................................... 74 Capítulo 7 7.1 Descripción del Software .............................................................. 76 Funcionamiento de la aplicación a alto nivel .............................................. 76 XX UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA ÍNDICE DE LA MEMORIA 7.2 Funcionamiento de la aplicación detallado ................................................. 77 7.2.1 Generar Informe ........................................................................................................... 79 Capítulo 8 Caso ejemplo de funcionamiento ................................................. 82 Capítulo 9 Conclusiones ................................................................................. 90 Capítulo 10 Futuros desarrollos ...................................................................... 92 Bibliografía 94 Parte II Estudio económico........................................................................ 96 Capítulo 1 Estudio económico........................................................................ 98 1.1 Coste de la tecnología .................................................................................... 98 1.2 Coste de la implantación ............................................................................... 99 1.3 Costes operacionales.................................................................................... 100 1.4 Coste total ..................................................................................................... 100 1.5 Estudio de la rentabilidad ........................................................................... 101 Parte III Datasets ....................................................................................... 104 Capítulo 1 Dataset 1...................................................................................... 106 XXI UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Índice de ilustraciones Ilustración 1. Evaluación de los diferentes métodos de elección de líder. ............ 10 Ilustración 2. Vínculo de reciprocidad y coeficiente de clustering. ...................... 13 Ilustración 3. OpenID VS OAuth. ......................................................................... 26 Ilustración 4. Interfaz de lectura XML en Google Reader. ................................... 27 Ilustración 5. Fichero XML de suscripciones en Google Reader. ......................... 28 Ilustración 6. Código C# para acceder a Google. .................................................. 29 Ilustración 7. Código C# de acceso a Google Reader ........................................... 30 Ilustración 8. Enlace a contenido RSS. ................................................................. 32 Ilustración 9. Enlace a contenido RSS II. .............................................................. 33 Ilustración 10. Visualización de fichero RSS. ....................................................... 33 Ilustración 11. Enlace a fichero XML de forma relativa. ...................................... 35 Ilustración 12. Creación de un feed en Argotic. .................................................... 38 Ilustración 13. Código C# para tratar un feed genérico. ....................................... 39 Ilustración 14. Artículo genérico. .......................................................................... 40 Ilustración 15. Contenido específico de un artículo. ............................................. 42 Ilustración 16. Valores obtenidos en precisión, recall y F1 score. ........................ 45 Ilustración 17. Distribución de los documentos según las mediciones. ................ 46 Ilustración 18. Resultados de los casos especiales en Google News. .................. 46 Ilustración 19. Resultados de los casos especiales en los artículos aleatorios. ..... 47 Ilustración 20. Funcionamiento de Google Adwords. ........................................... 49 Ilustración 21. Palabras clave identificadas en un artículo de coches. .................. 52 XXII UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 22. Botones de social sharing. ............................................................. 55 Ilustración 23. Clickback VS ratio de compartición. ............................................ 57 Ilustración 24. Código JavaScript para búsqueda en Twitter. ............................... 61 Ilustración 25. Código JavaScript para la extracción de datos en Tweets. ........... 62 Ilustración 26. Ejecución de JavaScript desde C#. ................................................ 62 Ilustración 27. Parámetros de consulta en Google+. ............................................. 64 Ilustración 28. Respuesta de Google+. .................................................................. 65 Ilustración 29. Código de iteración sobre vectores de candidatos. ....................... 70 Ilustración 30. Ejemplo de un resumen ejecutivo de fútbol. ................................. 72 Ilustración 31. Código C# para el envío de un correo electrónico. ....................... 74 Ilustración 32. Código C# para enviar un correo con Gmail................................. 75 Ilustración 33. Funcionamiento de los diferentes módulos de la aplicación. ........ 77 Ilustración 34. Código C# relativo al cambio de formato PDF. ............................ 81 Ilustración 35. Menú de opciones de la aplicación. .............................................. 82 Ilustración 36. Profundización en la búsqueda de enlaces dado un artículo. ........ 83 Ilustración 37. Contenido de un artículo. .............................................................. 84 Ilustración 38. Relación de palabras claves y número de veces que se ha compartido la noticia. ............................................................................................ 85 Ilustración 39. Procesado de los artículos. ............................................................ 86 Ilustración 40. Resultado final del análisis. ........................................................... 87 Ilustración 41. Informe PDF sobre puntuaciones. ................................................. 88 Ilustración 42. Proceso de envío del email. ........................................................... 89 Ilustración 43. Informe PDF final. ........................................................................ 89 XXIII UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Índice de tablas Tabla 1. Parámetros de la simulación. ..................................................................... 9 Tabla 2. Estructura de la clase RSS. ...................................................................... 21 Tabla 3. Casos especiales en precisión, recall y F1 Score. ................................... 44 Tabla 4. Pesos ajustados para redes sociales. ........................................................ 68 Tabla 5. Pesos ajustados relativos a las palabras clave. ........................................ 69 Tabla 6. Costes de la tecnología empleada............................................................ 99 Tabla 7. Costes de la implantación. ..................................................................... 100 Tabla 8. Coste total del proyecto. ........................................................................ 101 XXIV UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Índice de ecuaciones Ecuación 1. Coeficiente de correlación de Pearson entre usuarios. ........................ 6 Ecuación 2. Vínculo de reciprocidad. ................................................................... 12 Ecuación 3. Coeficiente de clustering. .................................................................. 12 Ecuación 4. Probabilidad de encontrar un enlace. ................................................. 13 Ecuación 5. Precisión, recall y F1 Score. .............................................................. 43 Ecuación 6. Cálculo de la puntuación total de popularidad. ................................. 68 Ecuación 7. Cálculo de la puntuación total de relevancia. .................................... 70 XXV Parte I MEMORIA UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 1 INTRODUCCIÓN Hoy en día se dispone de demasiada información en Internet, mucha de ella duplicada y de dudosa relevancia. Seguir todos los enlaces que se comparten en redes sociales puede resultar una tarea abrumadora, que pretendemos simplificar mediante análisis semántico de metadatos: (qué temas, tópicos, autores, sitios y categorías suele visitar el usuario) y de relevancia social: (cuántas veces se comparte un artículo en Internet -globaly/o el interés personal del usuario -influencia local-). De esta forma seremos capaces de descubrir contenidos y potencialmente seleccionar los de mayor relevancia para el usuario, produciendo un resumen de enlaces y descripciones conciso, dinámico y elegante para el usuario final. 1.1 ESTUDIO DE LOS TRABAJOS EXISTENTES / TECNOLOGÍAS EXISTENTES En la web existen multitud de páginas web que permiten a los usuarios integrar su extenso rango de noticias de diferentes procedencias en un único punto y facilitar así su lectura. 2 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ejemplos que pueden ser citados son: Flipboard Pinterest News.me Zite StumbleUpon GetPrismatic Digg.com No obstante, la mayoría de estas páginas web no aprenden del usuario ni indagan en sus tendencias, contactos, o basándose en un registro histórico de una base de datos para predecir las nuevas noticias que podrían interesar al usuario. El usuario debe aportar mucha información al sistema, por lo tanto el sistema carece de la inteligencia necesaria para descubrirlo por su cuenta. En la web existen numerosos estudios sobre el arte de recomendación social de noticias. Uno de los estudios más destacados es el de la Universidad de Fribourg, Suiza [FRIB13]. 1.1.1 ESTUDIO SOBRE RECOMENDACIÓN SOCIAL Dicho estudio afirma que en un sistema de distribución de noticias con un número elevado de usuarios, por ejemplo, digg.com o reddit.com, miles de noticias se publican cada hora, por lo tanto un usuario se registra en el sistema sin ningún tipo de soporte y es bombardeado por un flujo enorme de información que se siente incapaz de asimilar. 3 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Los sistemas de recomendación social de noticias deben ayudar a los usuarios a tratar con la sobrecarga de información y encontrar contenidos que se ajusten a sus intereses. En los sistemas tradicionales las noticias relevantes se entregaban a los usuarios atendiendo a sus perfiles y actividades históricas con un mecanismo de recomendación centralizado que se ejecutaba para toda la red. Los usuarios compartían información unos con otros en una conexión punto a punto. La idea del punto a punto se basa en que todos los nodos en un sistema tienen la misma función: un nodo puede obtener servicio de otro nodo actuando de cliente y a su vez actuar de servidor para proveer servicio a terceros. El sistema que propone el estudio se implementa con un desarrollo punto a punto. Cada usuario, considerado como un nodo de la red, no obtiene noticias directamente del nodo central sino que puede recomendar noticias directamente a otros usuarios (sus “seguidores”) y al mismo tiempo recibe noticias de la comunidad. Así cada nodo actúa como seguidor y líder a la par. Cuando un usuario recibe noticias de otro y le gustan, las retransmite a sus seguidores. Si a sus seguidores también les gustan, las vuelven a retransmitir y así sucesivamente. La retransmisión de la noticia sigue una línea exponencial como si de la expansión de un virus se tratase. Además, las conexiones en la red cambian constantemente con lo cual se aseguran de ese modo múltiples vías de retransmisión para el contenido. La actualización del líder es crucial para el hecho de que se comparta. Un método efectivo de actualización puede ser que cada usuario elija un líder con gustos muy similares a los suyos. Este sistema sería sencillo y poco costoso. Se valoraron diferentes métodos, su rendimiento y escalabilidad, analizándose las propiedades que implican a la estructura de la red con simulaciones. 4 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Hay muchas técnicas comúnmente propuestas por los investigadores que se pueden clasificar en tres categorías principales: basado en contenido, filtrado colaborativo y métodos de filtrado social. Basado en contenido: Estos métodos intentan clasificar los elementos de acuerdo a su contenido (por ejemplo, palabras clave) y extraer las preferencias de los usuarios basándose en un historial. Esos dos elementos se usan para obtener la recomendación social: se hace una unión entre ambas características buscando el máximo acierto con el perfil del usuario. Filtrado colaborativo: Consiste en hacer predicciones sobre los intereses de un usuario a base de recolectar información de la comunidad a la que este pertenece, con la esperanza de que los gustos que añadió en el pasado los siga conservando en la actualidad. Se emplean métodos basados en la difusión para una extracción más eficiente, encontrando similitudes entre usuarios o conceptos que se pueden considerar como extensiones del filtrado colaborativo. Filtrado social: Se basa en las relaciones de los usuarios en un entorno social para obtener las recomendaciones buscadas. Estos métodos asumen que los usuarios prefieren recomendaciones realizadas por un amigo antes que por un sistema centralizado. En otras palabras, la influencia social es más determinante para los usuarios a la hora de decidir qué leer que las actividades pasadas. Generalmente, un sistema de recomendación social puede dividirse en dos partes: tirar y empujar, lo que significa que, en primer lugar, un usuario selecciona a otros usuarios como fuentes de información y puede tirar de la información de esas fuentes (por ejemplo, Delicious.com) y por último cada usuario empuja lo que le gusta a otros usuarios que lo aceptan a él como fuente de información (por ejemplo, Twitter.com). 5 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Un buen sistema de recomendación debe combinar esos tres métodos, junto con una topología de red que los optimice. La red líder-seguidor se define constantemente de acuerdo a los gustos del usuario, para que las noticias sean entregadas de forma más eficiente a sus lectores potenciales. Esta combinación de recomendación social con similitudes es particularmente efectiva: La presencia de enlaces directos hace que el proceso de recomendación sea rápido y escalable, mientras que el uso de patrones y la redifusión de información mejora la experiencia del usuario y los contactos. 1.1.2 MÉTRICAS La similitud de gustos entre usuarios se prevé utilizando una correlación estadística de calificación de historias de usuario. Se adopta un coeficiente de correlación de Pearson para un par de usuarios i y j. Ecuación 1. Coeficiente de correlación de Pearson entre usuarios. Donde ri,c y rj,c son los ratios otorgados a esos dos usuarios para noticias c y ri y rj son los ratios medios de i y j. Si,j ∈ [−1, 1] con Si,j > 0 indica que el usuario i y j tienden a estar de acuerdo en la evaluación de noticias mientras que si Si,j < 0 indica que no están de acuerdo. La puntuación de similitud es diferente de la utilizada en otros mecanismos. Esto es porque se asume que los usuarios valoran las noticias en una escala binaria ri,c=1, si al usuario le gusta la noticia c , y por otra parte ri,c=0 si no le gusta. En 6 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA otras palabras, no se contempló un ratio intermedio de gusto, si le gustaba a medias o más o menos. La elección del coeficiente de correlación de Pearson se explica por el hecho de que se puede usar también para sistemas que otorgan a los usuarios ratios explícitos de noticias. Asimismo la elección de otras métricas como la del coeficiente de Jaccard o Cosine no altera el comportamiento del sistema. Este postulado se sostiene también para métricas similares, porque la diferencia del ratio de patrones entre usuarios similares se hace cada vez más pequeña mientras ellos evalúan más y más noticias. Se utilizan métodos heurísticos para evitar problemas relacionados con la disparidad de los datos. Si dos usuarios no tienen evaluaciones entonces el sistema establece que Si,j=S0 con S0 un valor pequeño y fijo para cada par de usuarios. También es conveniente asignar Si,j=-1 cuando un usuario pone todo positivo o todo negativo para evitar que corrompa el buen funcionamiento del sistema. Para una escalabilidad del sistema no se almacena el resultado de las puntuaciones entre cada pareja de usuarios, solo se contabilizan las historias leídas por los usuarios, en las cuales las puntuaciones computadas son muy parecidas. En otras palabras, la información se distribuye en la red: cada click es una historia, la cual es almacenada en un nodo por sí mismo, está disponible para otros nodos y se puede recuperar de ellos para mejorar las tareas locales como asignar puntuaciones a las noticias entrantes o actualizar conexión con otros nodos. 1.1.3 ACTUALIZACIÓN DE LA RED Cuando un usuario se conecta al sistema, este comprueba todas las noticias que no ha leído desde su última conexión y elabora una lista de aquellas que mejor se 7 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA adaptan a él, atendiendo a criterios de puntuación. La puntuación en cada noticia es igual a la similitud entre usuario y líder como ya se explicó anteriormente, así que una puntuación muy elevada en una noticia implicará que se mostrará al usuario. Cuando las fuentes son variadas, la puntuación no se suma para prevenir un colapso, cada noticia solo puede ser recomendada una vez a un usuario. De ese modo, cuando el usuario recomienda noticias, las pondrá en una lista de espera para que las vean sus seguidores. Es importante llevar la cuenta de noticias que el usuario ha leído para que no le lleguen repetidas. Además, las listas de noticias en cola para leer deben de ser limitadas en longitud y, cuando se llenen, la primera que llegó (la de más antigüedad) puede ser substituida por una más reciente. Para hacer que los contenidos más recientes sean visibles, la lista se limpia cuando el usuario se desconecta. Las diferencias entre seguidor y líder se pueden identificar gradualmente. Se utilizará esta información para definir vecinos locales a la red y mejorar la propagación de noticias: de vez en cuando se encuentran similitudes con nuevos líderes que reemplazan a los antiguos. El objetivo es mantener en el sistema solo la información necesaria para que el uso computacional sea bajo y el sistema gane en eficiencia y robustez. 1.1.4 ANÁLISIS Y SIMULACIÓN Se asumieron trece vectores de simulación de gustos y un sistema con 8192 usuarios. Otros datos de interés se reflejan a continuación: 8 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Parámetro Notación Valor Tamaño de la red Longitud de gustos del usuario Número de líderes de cada usuario Probabilidad de estar conectado Probabilidad de entregar cuando está online Período de actualización del líder Longitud de las listas Noticias leídas cuando están online Umbral de aceptación Valor inicial de similitud N=2^D D L P0 8192 13 13 0.02 Ps u l k θ s0 0.01 10 100 10 6.5 0.1 Tabla 1. Parámetros de la simulación. Actualizar el líder consiste en encontrar para un usuario específico i al menos un líder similar (usuario j) y reemplazar el líder actual por uno nuevo. Algunos métodos sencillos para llevar a cabo este procedimiento son: De forma aleatoria: Se selecciona un líder de forma totalmente aleatoria. Aleatorio selectivo: El nuevo líder se selecciona por el método anterior pero se reemplaza solo si su similitud con el usuario es mayor (si no lo es se siguen sacando líderes hasta que se tenga uno que sí lo sea). Mejor líder aleatorio: El nuevo líder k es un usuario elegido de forma aleatoria entre los mejores líderes del usuario i. Basado en memoria global: El nuevo líder k es el usuario de la red con la mayor similitud con i. A continuación se muestran dos gráficas que evalúan el rendimiento de los diferentes métodos en fracción de la aprobación y exceso de diferencias: 9 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 1. Evaluación de los diferentes métodos de elección de líder. No es escalable con respecto al tamaño del sistema. Se utiliza solo como una prueba teórica para otros métodos. Se aprecia como los métodos aleatorios son peores en cuanto a resultado, pero hay que considerar que tienen un coste 10 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA computacional inferior, del orden de O(N) frente a los otros algoritmos que presentan un orden de O(N^2). Comparando el método aleatorio con el aleatorio selectivo, puede ser más lento en la exploración de la red, pero es más meticuloso en la elección. Por lo tanto, algunas veces al final alcanza el mismo resultado que el otro método. El método basado en memoria global explora los vecinos con un coste computacional de orden O(N * D), siendo D valores símiles para identificar al mejor líder de entre todos los usuarios; alcanza un estado de la red fuerte casi óptimo y tiene el peor rendimiento en fracción de aprobación. Esto se debe a que con este procedimiento un usuario puede intercambiar información exclusivamente entre su líder y ello limita el rango de posibilidades de selección y podría no tener contacto con otros gustos si no se distancia de su líder. En algunas ocasiones los usuarios no tienen facilidades para cambiar sus preferencias, simplemente porque no pueden encontrar unas mejores. Asimismo los usuarios hacen decisiones independientemente de lo que han elegido. El equilibrio del sistema está ligado al buen funcionamiento del método de intercambio empleado y es necesaria una interacción semanal del sistema con los agentes. De esta forma, el método de actualización permite a los usuarios descubrir nuevos gustos y actualizarse ellos mismos, equilibrando el sistema y cada agente en particular. Cada usuario está ligado a sus gustos, no hay una configuración mejor en términos de asignación del líder a sus seguidores. 11 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 1.1.5 PROPIEDADES DE LA RED Comparando los métodos de actualización desde el punto de vista de la topología de la red se puede describir la red como: Vínculo de reciprocidad: Es la tendencia de un par de nodos a formar conexiones entre ellos mismos. Esta cantidad se define como el ratio entre el número de links bidireccionales y el número total de links de una red: Ecuación 2. Vínculo de reciprocidad. Coeficiente de clustering: Es la tendencia de una red a formar herméticamente vecinos conectados. Esta cantidad se calcula como el ratio entre el número de triángulos que un usuario forma con sus vecinos y el número total de posibles triángulos que podría formar, ponderado sobre todos los usuarios. Ecuación 3. Coeficiente de clustering. A continuación se muestra la evolución del vínculo de reciprocidad en las redes con diferentes métodos de actualización. En las redes aleatorias iniciales la probabilidad media de encontrar un enlace recíproco entre dos vértices conectados es igual a la media de la probabilidad de encontrar un enlace entre dos o más vértices. 12 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 2. Vínculo de reciprocidad y coeficiente de clustering. Responde a la siguiente fórmula: Ecuación 4. Probabilidad de encontrar un enlace. 13 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 1.1.6 CONCLUSIONES Las webs hoy en día sobrecargan a los usuarios con un exceso de información que no son capaces de digerir. La tarea realmente dura para un lector no es leer las noticias, sino encontrar nuevas noticias que puedan interesarle. Por ello, los sistemas de recomendación de noticias son una solución a este problema. Las relaciones sociales son muy útiles para descubrir noticias potencialmente interesantes. El método explicado previamente combina memoria con recomendación social: las puntuaciones de las noticias se contabilizan con ratios del pasado a través de recomendaciones que vienen solo por las fuentes de información seleccionadas. Otra importante característica de este modelo es que la topología de la red puede redefinirse constantemente de acuerdo a las similitudes y gustos de los usuarios, para trabajar de forma eficiente en la entrega de noticias. Los algoritmos propuestos son de bajo coste computacional para que su efectividad sea mayor y no constituya un sistema pesado. Hay muchos aspectos que no se han tenido en cuenta, como por ejemplo, que ciertos usuarios puedan tener más reputación, actividad y generosidad que otros, asimismo que las noticias puedan ser más frescas o de mejor calidad, noticias falsas o fuentes no corroboradas. Otro punto importante es que cualquier sistema de recomendación debe defenderse de posibles ataques maliciosos de otras comunidades, que sistemáticamente introducen noticias falsas o intentan intencionadamente un mal funcionamiento del sistema en sí. 14 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Se pueden introducir medidas de confianza y reputación de usuarios para evitar estos problemas, así como contar con la presencia de un administrador que vigile la aparición de estos fenómenos. 1.2 MOTIVACIÓN DEL PROYECTO Este proyecto pretende ayudar al usuario a descubrir nuevas fuentes de noticias ricas y rigurosas mediante la información que aprende de él y de otros usuarios. La lógica de esto es que un usuario por sí mismo tiene más complicado el acceso y búsqueda de nueva información que sea de su interés. Apoyándose en los demás usuarios y en las características semánticas comunes encontradas en las noticias que este lee, se pueden encontrar más noticias y así ampliar la información que el sujeto recibe. Además, el usuario recibe un resumen de lo que más le interesa, evitando así el exceso de información producido por la cantidad de medios al alcance del mismo. Un filtrado y una preselección de la información ayudan a que esta sea más concisa, técnica y relevante para sus destinatarios finales y ello conlleva un ahorro sustancial del tiempo de los mismos y mayor interés en lo que están leyendo. 1.3 OBJETIVOS Como objetivos principales del proyecto se proponen: 1. Descubrir contenidos únicos, nuevos y relevantes manteniendo a los usuarios del sistema siempre actualizados sobre sus intereses principales. 15 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 2. Aprender, iterar y evolucionar las temáticas de interés de los usuarios y presentarles un resumen ejecutivo diario que reduzca la sobrecarga informativa. 3. Permitir al usuario establecer sus filtros, prioridades y gustos en función de unos parámetros y así poder elaborar un perfil personal de cada usuario. El objetivo número uno se puede resumir en ampliar las fronteras del usuario. El usuario normalmente visita un número pequeño de blogs, páginas de noticias u otros medios de comunicación a diario. Ello conlleva que pueda perder información que, a priori, le resultaría interesante por el hecho de no visitar otras direcciones. Para ampliar sus fronteras y descubrirle nuevas temáticas relacionadas o nuevos proveedores de noticias, el sistema analizará minuciosamente sus gustos así como los de otros usuarios con perfiles similares. El sistema se ayuda del análisis semántico para extraer aquellos campos clave que contienen noticias visitadas por el usuario y entender así cuál es la temática. Una vez que se define bien la temática, se buscan mediante múltiples medios, más abajo detallados, noticias que al usuario le puedan interesar y se hace un listado con las que próximamente se priorizarán, y se mostrarán aquellas más relevantes. El segundo objetivo es el que se necesita para llevar a cabo exitosamente el primero. El usuario desea ampliar sus fronteras, por lo tanto el sistema tiene que aprender de sus gustos personales. Inicialmente el sistema no dispone de conocimiento sobre el usuario, pero ello se solventa paulatinamente, ya que el usuario, poco a poco, proporciona información al sistema. Primero seleccionando una serie de materias de interés, y después comunicándole al sistema, si lo que este le envía es adecuado, o por el contrario no es de su agrado. El sistema se ayuda además de datos históricos de otros usuarios, por lo cual un usuario antiguo con perfil similar a uno nuevo ayuda a este con sus gustos. El 16 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA sistema además es capaz de buscar noticias de interés para el usuario ayudándose de tecnologías como RSS que permiten englobar noticias de una temática concreta en un mismo espacio informativo. Por último, una vez que el sistema se ha nutrido de noticias interesantes para el usuario, hace un listado y prioriza en función de lo que cree que le interesará más al usuario. Lo reduce lo máximo posible presentando así un resumen ejecutivo al usuario con esas noticias que más le pueden interesar de la actualidad del día. Este proceso se hará a última hora del día suponiendo que el usuario desea recibir esas noticias a las 9 o a las 10 de la noche. El último objetivo, y no por ello menos importante, es permitir que el usuario pueda personalizar aún más sus gustos y parámetros para que el sistema sea más preciso. Podrá configurar su resumen, haciéndolo más o menos extenso, más o menos detallado; así como podrá también definir qué tipo de noticias dentro de una temática son más agradables para él, por ejemplo, si las prefiere más técnicas o más de “aficionado”. Para la consecución de dichos objetivos se llevará a cabo el desarrollo de 7 módulos que a continuación se detallan: Registro y conexión vía OAuth con Google Reader, Twitter y Facebook: Consiste en implementar una interfaz de conexión vía OAuth para acceder a los datos útiles del usuario sobre sus gustos y tendencias en Google Reader y redes sociales. Esto permitirá extraer mucha información útil sobre las noticias que le pueden interesar. Extracción RSS (de un artículo) y crawling de feeds RSS: Módulo que trata por un lado de separar el contenido principal del artículo de todo 17 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA aquello que le rodea y no constituye información relevante para el análisis, y por otro lado busca noticias relacionadas con ese artículo mediante extracción RSS y obtención de feeds. Extracción semántica de palabras (keywords), entidades, relaciones, nombres y categorías de un artículo (procesamiento natural del lenguaje): Dado un artículo ya extraído, obtener las palabras clave que lo definen, las relaciones que presenta en su redacción, la categoría en la que se puede encuadrar, etc… Popularidad / relevancia del artículo: No todos los artículos son igual de relevantes, un artículo que sea noticia en todo el mundo es algo muy importante, como la muerte de un líder político o el anuncio de un nuevo papa. La relevancia del artículo va ligada al número de personas que lo han leído. Motor para correlacionar datos de artículos encontrados a diario acorde con gustos de usuario, tendencias históricas aprendidas en interacciones pasadas con el sistema. El sistema sigue un constante aprendizaje que hace que cada vez funcione mejor y conozca los gustos del usuario a medida que avanza en el tiempo. Además, se apoya en los conocimientos aprendidos con otros usuarios para ilustrarse con los nuevos. Generación de resúmenes diarios y envío de los mismos por correo: Una vez encontradas las noticias de interés para el usuario, se genera un resumen ejecutivo y elegante de las mismas, junto con sus enlaces y se envía por correo electrónico al usuario. 18 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Captura de enlaces recibidos por correo y fase dos de análisis semántico y metadatos para artículos que satisfacen al usuario: Además de las anteriores tecnologías y fuentes de información mencionadas el usuario también puede recibir información relevante vía correo electrónico y ello es una mina de datos muy rica para su análisis. 1.4 METODOLOGÍA / SOLUCIÓN DESARROLLADA La metodología que se va a llevar a cabo para el desarrollo del proyecto es la conocida como Scrum. Es un marco de trabajo para el desarrollo de software con agilidad, que se basa en un proceso iterativo e incremental. Scrum define una serie de roles y un conjunto de prácticas que se llevarán a cabo durante el proyecto. Un Sprint es un periodo de tiempo definido durante el cual se produce un incremento del software definido por un Product Backlog. Los elementos de este Product Backlog son definidos en una reunión de planificación y serán los objetivos a trabajar durante la duración del siguiente Sprint. La ventaja principal de esta metodología de trabajo, es que si se desea cambiar algún aspecto o idea concerniente a la aplicación, es más sencillo de modificar sin que afecte a la estructura del proyecto, pudiendo así ajustarse a pequeños cambios. Esto es debido a que ningún problema complejo que se aborde puede ser completamente entendido o definido y se permite así aprovechar al máximo el potencial de los desarrolladores [SCRU13]. 19 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA La metodología Scrum será adaptada al proyecto, debido a que no existe un cliente ni un equipo. El alumno realizará reuniones semanales con el director de proyecto para mostrarle el avance del trabajo semanal realizado y que este verifique que todo va según lo previsto. En cada reunión se marcarán objetivos nuevos y se comprobará la consecución de los previos, a la vez que se moldeará y se ampliará el proyecto. Dicho proceso de adaptación responde a la necesidad de orientar el ciclo de trabajo hacia un modelo de desarrollo del tipo ciclo en cascada. A continuación se detallarán en profundidad las diferentes fases del proceso de desarrollo, modelo de clases y arquitectura del sistema. 1.4.1 FASES DEL PROCESO DE DESARROLLO El proyecto se ha realizado secuencialmente dividiéndolo en diferentes fases que se han completado poco a poco, y algunas de ellas abarcaron todo el proceso de desarrollo: Investigación: Inicialmente se analizaron herramientas existentes, así como tecnologías, estudios ya realizados, estado del arte… Pero el análisis fue constante debido a que cada apartado que se pretendía desarrollar exigió un nuevo reto e investigación de tecnologías existentes, tales como librerías o aplicaciones que mejoraran la funcionalidad requerida. Análisis de arquitectura: Análisis y decisión de la arquitectura donde se pretendía instalar la aplicación. Diseño: Se modeló inicialmente un prototipo de la aplicación que se fue perfeccionando y mejorando a medida que avanzó el proyecto. Hubo que hacer importantes cambios según la idea original para adaptarse a los nuevos requerimientos que fueron surgiendo. 20 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Desarrollo: Programación de los diferentes módulos, funciones, rutinas e interfaz necesarios para el funcionamiento de la aplicación. Pruebas: Una vez programado, se realizaron una serie de pruebas con diferentes parámetros, perfiles, urls. El conjunto de datos de pruebas a utilizar fue de más de 500 url pertenecientes a artículos independientes entre sí en español e inglés, obtenidas gracias a la colaboración de diversas personas. Se puede consultar una pequeña muestra de ese dataset de pruebas en la Parte III del Anexo de Datasets. Documentación: Una vez terminada la aplicación se procedió a la documentación final con el formato acorde a la normativa y la posterior revisión por parte del alumno y director. No obstante, el proceso de documentación ha sido una constante durante el desarrollo del proyecto para la facilitación del mismo. 1.4.2 MODELOS DE CLASES En el proyecto se ha utilizado C#, que es un lenguaje que acepta la programación orientada a objetos. Se ha empleado una variedad de objetos enorme en el desarrollo de la aplicación. A continuación, se muestra un ejemplo de un tipo de objeto empleado: Nombre del atributo Tipo Descripción Título Subtítulo Logo Icono Lenguaje Autores Categorías Fecha de subida Última fecha de actualización String String Image Image String String String Date Título del artículo Subtítulo del artículo Logo de la página Icono representativo Idioma de escritura Escritores de la noticia Categorías relacionadas Fecha de publicación Date Fecha de la última actualización Tabla 2. Estructura de la clase RSS. 21 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA La clase RSS es aquella en la que se almacena la información que proporciona un RSS una vez se ha extraído. Para más información, en el capítulo 3 se detalla su funcionamiento. 1.4.3 ARQUITECTURA DEL SISTEMA La arquitectura será la típica de cliente-servidor. Es decir, se coloca la aplicación como un servidor que recibe clientes (usuarios) y tramita sus peticiones enviándoles la respuesta en el menor tiempo posible. La conexión a Internet es permanente y necesaria para su funcionamiento, y a su vez la aplicación hace de cliente, consultando otras páginas (por ejemplo, accediendo a servidores RSS) y descargando datos. Por lo tanto, se podría decir que los usuarios se conectan al servidor y el servidor, a su vez, se conecta a otros servidores que le otorgan la información necesaria para su motor. 1.5 RECURSOS / HERRAMIENTAS EMPLEADAS El proyecto se desarrollará principalmente en C# .NET. Habrá módulos y librerías desarrolladas en otros lenguajes, también se utilizarán APIs para facilitar el acceso a ciertos recursos. Software C# .NET, NodeJS, SQL Server, Github, RSS.NET, Zemanta, Opencalais, Embedly, Twitter APIs, Google Reader APIs, Facebook APIs, librerías OAuth varias 22 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Hardware Windows Azure (VMs Windows, Backend) / Amazon EC2 & Heroku (NodeJS, frontend) 23 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 2 REGISTRO Y CONEXIÓN VÍA OAUTH 2.1 INTRODUCCIÓN En este capítulo se analizará el acceso a Google Reader, Twitter y Facebook mediante el protocolo OAuth, también se verá en qué consiste dicho protocolo y cómo se ha llevado a cabo. 2.2 PROTOCOLO OAUTH OAuth es un estándar abierto para autorización. Aporta un sistema de acceso para clientes en nombre de un proveedor de recursos (tercera entidad diferente del cliente final). Autoriza a los usuarios a acceder a recursos alojados en servidores de una tercera persona sin compartir sus credenciales (usuario y contraseña, por ejemplo) mediante el uso de redirecciones usuario-agente. La última versión de OAuth 2.0 simplifica el acceso para aplicaciones web, de escritorio, móviles y dispositivos electrónicos. Actualmente, portales web tales como Facebook y Google solo soportan está versión, siendo la misma incompatible con la anterior. OAuth se implementa sobre SSL delegando en el protocolo todas las características de seguridad que ya implementa, tales como encriptación, enlace de canales o verificación del cliente. 24 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Puede utilizarse como mecanismo para consumir feeds RSS de forma segura. Por ejemplo un RSS contenido en un Google Site que sea privado no se puede leer mediante Google Reader, pero se puede utilizar OAuth para autorizar a Google Reader el acceso a ese feed [OAUT12]. 2.3 OAUTH VS OPENID Con OpenId, el proceso empieza con la aplicación preguntándole al usuario por su identidad (una autenticación típica de aplicación) y este le responde con sus credenciales. En caso de OAuth la aplicación solicita un token específico (valet key) para acceder a la API (“a la casa”) de la tercera entidad en su nombre. La petición contiene el destino, pero no contiene todavía las credenciales. Si el usuario puede realizar ese acceso, la aplicación le devuelve un identificador único para su perfil utilizando las APIs. En ese caso el acceso, a la tercera entidad implicará una autenticación hacia él, salvo que ya exista una sesión activa. El resultado en OpenID es que la aplicación permite al usuario acceder porque se fía del proveedor de OpenId, pero en el caso de OAuth permite al usuario acceder porque se fía de su propia valet key ya que él ha sido quien la generó. A continuación, se muestra una ilustración que aclara el proceso anteriormente explicado: 25 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 3. OpenID VS OAuth. 2.4 GOOGLE READER Google Reader es un lector de RSS que permite organizar y acceder rápidamente a las noticias de páginas web previamente configuradas por el usuario englobándolas todas en una web, haciendo así una integración de diferentes contenidos y tendencias que ahorran tiempo al usuario. Google dejará de dar este servicio a partir de Julio de 2013 por diversos intereses comerciales. En la siguiente imagen se ve la interfaz de este medio, el cual da la opción de suscribirse y pide una url del feed o de la página que lo contiene. A modo de 26 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA ejemplo, se ha probado a suscribirse a www.elmundo.es y automáticamente cogió la dirección del XML: http://estaticos01.cache.el-mundo.net/elmundo/rss/portada.xml. En la siguiente imagen se puede apreciar cómo reconoce automáticamente los feeds del XML, así como su interfaz: Ilustración 4. Interfaz de lectura XML en Google Reader. 2.4.1 ACCESO El proceso por el cual Google Reader identifica la dirección del fichero XML, se supone, es muy parecido al implementado por la aplicación del presente proyecto. Analiza el código fuente e identifica la dirección agregándola a las suscripciones del usuario. Google Reader ofrece unas funcionalidades a sus usuarios a mayores de la posibilidad de leer noticias, tales como compartirlas mediante Gmail, organizarlas según una categoría, acceso fuera de línea, una interfaz intuitiva… 27 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Google Reader agrega a una lista las suscripciones del usuario, con lo cual es posible acceder a ella para sacar las direcciones de los feed, que es lo que interesa para el proyecto. Para acceder a ello es necesario estar identificado con la cuenta de Google, ya que es un servicio más, por ejemplo Gmail. Para dirigirse a la lista de direcciones se accede mediante la url: http://www.google.com/reader/api/0/subscription/list?output=xml. La salida será en formato XML, lo cual simplifica su posterior tratamiento. A continuación se muestra el fichero XML mencionado: Ilustración 5. Fichero XML de suscripciones en Google Reader. Para acceder al XML mediante C# se puede hacer de la siguiente manera: 28 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 6. Código C# para acceder a Google. Primero es necesario autentificarse con Google, por eso mismo la primera petición a sus servidores será enviar los datos de la conexión (usuario y contraseña). Se crea una WebRequest con la dirección www.google.com/accounts/ClientLogin y mediante el método POST de HTML se envían los datos por el protocolo seguro HTTPS. Se recoge en una WebResponse la respuesta del servidor, que devuelve un “ticket” de autentificación. 29 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA A continuación se procede de la siguiente forma: Ilustración 7. Código C# de acceso a Google Reader La función getToken() recibe el “ticket” de autentificación como parámetro. Crea otra petición web a www.google.com/reader/api/0/token que le devuelve otro token de la aplicación de Google Reader. Ahora mediante el método GET se envía como cabecera la autorización de Google previamente obtenida. Si la respuesta a dicha petición es negativa entonces no se dispone de acceso y terminaría el programa. En caso positivo se obtiene el token para acceder a Google Reader y ya se puede acceder al fichero XML. 30 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 2.5 TÉRMINOS GENERALES RSS significa Really Simple Sindication. Es un formato XML definido para compartir contenidos web. La información más reciente en forma de noticias se publica en este medio y los usuarios que están suscritos a la fuente de contenidos pueden acceder a ella de una forma fácil y rápida. No necesita un navegador para visualizar la información, es suficiente con un agregador de contenidos. Aunque muchos usuarios acceden mediante navegador y existen diferentes pluggins que facilitan el trabajo. Asimismo, los navegadores más modernos incorporan un sistema de detección de RSS sofisticado que elimina la necesidad de los pluggins. Se le conoce como redifusión web (o sindicación web) ya que es un formato XML, desarrollado para sitios web de frecuente actualización (diarios, blogs, canales de televisión…) y que permite interactuar entre webs y otorga un fácil acceso desde un programa. Hay tres estándares definidos de este formato: RSS 0.91: “Rich Site Summary” RSS 0.9 y 1.0: “RDF Site Summary” RSS 2.0: “Really Simple Sindication” En este proyecto se trabaja con el último estándar RSS 2.0, aunque la compatibilidad hacia atrás no es un problema a priori. 31 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Un RSS realmente es un simple archivo de texto con extensión .xml o .rss que contiene las referencias a diversos contenidos publicados en la página web. El formato XML está diseñado para que lo entiendan los lectores RSS o agregadores, además garantiza la existencia de una serie de etiquetas definidas con un formato conocido y que respetará las reglas generales de XML. En este archivo se encuentran varios campos interesantes que varían en función del sitio web, los más comunes son: Título Fecha de publicación Descripción Enlace a la noticia 2.6 EJEMPLO DE FICHERO RSS A continuación se muestra un ejemplo de RSS en un diario de noticias español. Se accede a www.elmundo.es y en el pie de página se observa lo siguiente: Ilustración 8. Enlace a contenido RSS. El símbolo de RSS con sus letras conforma un enlace a la página para suscribirse a los contenidos más actuales. 32 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Al analizar el código fuente se observa la siguiente línea en el <head> de la página: Ilustración 9. Enlace a contenido RSS II. “type” nos dice que se trata de un formato rss+xml (información relevante para el análisis posterior del código fuente). “tittle” es el título, que en este caso hace referencia al RSS con las noticias que aparecen en portada. “href” indica la dirección donde se encuentra el fichero .xml para la extracción del contenido. Accediendo a la dirección: http://estaticos01.cache.el-mundo.net/elmundo/rss/portada.xml Se encuentra un listado de noticias que coinciden con las que aparecen en portada, con una fecha, un enlace (que figura como el título de la noticia a la vez) y un breve resumen de la misma. Además da la opción de lectura automática mediante un audio ya grabado. Ilustración 10. Visualización de fichero RSS. 33 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 2.7 EXTRACCIÓN DEL FICHERO RSS Para la extracción del fichero RSS se descompone el problema en dos módulos: Por un lado, la obtención del enlace al fichero XML. Por otro lado, la extracción del propio fichero XML. 2.7.1 OBTENCIÓN DEL ENLACE AL FICHERO XML Como se ha visto anteriormente, para acceder al fichero XML es necesario encontrar la URL en el código fuente de la página web. Este proceso que parece trivial entraña varios problemas: 1. El formato de cada página web es diferente, por lo tanto la ubicación del enlace varía. En algunas páginas web se encuentra en el <body>, en otras se encuentra en el pie de página e incluso es posible encontrarlo al margen derecho del artículo. 2. Además de la ubicación, es posible que el enlace se repita en distintas partes del código fuente, o que existan varios ficheros XML con distintas temáticas. Por ejemplo, en un periódico es usual tener una redifusión de la portada y múltiples redifusiones correspondientes a diferentes categorías. 3. La dirección del fichero XML puede ser relativa a la ubicación de la página web, de forma similar a los ficheros .css o imágenes. Por ejemplo: 34 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 11. Enlace a fichero XML de forma relativa. Se observa que /cache/rss/sec_comarcaslu_es.rss es relativo a la página principal que es www.elprogreso.es/cache/rss/sec_comarcaslu_es.rss. Para tener en cuenta todas las casuísticas existe una librería de código libre que se encarga de obtener la url del XML. Dicha librería se llama Html Agility Pack y se ha empleado para facilitar el desarrollo. Html Agility Pack soporta formatos XPATH o XSLT y es muy tolerante con los distintos formatos que se pueden encontrar en la web. Usa un formato de objeto muy parecido al de System.XML. A diferencia de este formato, está diseñado específicamente para ficheros HTML, documentos o flujos de datos y soporta relaciones de objetos [AGIL13]. Sus tres funcionalidades principales se resumen en: Fijación de página o generación: Se puede fijar cualquier página que se desee y modificar el DOM (Modelo de Objetos del Documento), añadir nodos, copiar nodos, etc… Escáneres web: Ayuda a acceder fácilmente a las subcarpetas utilizando consultas XPATH. Escarbadores web: Permite escarbar en una web para encontrar un feed RSS o cualquier otro archivo. 35 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 2.7.2 EXTRACCIÓN DEL FICHERO XML Una vez obtenida la dirección del fichero XML se procede a su extracción. Debido a que existen diferentes formatos para un fichero XML, que varían según la versión o la tecnología empleada (ya sea ATOM o RSS, por ejemplo), es necesario contar con una herramienta que sea capaz de funcionar de forma autónoma abstrayéndose de un formato en particular. Para el desarrollo de este módulo se ha empleado el framework Argotic Syndication. Argotic Syndication es una librería de Microsoft .NET que permite a los desarrolladores consumir o generar contenido para redifusión web, integrándolo en otras aplicaciones. El framework reconoce muchos formatos de redifusión web tales como RSS, Atom, OPML, APML, BlogML y RSD que son los más utilizados en páginas web. También incluye implementaciones de las extensiones de redifusión web más comunes, conexiones cliente-cliente parar enviar y recibir mensajes de notificación “peer-to-peer” y también controladores HTTP, así como módulos y servicios que proveen una rica funcionalidad en el contexto de la redifusión web para desarrolladores en ASP.NET. Para la correcta integración en el proyecto, una vez instalado el framework, se debe integrar en el proyecto mediante los siguientes pasos: Herramientas Gestor de librerías y paquetes Consola Escribiendo el siguiente comando en la consola: PM> Install-package Argotic.core 36 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA De esta forma, Argotic queda integrado en el proyecto y se importarán sus funciones con una referencia a Argotic.Syndication. Cada página web tiene un formato diferente, lo que hace que a su vez el formato de redifusión que utilicen pueda variar. Esto implica que no se puede predecir el formato que se encuentre Argotic al leer un fichero XML. Argotic puede trabajar en “formato agnóstico”, es decir, obtiene información general de un feed común con diferentes formatos. Una vez identificado el formato puede hacer un cast a un formato específico para visualizarlo con más detalle. Las clases necesarias para la utilización del formato agnóstico están incluidas en el paquete Argotic.Syndication. Un feed genérico según Argotic contiene las siguientes propiedades: Categorías: Colección de categorías asociadas a un feed. Descripción: Resumen para el usuario de lo que trata el feed. Formato: Indica el formato del feed. Items: Una colección de objetos que representa distinto contenido publicado en un feed. Idioma: Indica el idioma en que el feed está escrito. LastUpdateOn: Fecha de la última modificación que ha sufrido el feed. Recurso: Objeto que implementa una interfaz para representar una abstracción del feed actual respecto al feed genérico. Título: Otorga el nombre al feed. A su vez un ítem se divide en: Categoría, fecha de publicación, resumen y título. Una categoría consta de dos partes: Esquema y término. 37 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Para consumir un feed se usa el siguiente proceso: Se crea un GenericSyndicationFeed con la url del fichero XML. Para obtener dicha url dentro de la página web se empleará Html Agility Pack. Ilustración 12. Creación de un feed en Argotic. Se crea un formato y se le asigna al del formato del feed. Se extraen los datos de título, descripción, idioma, fecha de actualización… Ahora se procede a extraer la categoría y los ítems del feed. Por último, se puede hacer un casting al tipo de formato, y sabiendo que se trata de RSS, por ejemplo, se trataría de la siguiente forma: 38 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 13. Código C# para tratar un feed genérico. Una de las características que más interesa obtener es la URL del artículo para su posterior análisis. 39 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 2.8 EXTRACCIÓN DE UN ARTÍCULO Una vez que se han obtenido las direcciones de los artículos mediante RSS (aunque es posible obtenerlos por más medios), se procede a su tratamiento y análisis. 2.8.1 DEFINICIÓN DE ARTÍCULO Definimos un artículo web como aquella página, bien sea un periódico online, una cadena de noticias, un blog, un foro de debate o cualquier otro servicio de información, que provee al usuario de noticias sobre una temática específica y que divide los contenidos en diferentes sub-páginas las cuales conforman artículos. Véase a continuación el siguiente artículo tomado de un periódico online. Ilustración 14. Artículo genérico. 40 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Como se ve en la imagen, el artículo está integrado en una página web de noticias y el contenido que corresponde al artículo no es la totalidad de la página mostrada al usuario. Para empezar el artículo dispone de un título y una imagen que captan la atención del lector. El cuerpo del artículo ocupa la parte central de la página y está perfectamente delimitado por unos márgenes. Se observa como a la derecha del artículo aparecen una serie de enlaces, probablemente a otras noticias o información de interés relacionada. A la derecha aparecen otros enlaces que bien podrían ser un índice de contenidos de la página. Se muestra también una cabecera que es común para todos los artículos y que facilita la navegación dentro del sitio web. Por último, el pie de página muestra una información adicional al artículo acerca de derechos de copyright u otros datos de autoría y redacción. Como se ha podido observar, lo que realmente importa para la extracción del artículo y posterior análisis de su contenido es lo que constituye el contenido en sí del mismo. Por lo tanto, se precisa de una herramienta que sea capaz de hacer análisis de una página web para extraer exclusivamente el contenido del artículo desechando aquella información, publicidad e información relacionada con el sitio web que no interesa para dicho análisis. En definitiva, lo que se necesita extraer es, en el ejemplo anterior, lo representado en blanco en la siguiente figura: 41 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 15. Contenido específico de un artículo. 2.8.2 HERRAMIENTA BOILERPIPE Aquí es donde entra en juego la herramienta Boilerpipe. Boilerpipe es una librería de código libre programada en Java que incorpora algoritmos para la detección y eliminación del desorden que presentan algunas páginas web [BOIL13]. La librería proporciona estrategias específicas para acciones comunes, por ejemplo, extracción de artículos y también puede ser fácilmente extendida para la configuración de los problemas individuales. El proceso de extracción es muy rápido, unos milisegundos, solo necesita la entrada del documento como parámetro (no necesita información adicional sobre el mismo), y tiene una precisión muy alta. 42 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 2.8.2.1 Eficacia Para probar la eficacia de Boilerpipe se hicieron múltiples análisis comparándola con otras herramientas. Uno de esos análisis consistió en leer 681 documentos recolectados de diferentes páginas web, artículos, blogs, e incluso listas de correo electrónico y, por otro lado, 621 documentos recolectados de un conjunto de Google News incluido en la librería Boilerpipe. Son dos dominios totalmente diferentes, los artículos de Google News representan un dominio específico de artículos con un formato similar y los otros son artículos sin ningún formato parecido entre sí debido a su aleatoriedad. Para realizar el análisis, diferentes personas utilizaron el navegador web Lynx para filtrar aquellas estructuras que creían sobrantes en los artículos y quedarse solo con la información que creían relevante de la web. Además, en el conjunto de datos de Google News se introdujeron más anuncios mediante etiquetas. 2.8.2.2 Métricas Se utilizó precisión, recall (capacidad para recordar) y puntuación F1 que se definen de la siguiente manera: Ecuación 5. Precisión, recall y F1 Score. Dado un fichero HTML, se puede recuperar la secuencia de palabras y nombrarlas como Sret. Consecuentemente se llama Srel a la secuencia de palabras relevantes en el texto. 43 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ambas secuencias se construyen con el siguiente procedimiento: Eliminación de etiquetas html. Eliminación de caracteres de puntuación. Eliminación de caracteres de control. Eliminación de aquellos caracteres que no pertenezcan a la tabla ascii. Pasar todas las mayúsculas a minúsculas. Dividir en espacios en blanco. La intersección entre lo recuperado y la secuencia relevante de palabras se calcula utilizando el algoritmo Ratcliff-Obershelff. Hay que contemplar 4 casos especiales en las operaciones: Precisión Recall F1 Caso 0 0 Infinito Desajuste, las propiedades recuperada y relevante no están vacías pero no intersectan entre sí. Infinito 0 Imposible La recuperada está vacía. El documento observado no posee contenido. 0 Infinito Imposible La relevada está vacía, el documento no contiene nada útil. Infinito Infinito Las dos están vacías, el documento no Imposible contiene materia útil y el extractor no consigue nada. Tabla 3. Casos especiales en precisión, recall y F1 Score. 2.8.2.3 Resultados Para evaluar la competencia de Boilerpipe se utilizaron a mayores del mismo los siguientes extractores: NCleaner, Readability, Goose, Alchemy API, Extractiv, Repustate API, Diffbot. 44 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Tratándose de extracción de artículos, es un problema genérico; no es un dominio específico para ninguno de estos programas, pero todos tienen en común esa propiedad: Son capaces de discernir, a partir de un fichero HTML, si un texto es inútil o contiene información importante separando ambos. Los resultados de calcular la precisión y el recall para cada uno de los conjuntos de datos y los programas utilizados fueron los siguientes: Para el conjunto de datos de Google News (izquierda) y para el conjunto de artículos al azar (derecha): Ilustración 16. Valores obtenidos en precisión, recall y F1 score. A continuación se analizó la distribución de los documentos por las mediciones. En lugar de calcular las fórmulas, se exploraron las medidas en cada documento. 45 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 17. Distribución de los documentos según las mediciones. En los casos especiales es donde se aprecia realmente el éxito o el fracaso de la extracción: Para Google News: Ilustración 18. Resultados de los casos especiales en Google News. 46 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Para los artículos aleatorios: Ilustración 19. Resultados de los casos especiales en los artículos aleatorios. En estas dos últimas imágenes se ha podido observar como Boilerpipe es una herramienta muy efectiva para la extracción de artículos, y desbanca a sus rivales, en algunos casos, con mucha ventaja. 47 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 3 EXTRACCIÓN SEMÁNTICA DE PALABRAS CLAVE 3.1 CONCEPTO DE PALABRA CLAVE En el contexto informático, una palabra clave se define como un término, que un usuario de Internet introduce en buscadores tales como Google, para indicar al motor de búsqueda que está por debajo de aquellos conceptos que quiere encontrar. Son las ideas principales de un texto (ya sea una frase o un párrafo) que, en pocas palabras, destaca la idea principal que el escritor de dicho texto quiere transmitir. En Internet existen muchas herramientas para la extracción de palabras clave de las cuales destacan tres que pertenecen a Google: Herramienta de Adwords para la extracción de palabras clave. Google Trends. Google Analytics. Estas herramientas permiten obtener la palabra clave en un texto y también examinar las diferentes relaciones que tienen esas palabras clave con las búsquedas de los usuarios en la web. Se pueden establecer filtros que determinen la procedencia de las búsquedas y el perfil de usuario que está realizando dicha búsqueda, siempre con la idea de captar más visitas y nuevos clientes. 48 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 3.2 EJEMPLO DE FUNCIONAMIENTO Utilizando la ya mencionada herramienta Adwords, introducimos una noticia de un diario español en la que se habla del presidente Mubarak y las revueltas en Egipto. El resultado es el siguiente: Ilustración 20. Funcionamiento de Google Adwords. Como se puede ver a partir de la noticia extra las siguientes palabras clave: Revueltas Egipto. Mubarak muerte. Mubarak Egipto. Denuncias por amenazas. Siria revueltas. Egipto revueltas. Muerte Mubarak. 49 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Además, para cada palabra relacionada extraída, es capaz de obtener la competencia de la palabra clave, las búsquedas globales mensuales y las búsquedas locales. Esta información, a priori interesante, acarrea un problema para el desarrollo del proyecto: Se basa en búsquedas en la web por diferentes usuarios apoyándose en el análisis del texto, pero no aporta la precisión necesaria. Otras librerías examinadas y probadas fueron: Embedly. Zemanta. Calais viewer. Alchemy API. Diffbot. Vozaa. Otro problema añadido que presentaron dichas librerías, fue, principalmente, el hecho de estar diseñas para textos en inglés y ese factor disminuye notablemente su precisión en español. Una de las mejores fue Alchemy API, que, además de las palabras clave del texto, es capaz de identificar el lenguaje, ciudades, países, personas y organizaciones. 3.3 DESARROLLO DE UN DICCIONARIO A raíz de los problemas anteriormente mencionados, se tomó la decisión de elaborar una librería propia para la extracción de palabras clave. 50 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Como el vocabulario español es tan extenso y está compuesto por más de 100.000 palabras sería muy tedioso elaborar una librería para diversos temas. Para simplificar el proceso lo que se hizo fue desarrollar una librería para una temática en concreto, por ejemplo artículos del motor. El funcionamiento es simple: Una vez que se ha realizado la extracción del artículo (explicada en el apartado 3.4) se pasa el texto del artículo, por un filtro de palabras clave definido, que lea el artículo palabra a palabra, basándose en los espacios en blanco entre palabras y de fin de párrafo. Dicho filtro detecta si el artículo contiene, al menos, una de esas palabras y cuantas más palabras contenga, más relacionado estará con la temática. A más palabras contenidas, obtendrá mayor reputación para el análisis final, que con el criterio de popularidad (número de veces que se comparte un artículo), le dará una puntuación final para entrar o no en el cupo de cinco noticias recomendadas del día. Para la elaboración de dicho diccionario, se analizó previamente una serie de más de 200 artículos del motor pertenecientes a diversas páginas web que, junto con la experiencia personal del desarrollador en esta temática, contribuyeron a la elaboración de un rico diccionario de palabras clave. A continuación se muestra parte del contenido de un artículo referido a la temática del motor, señalando en negrita las palabras clave que el sistema podría identificar. 51 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 21. Palabras clave identificadas en un artículo de coches. Hay que señalar que estas palabras puede que pertenezcan a otro tipo de artículos de diferentes temáticas, debido a la polisemia de las mismas. Por ese motivo la aparición de unas pocas palabras en un texto no significa, que este encaje con una noticia del motor; lo más normal es que una noticia del motor tenga muchas palabras clave destacadas. Si aparecen pocas significará que es una noticia que, por casualidad, contiene palabras clave o que tiene una ligera relación con dicho campo, pero no es lo que se busca. Para mejorar el sistema, se establece una división en palabras clave según su relevancia baja, media y alta. A continuación, se explican y se pone un ejemplo de cada una de ellas: Relevancia baja: Aquellas palabras que no digan mucho sobre el mundo del motor, pero que puedan estar relacionadas. Ejemplos: Habitáculo, casco, espejos… Relevancia media: Aquellas palabras que estén muy relacionadas con el mundo del motor. Ejemplos: Circuito, revoluciones, kilómetros, asfalto… Relevancia alta: Son palabras que no cabe duda alguna de que se utilizan en un artículo de coches. Ejemplos: Audi, BMW, DTM, Nascar, rally… 52 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 53 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 4 POPULARIDAD Y RELEVANCIA DEL ARTÍCULO 4.1 CONCEPTO DE POPULARIDAD Por popularidad de un artículo se entiende el número de personas que han visto un artículo determinado. Pueden o no leerlo en su totalidad, es posible que lo compartan e incluso que dejen algún comentario si la página web lo permite. Saber el número de personas que leen un artículo es imposible, debido a que esa información solo la puede tener la página web que lo alberga y no se puede saber con exactitud, ya que hay usuarios que abren la noticia y no la leen, o que la leen entre líneas. 4.2 COMPARTIR NOTICIAS Lo que sí se puede averiguar es cuánta gente ha compartido esa noticia. Cuando una persona accede a una noticia suele encontrarse una serie de botones comúnmente conocidos como social sharing buttons (botones para compartir el contenido de la página web con otras personas). Compartir una noticia en una red social significa que todos los contactos de la persona que la comparte pueden ver la referencia a la noticia y acceder a ella mediante un enlace, lo cual además conlleva una mayor probabilidad de que 54 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA accedan por el hecho de que la persona es amiga y les está recomendando dicho artículo por considerarlo interesante. A continuación se muestra una instantánea de dichos botones en un artículo: Ilustración 22. Botones de social sharing. Además se observa en este caso que junto a los botones hay un número que indica la cantidad de personas que la ha compartido en Facebook y en Twitter. El número acompañando al botón de compartir no siempre está presente, incluso en algunas páginas web está desactualizado por culpa de un error de programación. Por lo tanto, no sirve para extraer el número exacto de veces que se ha compartido dicho artículo. Conocer el número de veces que ha sido compartido el artículo, da una idea de las personas que han podido llegar a verlo gracias a las redes sociales. Ello no implica que solamente lo hayan visto mediante las redes sociales, ya que pueden acceder a la página y consultarlo por su cuenta en cualquier momento, y solo la página lo 55 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA sabría. Pero es una información de vital importancia que conviene analizar. Se analizaron cuatro redes sociales: Facebook, Twitter, Google+, LinkedIn. A modo de ejemplo, se conocen dos datos: Un usuario de Facebook tiene una media de 130 amigos [FACE13]. Un usuario de Twitter tiene una media de 208 seguidores [BEEV13]. En el ejemplo de la ilustración 22 rápidamente se puede calcular que 1.690 personas han podido ver el enlace al artículo vía Facebook y 11.648 vieron un Tweet con la url del contenido mencionado. En la práctica todo esto es relativo, porque se trabaja con la hipótesis de que todos los contactos lo leerán y no sucede así. Además, para cada temática existe mayor o menor tendencia a compartir y acceder a los enlaces por parte de los contactos del sujeto que difunde el artículo. 4.2.1 CONDUCTAS DE LOS USUARIOS EN EL INTERCAMBIO SOCIAL Se han realizado diferentes estudios a lo largo de los años para determinar el comportamiento de los usuarios ante la visualización de contenidos específicos, y cuáles son sus motivaciones para compartir contenido con sus contactos en función de una u otra temática. Un estudio reciente elaborado por 33Across [ACRO13], compañía que se especializa en el análisis del intercambio social, arrojó una interesante conclusión: El intercambio social está impulsado por el ego. 56 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 33Across examinó 450 publicaciones pertenecientes a 24 categorías distintas y el comportamiento social de los usuarios a la hora de compartir enlaces. Se establecieron dos variables para el estudio: El ratio de compartir artículos se calcula dividiendo el número de veces que se ha compartido entre el número de visitas que recibe la página. Este ratio permite normalizar los datos para operar matemáticamente con ellos. El clickback se calcula dividiendo el número de clicks en los enlaces compartidos de una web por el número total de veces que se comparte. Las conclusiones que se obtuvieron visualmente fueron las siguientes: Ilustración 23. Clickback VS ratio de compartición. 57 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA La gráfica muestra en el eje de las X lo que nosotros, como usuarios, compartimos frente a lo que nuestros contactos leen en el eje Y. Se observan claramente 3 categorías diferenciadas en las que se pueden encuadrar los contenidos compartidos. Lo que se conoce como compartir desde el punto de vista egocéntrico suele englobar más artículos tecnológicos o científicos. Aproximadamente de cada 100 artículos que un usuario lee de estas dos temáticas, comparte unos 12. No obstante, resulta curioso que solo hay un 9% de clicks por parte de los contactos de esos usuarios. Esto es un ratio muy bajo si lo comparamos con temáticas diferentes. La explicación que 33Across encontró a este fenómeno, es que un usuario comparte contenido, que difícilmente entiende para sentirse identificado con ese tópico y hacer ver a sus contactos que se trata de una persona culta y entendida en la materia. Efectivamente, es para aumentar el ego personal del usuario. La practical sharing consiste en compartir con los contactos desde el punto de vista práctico, temáticas de viajes, compras, consejos… que pueden ayudar a nuestros contactos, pero que en la práctica ni se comparten mucho ni se visitan demasiado una vez compartidos. Cotilleos y temas de la prensa rosa son poco compartidos, ya que muchos usuarios tienen miedo de que sus contactos crean que se interesan por temas banales y de baja calidad intelectual. Por todo ello, es muy raro que los compartan, aunque frecuenten esas páginas. El fenómeno curioso se da una vez compartido el enlace. Se observa que el ratio de visitas a dicho enlace es muy alto, es decir, los contactos están interesados en el tema pero evitan decirlo públicamente. 58 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Los ratio más altos de clickback son las noticias, aproximadamente un 86% de los contactos que ven el enlace hacen click en él para informarse. Lo que lleva a un usuario a compartir noticias con sus contactos, es el hecho de descubrir la novedad, noticias que acaban de salir y de las que ellos quizás no se han enterado todavía. Podría decirse que tienen una parte de ego y una parte que consiste en impresionar dando una noticia novedosa. 4.2.2 CONCLUSIONES A raíz de este estudio se concluye que no se puede tener en cuenta por igual el número de noticias compartidas sin distinguir primero su temática. Por todo ello, para el proyecto se ha tenido en cuenta que, por ejemplo, las noticias de actualidad presentan un porcentaje mayor de clicks una vez compartidas, que las noticias de ciencias y tecnología. Esta información es muy relevante para el motor de correlaciones que se encargará de discernir y decidir, basándose en la popularidad, categorías, enfoque, gustos del usuario y tendencias pasadas, qué noticias pueden interesarle más al lector. 4.3 CONTABILIZACIÓN DE LA POPULARIDAD Una vez analizado el concepto y en qué consiste compartir una noticia, para llevarlo a cabo, es necesario trabajar con las APIs de Facebook y Twitter. Dichas APIs son públicas y existen para varios lenguajes de programación. 59 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 4.3.1 ACCESO A TWITTER Twitter presenta una particularidad a la hora de compartir urls con otras personas que consiste en acortar los enlaces. Por ejemplo dada la web www.elmundo.es, si un usuario escribe un tweet con dicho enlace, Twitter al publicarlo automáticamente acortará el enlace, y siempre tendrán el mismo formato http://t.co [TWSO13]. Dichos enlaces son públicos, se puede acceder a ellos a pesar de no tener en la red de amistades a la persona que los difunde, por tanto ello facilita el análisis exterior de los mismos. Twitter utiliza este sistema por tres razones: Los enlaces acortados permiten a los usuarios no excederse en el número máximo de 140 caracteres que esta red social establece. Acortando los enlaces se protege a los usuarios de sitios peligrosos donde existe malware, phising y otras formas de hacking. Twitter analiza el enlace cotejándolo con una lista de sitios inseguros que se actualiza constantemente. Medir la cantidad de veces que se hace click en un enlace para poder determinar la relevancia de un tweet o del contenido que se esconde más allá del enlace. Para el proyecto, el tercer punto es lo realmente relevante, debido a que nos permite medir el número de clicks realizados en el enlace para el estudio que se llevará a cabo. Para dicha funcionalidad se desarrolló un pequeño módulo que se ejecutará en forma de script en lenguaje JavaScript dentro de un fichero html. 60 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 24. Código JavaScript para búsqueda en Twitter. Para obtener los tweets pertenecientes a un hashtag (o un enlace en concreto) se crea una petición mediante JSON a Twitter a la dirección http://search.twitter.com/search.json?q=. Se mandan concatenados con la url citada los siguientes parámetros: Búsqueda: Campo de búsqueda (en este caso la url compartida). Page: Página que se desea buscar (si hay muchos tweets Twitter los muestra en páginas consecutivas que se van acumulando). Callback: Opción habilitada para que haga callback. Una vez que ejecuta la petición, se obtienen los resultados (si los hay) y se pasa a extraerlos. 61 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 25. Código JavaScript para la extracción de datos en Tweets. Se extraen los datos del resultado de la búsqueda en la primera página aumentando el número total de Tweets (información relevante) y se continúa la extracción, llamando la anterior función getTweets. Una vez que esté funcionando el módulo se integra con el programa en C#. Debido a que esta parte fue desarrollada en JavaScript, es preciso llamarla desde el programa fuente en C#. Ilustración 26. Ejecución de JavaScript desde C#. Para invocar el método RegisterStartUpScript se le pasan 5 parámetros: Control: El control que registra el bloque (en este caso es el main). Type: El tipo de control que registra el bloque. Key: Identificador del script. Script: El script en JavaScript que se desea ejecutar. AddScriptTags: Para añadir automáticamente las etiquetas <script> y </script> o no. 62 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA De esta forma se ejecuta el código JavaScript y se obtiene como resultado el número de Tweets en los cuales se halla el enlace. 4.3.2 ACCESO A FACEBOOK Facebook dispone de una función dentro de su API que simplifica mucho el proceso. Simplemente basta con hacer una petición HTTP a una página de Facebook y retornará en formato JSON el número de veces que se ha compartido dicho artículo en la red social. La petición HTTP debe realizarse a la dirección: http://graph.facebook.com/?id=URL El parámetro id indica la url del artículo buscado, entonces Facebook devuelve lo siguiente: { "id": "URL_ARTICULO", "shares": X } Se obtiene de forma sencilla el número de veces que el artículo fue compartido en Facebook. 63 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 4.3.3 ACCESO A GOOGLE+ Google+ tiene una forma muy similar a Facebook, la única diferencia es que exige tener una clave para acceder a la API. Para tener dicha clave, es necesario registrarse en Google como desarrollador y se otorga la clave de manera gratuita. Una vez obtenida la mencionada clave, se envía mediante el método POST una petición HTTP a la siguiente dirección: https://clients6.google.com/rpc?key=CLAVE_API Y en el contenido del body de dicha petición se debe incluir la siguiente información con los parámetros adecuados en función de la consulta: Ilustración 27. Parámetros de consulta en Google+. Google responderá con la siguiente información: 64 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 28. Respuesta de Google+. Por lo tanto, con la variable count se obtiene el número de veces que se ha compartido la noticia en Google+. 4.3.4 ACCESO A LINKEDIN Para obtener el número de veces que un artículo se ha compartido en LinkedIn, simplemente basta con hacer una petición HTTP a su API: http://www.linkedin.com/countserv/count/share?url=URL&format=json Sustituyendo la url por la que se busca, el resultado será devuelto en formato JSON de la siguiente manera: { "count":X, 65 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA "fCnt":"Y", "fCntPlusOne":"Z", "url":"URL" } El valor que nos interesa es el de la variable count ya que los demás valores son muy similares, pero pueden variar en función de diversos parámetros. 66 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 67 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 5 MOTOR DE CORRELACIONES 5.1 FUNCIONAMIENTO El motor de correlaciones es el que realiza el proceso de generación del resumen. Recibe toda la información necesaria y se encarga de procesarla y decidir qué noticias serán las que se envíen en el resumen al usuario final. Uno de los parámetros que recibe es el número de veces que una noticia se ha compartido en Facebook, Twitter, Google+ y LinkedIn. Dicho funcionamiento se explicó previamente en el capítulo 4. Pero la métrica tuvo que ser ajustada, por lo cual, después del estudio realizado y de numerosas pruebas de ejecución, se tomó la decisión del ajuste de pesos los pesos de las noticias a los siguientes valores: Red Social Facebook Twitter Google+ LinkedIn Peso 2 3 1 1 Tabla 4. Pesos ajustados para redes sociales. El peso es el factor por el cual se multiplica el número de veces que se ha compartido el artículo en la red social obteniendo la puntuación unitaria final para la noticia. Por lo tanto, la puntuación final total se deduce de la siguiente fórmula: Total = (Faceebok*2) + (Twitter*3) + (Google+*1) + (LinkedIn*1) Ecuación 6. Cálculo de la puntuación total de popularidad. 68 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA La justificación de dicha métrica explicada para cada red social es la siguiente: Facebook (2): Facebook es una red social donde la gente comparte las noticias y es muy probable que muchos de sus amigos sigan el enlace. Twitter (3): Es la red social donde más se comparten contenidos y está diseñada para facilitar ese proceso, por lo tanto si un usuario que comparte algo en Twitter, es muy posible que esa noticia sea leída por más personas que en cualquier otra red social. Google+ (1): Se otorga una puntuación tan baja a Google+ debido a la escasa tasa de uso y contactos que presenta en comparación con las otras redes. LinkedIn (1): Aunque tiene un número elevado de usuarios, las personas que utilizan LinkedIn típicamente no lo hacen para mirar enlaces que puedan compartir sus contactos. Una vez calculados los pesos para la puntuación de noticias, el sistema procede a calcular la puntuación para las palabras clave. La puntuación según las palabras clave se calcula teniendo en cuenta los parámetros de relevancia ya explicados en el capítulo 4. Los pesos se pueden verificar en la siguiente tabla: Relevancia Baja Media Alta Peso 1 2 3 Tabla 5. Pesos ajustados relativos a las palabras clave. Como ya se explicó anteriormente, las palabras de relevancia baja pueden aparecer en otros artículos no citados. Por ello, su puntuación se debe reducir ante la posibilidad de que ellas se repitan mucho en el texto, de ahí el peso 1. 69 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Las palabras de relevancia media aportan valor al artículo, pero puede que se utilicen en otros contextos raramente, por lo tanto su peso es de 2. Las palabras de relevancia alta son las que de verdad deben aparecer en todo artículo del motor y entonces su peso de 3 contribuye a potenciarlas por encima de las otras. Al final, se obtiene una puntuación total que se calcula de forma sencilla con la siguiente fórmula: Total= (Baja*1) + (Media*2) + (Alta*3) Ecuación 7. Cálculo de la puntuación total de relevancia. Una vez obtenidas las puntuaciones totales, se itera sobre todos los enlaces extraídos seleccionando los 5 mejores de la siguiente forma: Ilustración 29. Código de iteración sobre vectores de candidatos. Se aprecia como hay un vector con los posibles candidatos que va recorriendo el de puntuaciones para decidir así cuáles son los 5 mejores. Para evitar repeticiones, 70 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA una vez que se encuentre al mejor candidato, se pone como “peor candidato” al elegido, dejando ahora al segundo candidato en primer lugar para su posterior elección. 71 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 6 GENERACIÓN DE RESÚMENES Los resúmenes que se entreguen al usuario serán resúmenes ejecutivos; es decir, en un breve espacio hay que sintetizar lo máximo posible la información que se pretende dar. El usuario recibirá al final del día un resumen con las principales noticias de interés atendiendo a las temáticas que el sistema irá aprendiendo. El contenido del mismo será de 5 noticias inicialmente, aunque podría variar. La noticia vendrá acompañada de una breve descripción (que facilitará al usuario unas pinceladas de su contenido) y un enlace para seguir la noticia y visualizarla en el sitio web original. Un ejemplo de dicho resumen para una temática de fútbol sería el siguiente: Ilustración 30. Ejemplo de un resumen ejecutivo de fútbol. De esta forma el usuario estará informado inmediatamente de las noticias de interés más relevante que sucedieron ese día. 72 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Los resúmenes se generan en texto plano en el servidor y se necesita otro servidor de correo para enviar ese texto al usuario. 6.1 SERVIDOR DE CORREO PROPIO Un servidor de correo utiliza el protocolo SMTP que permite que los mensajes de correo electrónico lleguen de un host a otro. El principal problema de montar un servidor “casero” de correo electrónico es que los principales proveedores de correo electrónico puede que detecten el mensaje como SPAM. Para evitar esto y que todo funcione perfectamente, es necesario realizar una serie de pasos mínimos y una serie de configuraciones: Registrar un dominio en Internet. Instalar un apache. Instalar un servidor DNS para resolver direcciones. Instalar un agente de transporte de correo. Una vez configurado todo, ya se puede automatizar el envío de correos a los diferentes usuarios. Para enviar un correo en C# se utiliza su librería System.Net.Mail, que contiene los métodos necesarios para comunicarse con el servidor de correo y que este envíe los correos. El código fuente necesario para dicho proceso se muestra a continuación: 73 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 31. Código C# para el envío de un correo electrónico. El servidor está escuchando en el puerto 25 y valida el usuario y contraseña. Si ese usuario es correcto envía el correo a la dirección de destino. 6.2 UTILIZACIÓN DE SERVIDOR GMAIL Para simplificar el proceso y garantizar un servidor con disponibilidad 24/7 y una buena reputación global (evitando que se desechen los correos por detección errónea de SPAM), es posible utilizar el servidor de Gmail. Para ello simplemente hace falta tener una cuenta de correo electrónico en Gmail y emplear el código que se muestra a continuación: 74 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 32. Código C# para enviar un correo con Gmail. Lo primero es introducir el destinatario, crear un System.Net.Mail.MailMessage con los parámetros de destino, origen, asunto, sistema de codificación, cuerpo del mensaje, sistema de codificación del mensaje (si es HTML). Se crea un SmtpClient que hace la conexión por el puerto 587 a Gmail, siendo el host smtp.gmail.com con las credenciales que no son otras que usuario y contraseña de la cuenta en cuestión. Si todo va bien, se enviará el correo sin más novedad. 75 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 7 DESCRIPCIÓN DEL SOFTWARE En el presente capítulo se describe con detalle la estructura interna de la aplicación dando una visión general de su funcionamiento y posteriormente una visión detallada del mismo. 7.1 FUNCIONAMIENTO DE LA APLICACIÓN A ALTO NIVEL La aplicación desarrollada en C# se ha programado inicialmente en consola, pero fácilmente se puede exportar el código a una interfaz gráfica más visible utilizando las potentes herramientas de diseño que Visual Studio 2012 ofrece. Se ha dividido la aplicación en una serie de módulos para facilitar su programación: Main LeerRSS Popularidad GetAuth GetXML GenerarInforme EnviarCorreo Boilerpipe 76 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA La interrelación que presentan dichos módulos se puede apreciar a continuación en forma de DFD: Ilustración 33. Funcionamiento de los diferentes módulos de la aplicación. Los círculos amarillos representan los 8 módulos principales de la aplicación. Los rectángulos verdes son entidades externas a las que la aplicación accede y el rectángulo gris es el diccionario de palabras clave. 7.2 FUNCIONAMIENTO DE LA APLICACIÓN DETALLADO A continuación se explica el funcionamiento interior de los 8 módulos presentados en el apartado anterior con más detalle, así como la información que se intercambian entre ellos siguiendo el flujo normal de información. 77 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA El Main es el programa principal, presenta un sencillo menú por pantalla con las opciones disponibles para el usuario. A su vez es el encargado de hacer las llamadas a los diferentes módulos programados en forma de funciones de tipo private que solo él puede invocar. El Main llama a GetAuth para que se encargue de obtener la autorización necesaria con Google. GetAuth envía a Google el binomio usuario y contraseña que conforman las credenciales solicitadas por el proveedor de servicios y este en caso de ser correctos los datos le devuelve un token de autorización que permite el acceso a todos sus servicios. GetAuth delega entonces la responsabilidad en GetXML que se encargará de extraer los enlaces XML correspondientes a los gustos que el usuario tenga marcados en Google Reader. Una vez se obtienen dichos enlaces se devuelve el control al Main. El Main llama ahora a LeerRSS que con los enlaces XML es capaz de leer dichos ficheros y extraer la información RSS necesaria para el análisis. Para lo cual va realizando peticiones HTTP a las diferentes páginas web de blogs, foros, noticias y enlaces varios hasta cerrar una lista de enlaces y contenidos de noticias que guardará en sendos ArrayList. Con estos contenidos el Main ahora puede llamar a Popularidad, su función principal es la de dada una lista de enlaces a noticias obtener el número de veces que se ha compartido la noticia mediante peticiones JSON a las API de las diferentes redes sociales. Esta información se almacena en un ArrayList relacionándola con el anterior listado de enlaces. 78 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Con los datos de votaciones y contenidos es posible proceder con la generación del informe del módulo Generar Informe. Dicho módulo es complejo y se detallará más adelante pero se puede resumir de la siguiente forma: para el conjunto total de artículos individualmente utiliza la herramienta Boilerpipe para comprobar sus palabras clave conformando así la puntuación del número de palabras clave que presenta en esa temática. Por otro lado se conforma la puntuación de popularidad. Ambas métricas se normalizan (para no comparar peras con manzanas) y así es posible unirlas para crear una métrica común y utilizar un criterio adecuado en la elección de los 5 mejores artículos. Por último EnviarCorreo envía al usuario el correo con el informe previamente generado y la aplicación termina su curso. 7.2.1 GENERAR INFORME Generar Informe parte con la información de los votos y contenido pertenecientes al total de artículos extraídos vía RSS. El módulo recorre el ArrayList de artículos calculando en primer lugar para cada uno de ellos el total de puntos que ha obtenido en votaciones basándose en las métricas explicadas en otros capítulos. A continuación con el contenido de cada artículo (previamente extraído y transformado a letras minúsculas) lo descompone en palabras y cuenta cuantas de esas palabras pertenecen al diccionario de palabras clave definidas, así como la puntuación que obtienen en función de su complejidad técnica. Cuando ya ha calculado la puntuación para cada una de las diferentes noticias se encuentra con el problema de que las puntuaciones varían y nada tiene que ver la puntuación en número de visitas con la puntuación en palabras claves. 79 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Para solucionar este problema procede a realizar un proceso de estandarización. Dicho proceso consiste en recorrer de nuevo los arrays de puntuaciones para encontrar el máximo en cada uno de ellos y posteriormente dividir cada valor entre el valor máximo. De esta forma todos los valores de puntuación rondarán entre 0 y 1, y ahora se podrá sumar la puntuación de visitas con la puntuación de palabras clave obteniéndose un valor de 0 a 2. Para el éxito del sistema se entiende que una noticia que sea popular no necesariamente tiene por qué contener una gran cantidad de palabras clave que la enmarquen mejor en una categoría concreta, por lo cual al final el sistema premiará a aquellas noticias que estén bien balanceadas, es decir, noticias que tengan un número considerable de visitas y a su vez un número de palabras clave alto. Por último el programa recorre el array final de puntuaciones sumadas buscando las 5 mejores noticias para generar el informe. A mayores del informe comercial para el usuario se genera un informe con los datos de puntuaciones que la aplicación ha calculado. Este informe no se entrega al usuario es un informe para la revisión en ejecución. La generación de dichos informes se realiza internamente en el programa, pero este para darle un formato más adecuado de presentación, cambia su formato a PDF. Este proceso se lleva a cabo mediante el uso de una librería C# conocida como iTextSharp que facilita dicho proceso. A continuación se muestra el código necesario para llevar a cabo el cambio de formato mencionado: 80 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 34. Código C# relativo al cambio de formato PDF. Como se observa en primer lugar se crea un documento PDF (que se conoce como Document por la librería mencionada, agregando previamente la dll) y se crea también un FileStream con la ubicación final del fichero. Se crea un PdfWriter que obtiene una nueva instancia basándose en el documento y la ruta del mismo como parámetros, que será el que escriba en el documento. Se abre el documento y se añade un nuevo párrafo (con la información deseada), se cierra todo y por último se inicia un proceso del sistema operativo que abra el fichero pdf al usuario final. 81 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 8 CASO EJEMPLO DE FUNCIONAMIENTO En el presente capítulo se refleja el funcionamiento del sistema con un perfil ejemplo perteneciente a la temática de noticias del motor. El usuario ha seleccionado previamente mediante Google Reader dos fuentes de noticias de las páginas siguientes: www.motorpasion.com www.marca.com/motor.html Cuando el usuario inicia la aplicación se le muestra el siguiente menú de inicio: Ilustración 35. Menú de opciones de la aplicación. El menú ofrece 6 opciones que a continuación se detallan: Extracción de RSS: Muestra el proceso de extracción dado un artículo. El programa busca en la página web los diferentes enlaces que hay a ficheros XML y los va listando uno a uno. Además la búsqueda es recursiva, profundiza en las diferentes categorías que contiene la configuración RSS del servidor indagando en las posibles rutas alternativas que presente el servidor. 82 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Se ve un ejemplo de funcionamiento por ejemplo con el siguiente artículo: http://www.nytimes.com/2012/10/07/business/mutfund/emerging-marketinvestors-looking-beyond-the-brics.html?ref=investments Ilustración 36. Profundización en la búsqueda de enlaces dado un artículo. Extracción de un artículo y puntuaciones: Para mostrar cómo funciona la extracción de un artículo se seleccionó un artículo perteneciente a la temática de motor. El sistema extrae el contenido del artículo dada la dirección de este (con un acierto muy elevado) empleando la ya citada herramienta Boilerpipe. 83 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA A continuación, se ve como muestra el contenido del artículo. Ilustración 37. Contenido de un artículo. Dicho contenido se utilizará posteriormente para la extracción de palabras claves en base al diccionario. 84 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Otra información relevante que muestra para un artículo dado que se desee visualizar es la relación de palabras claves que ha identificado en el texto junto con el número de veces que esa noticia se ha compartido en las diversas redes sociales: Ilustración 38. Relación de palabras claves y número de veces que se ha compartido la noticia. Acceso a Google Reader y extracción XML: Antes de pasar a las opciones 4 y 5 es necesario activar esta opción. El sistema accede a Google Reader a una cuenta creada previamente (donde están las páginas de prueba) para bajarse el listado de ficheros XML referenciados por Google hacia las páginas de noticias. El primer paso antes de la extracción es la autenticación con Google. El sistema envía las credenciales (binomio de usuario y contraseña) para su verificación y obtención del token de autorización de Google que permite acceder a sus diferentes servicios con la misma cuenta una vez validada. El sistema muestra por pantalla que la autenticación con Google ha sido exitosa y automáticamente se descarga los enlaces XML almacenándolos en un ArrayList. 85 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Generación de noticias recomendadas: Como se explicó en el capítulo anterior el sistema genera el informe final en base a la puntuación de popularidad y número de palabras clave recorriendo todos y cada uno de los artículos que ha extraído. Ilustración 39. Procesado de los artículos. Uno a uno va procesando todos los artículos y saca por pantalla las puntuaciones de popularidad y muestra las palabras clave (si las hay) que encontró en dicho artículo. 86 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Cuando ha terminado de procesar todos los artículos saca por pantalla las puntuaciones totales y los 5 finalistas que conforman el resumen del usuario. Ilustración 40. Resultado final del análisis. 87 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA El informe que genera en formato PDF sobre los datos técnicos es el siguiente: Ilustración 41. Informe PDF sobre puntuaciones. Para terminar el usuario mediante Envío de correo electrónico con las noticias indica el correo electrónico al que desea le llegue el informe ejecutivo. 88 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Ilustración 42. Proceso de envío del email. El correo se envía correctamente y el usuario ya lo tiene disponible en la bandeja de entrada de su buzón de correo personal. El fichero PDF generado es el siguiente: Ilustración 43. Informe PDF final. 89 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 9 CONCLUSIONES El proyecto ha abarcado un amplio espectro de tecnologías de última generación relacionadas con la publicación de contenidos en foros, blogs, periódicos online y páginas web. El paso previo a la programación de cada módulo, fue la investigación de tecnologías relacionadas, así como trabajos ya hechos que pudiesen aportar ideas innovadoras para la incorporación en el proyecto. Se han integrado en el proyecto muchas librerías desarrolladas por entidades externas que han sido probadas por la comunidad de Internet y gozan de una gran reputación, así como corrección de errores y su constante actualización. Se ha construido un sistema de recomendación de noticias que responde a la necesidad de los usuarios de sintetizar el enorme flujo de información que reciben a diario. Un usuario que desee estar al corriente de las principales noticias de actualidad, puede utilizar este sistema para ahorrar tiempo en la búsqueda por su cuenta de dicha información. Además, se deja abierta la puerta para una futura mejora del proyecto y ampliación de categorías de búsqueda, así como la posibilidad de integrar un diccionario más rico que permita una mejor interpretación de los artículos. Otro factor importante sería la introducción de nuevas métricas y parámetros a tener en cuenta a la hora de contabilizar la puntuación que obtiene un artículo. 90 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Los objetivos iniciales se han cumplido en gran medida cómo ya hemos indicado al inicio de este documento: Descubrir contenidos únicos, nuevos y relevantes, manteniendo a los usuarios del sistema siempre actualizados sobre sus intereses principales. Este objetivo está cumplido. El sistema es capaz de descubrir nuevos contenidos únicos a los usuarios, debido a la interacción con otros usuarios y a llevar una posible cuenta de datos históricos. Aprender, iterar y evolucionar las temáticas de interés de los usuarios y presentarles un resumen ejecutivo diario que reduzca la sobrecarga informativa. El resumen se genera de forma exitosa con los cinco artículos de mayor puntuación total y se envía por correo electrónico al usuario una vez al día. Permitir al usuario establecer sus filtros, prioridades y gustos en función de unos parámetros y así poder elaborar un perfil personal de cada usuario. Este objetivo se cumplió parcialmente debido a que ha sido imposible abarcar diferentes temáticas, centrándose solo en una temática de prueba, dada la dificultad del diccionario ya explicada. El perfil del usuario, no obstante, se elabora en base a los gustos de esta temática y se recomiendan noticias que encajen en esa temática, atendiendo a un filtro de palabras clave por relevancia. 91 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 10 FUTUROS DESARROLLOS Las principales mejoras que se pueden añadir al sistema se pueden dividir en los siguientes apartados: Mejoras en la extracción de palabras clave. Mejoras en el motor de correlaciones. Mejoras en el perfil de usuario. Mejoras en la extracción de palabras clave: Sería muy interesante desarrollar un diccionario para diferentes categorías (por lo menos unas 20 categorías) que permitiese distinguirlas y clasificarlas noticias según su contenido. Además, se podría seguir investigando por si apareciesen librerías públicas que implementasen este proceso no solo en inglés sino también en español. Mejoras en el motor de correlaciones: Posibilidad de añadir más criterios de eficiencia y valoración a la hora de ponderar las noticias según diversas métricas establecidas. Ello implicaría tener una puntuación más representativa de la relevancia del artículo y así poder recomendarlo al usuario con una tasa mayor de fiabilidad. Mejoras en el perfil de usuario: El sistema podría mejorar la experiencia con el usuario, si este introdujese más características sobre sus gustos y temáticas predilectas. Para ello es necesario llevar a cabo un estudio de aquellos datos que puedan aportar información relevante al sistema y solicitar como entradas al usuario dichos parámetros. 92 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Para terminar, sería interesante la mejora gráfica de la aplicación, es decir, una interfaz más visual y dinámica que sea familiar al usuario y no le provoque un rechazo hacia lo desconocido o una incomodidad a la hora de utilizar la aplicación. 93 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA BIBLIOGRAFÍA [SCRU13] Wikipedia Scrum http://es.wikipedia.org/wiki/Scrum [FRIB13] Estudio sobre recomendación social http://scholar.google.es/scholar_url?hl=es&q=http://arxiv.org/pdf/1102.0674&sa =X&scisig=AAGBfm2C0OB4jTEbxantdiL0e_nFuhCCQ&oi=scholarr&ei=u9Z7UeWNG6LY7Aaz2oHQDA&ved=0CC4QgA MoADAA [AGIL13] Html Agility Pack http://htmlagilitypack.codeplex.com/ [BOIL13] Boilerpipe http://code.google.com/p/boilerpipe/ [FACE13] Facebook http://www.facebook.com [BEEV13] Beevolve http://www.beevolve.com [ADSE] Google AdSense http://www.google.com/adsense [ACRO13] 33Across http://www.33across.com [TWSO13] Soporte Twitter http://support.twitter.com/articles/344713- preguntas-frecuentes-sobre-el-servicio-de-enlaces-de-twitter-http-t-co# 94 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 95 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Parte II ESTUDIO ECONÓMICO 96 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 97 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 1 ESTUDIO ECONÓMICO A continuación se hace un estudio económico del coste de desarrollo, diseño, investigación e implantación de la herramienta. Se ha dividido el estudio en los siguientes apartados: Coste de la tecnología. Coste de la implantación. Costes operacionales. Coste total. 1.1 COSTE DE LA TECNOLOGÍA Como coste de la tecnología, nos referimos al coste del hardware y software necesario para llevar a cabo el desarrollo de la aplicación. Para desarrollar la aplicación se ha utilizado un portátil con las siguientes prestaciones: Procesador Intel Core i7-3635QM CPU 2.4GHZ con una memoria RAM de 16 GB, sistema operativo Windows 8 64 bits y 200 GB de disco duro. Un ordenador con esas prestaciones cuesta en el mercado, a fecha de hoy, aproximadamente unos 1800 euros. Se necesita una licencia de desarrollador para utilizar Visual Studio 2012 de forma comercial. Para el desarrollo del proyecto no ha sido necesario, ya que se solicitó una licencia educativa que es exclusiva para fines académicos. Si el proyecto se quiere llevar a cabo de forma comercial se necesita esa licencia. El coste de la licencia anual ronda los 1200 dólares (unos 925 euros actualmente). 98 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA La licencia de Windows 8 ya viene incluida en el precio del portátil y no es necesaria una licencia de base de datos, ya que se puede usar una licencia gratuita. Sería necesaria una conexión a Internet permanente, lo cual supone un total de 25 euros al mes de media durante 12 meses, un total de 300 euros al año. Quedan así los costes de la tecnología: Tecnología Importe Ordenador Licencia Visual Studio Licencia Sistema Operativo Licencia BBDD Conexión a Internet Total 1.800 € 925 € - € - € 300 € 3025 Tabla 6. Costes de la tecnología empleada 1.2 COSTE DE LA IMPLANTACIÓN Los costes de la implantación se refieren a la cantidad de horas empleadas en el desarrollo del proyecto. El proyecto se estima que tiene una duración de 300 horas en total empleadas por el alumno, asumiendo una tarifa de 35 euros por hora (la tarifa se interpreta como coste total, no como lo que percibe un trabajador de salario) sale un total de 10.500 euros. Además, ha sido necesaria la colaboración del director del proyecto, que se estima ha trabajado 20 horas en total resolviendo dudas, aportando su experiencia, tutelando al alumno y revisando el documento. La tarifa del director, teniendo en 99 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA cuenta que es un ingeniero con experiencia, que trabaja en una importante empresa americana, asciende a 150 euros la hora contabilizando un total de 3000 euros. El coordinador ha revisado la normativa y el formato del documento, así como una demostración del buen funcionamiento de la aplicación. Por su contribución al proyecto se contabilizan 3 horas a 60 euros la hora, con un total de 180 euros. Rol en el desarrollo Coste Alumno Director Coordinador Total 10.500 € 3.000 € 180 € 13.680 € Tabla 7. Costes de la implantación. 1.3 COSTES OPERACIONALES Debido a que no se trata de la prestación de un servicio y todo el material software y hardware lo mantiene el alumno, repercutiendo ese coste en los gastos de implantación. No se consideran los costes de operación diaria del proyecto sean costes añadidos al coste total. 1.4 COSTE TOTAL Por consiguiente, sumando el coste de la tecnología y el de la implantación se obtiene un coste total de 16.705 euros. 100 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Tipo de coste Coste Coste de la tecnología Coste de la implantación Coste total proyecto 3.025 € 13.680 € 16.705 € Tabla 8. Coste total del proyecto. 1.5 ESTUDIO DE LA RENTABILIDAD Una vez analizado el coste total del proyecto, que asciende a 16.705 euros, se estudia la viabilidad económica y rentabilidad del proyecto. El principal motivo que hace pensar en que el proyecto no sea rentable puede ser la elevada cifra a la que asciende el coste. Si tenemos en cuenta que el alumno realmente lo ha realizado gratis y el director y el coordinador han prestado su ayuda de forma gratuita, no se está hablando de un coste real. Por lo tanto el coste real sería exclusivamente el coste de la tecnología, que sería de 3.025 euros. El principal aspecto a estudiar sería la forma de ganar dinero con el proyecto, es decir, cómo hacer que el proyecto pueda generar dinero una vez desarrollado y puesto en producción, para que de alguna manera sea capaz de amortizar esos 3.025 euros y aumentar las ganancias. La principal fuente de ingresos que se podría obtener en este caso es la colocación de anuncios en la página web donde se publicase la aplicación. 101 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Para ganar dinero con la publicación de anuncios, existen diversas compañías que pagan al dueño de la página web por cada visita que sus usuarios realicen a los anuncios allí expuestos. Este sistema es muy utilizado por Google y se conoce como Google AdSense. Google AdSense [ADSE13] coloca un pequeño iframe en la página web que muestra anuncios a los visitantes en función de sus gustos. Ello va en consonancia con la aplicación, pero Google utiliza un sistema sofisticado de seguimiento a los usuarios en función de historiales de búsqueda complejos. Con este sistema, Google paga al dueño de la página aproximadamente un 70% de lo que invierte el anunciante en la campaña publicitaria. Normalmente oscila entre 5 y 20 céntimos por click de cada usuario. Además, Google cuenta con scripts y programas que evitan el fraude en este sistema vigilando constantemente que el dueño de la página no intente ganar dinero de forma ilícita. Con este sistema se gana poco dinero en principio, pero si se consigue un volumen de visitas a la página muy elevado se puede obtener una suma de dinero respetable. El estudio parte de la siguiente base: Se considera que la media de lo que pague Google será de 10 céntimos de euro (ya que puede pagar 5 o 20 céntimos, pero la media será más o menos de 10 céntimos). Se considera que solamente un 5% de los visitantes de la web van a hacer click en los anuncios, por lo tanto hace falta un número muy elevado de visitantes. 102 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA El tiempo de ejecución es un año y en ese año se pretenden alcanzar al menos 3.025 euros para cubrir los gastos y algo más de beneficio si se puede. Por lo tanto los cálculos son los siguientes: 5% de visitantes multiplicado por 10 céntimos da 0.005 que, si se divide ese valor entre 3.025 euros, como objetivo sale un total de 605.000 visitantes necesarios para amortizar el proyecto. Con un millón de visitantes se obtendría un beneficio de 1975 euros. Todo esto son conjeturas y especulaciones, pero lo realmente interesante sería pensar en cobrar el servicio a los usuarios en forma de suscripción, una vez que el sistema funcionara regularmente. Otra opción interesante sería acogerse a una beca de emprendimiento que tan de moda están en estos días, la cual podría ser concedida por el Ministerio de Educación o la Comunidad de Madrid, por ejemplo. 103 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Parte III DATASETS 104 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA 105 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA Capítulo 1 DATASET 1 El conjunto de datos empleados para el desarrollo del proyecto contiene un total de 517 artículos escritos en español y en inglés, direccionados por una serie de enlaces que fueron elegidos aleatoriamente por cinco usuarios. A dichos usuarios se les pidió que seleccionaran una lista aproximada de 100 artículos de temáticas variadas en función de sus gustos personales y de diferentes medios de comunicación: Blogs, portales de noticias, foros, páginas web variadas… El resultado fue una rica fuente de análisis para probar el funcionamiento de la aplicación en sus diferentes módulos. Una pequeña muestra aleatoria de este dataset se muestra a continuación con 30 ejemplos: http://www.wired.com/dangerroom/2012/07/ff_kaspersky/all/ http://www.businessinsider.com/scientist-says-immortality-only-20-years-away2012-7 http://www.theregister.co.uk/2008/09/03/mythbusters_gagged/ http://mobile.theverge.com/2012/7/20/3173049/apple-developer-workarounds-inapp-purchase-fraud http://www.huffingtonpost.es/josa-g-vera-beorlegui/la-libertad-de-laiglesia_b_2884492.html?utm_hp_ref=spain http://www.somosmalasana.com/chico-burbuja-micropoeta-de-barrio/ 106 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA http://www.elmundotoday.com/2013/03/recibe-una-carta-de-trafico-con-laadvertencia-lavalo-guarro/ http://www.infolibre.es/noticias/mundo/2013/03/16/el_presidente_chipre_dice_qu e_rescate_era_unica_opcion_1233_1022.html http://www.mundodeportivo.com/20130316/tenis/nadal-berdych-indianwells_54368483221.html http://www.sport.es/es/noticias/barca/doctor-pruna-los-medicos-seleccion-nosdevolvais-lesionado-xavi-2342291 http://www.larazon.es/detalle_normal/noticias/1508501/religion/el-papafrancisco-como-me-gustaria-una-igles#.UUTlJKU1hEQ http://www.elconfidencial.com/economia/2013/03/16/el%2Dgobierno%2Dcree% 2Dque%2Del%2Drescate%2Da%2Dchipre%2Dno%2Des%2Dextrapolable%2Da %2Despana%2D117039/ http://www.abc.es/internacional/20130316/abci-boldrini-camara-diputados-italia201303161924.html http://www.forbes.com/sites/andygreenberg/2012/07/23/hacker-will-exposepotential-security-flaw-in-more-than-four-million-hotel-room-keycard-locks/ http://allthingsd.com/20120709/salesforce-to-acquire-co-browsing-startupgoinstant-for-76m-in-cash/ http://nakedsecurity.sophos.com/2011/12/28/large-percentage-of-websitesvulnerable-to-hashdos-denial-of-service-attack/ http://arstechnica.com/business/news/2011/12/huge-portions-of-web-vulnerableto-hashing-denial-of-service-attack.ars?comments=1#comments-bar http://www.symantec.com/connect/blogs/pdf-exploit-same-crime-different-face http://blog.imperva.com/2012/02/sql-injection-part-ii-seeing-a-blind-sqlinjection.html http://articles.latimes.com/2011/jun/17/business/la-fi-cloud-security-20110617 http://www.scientificamerican.com/article.cfm?id=rich-see-different-internetthan-the-poor 107 UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA http://asiermarques.com/2009/03/12/ajax-entre-dominios-con-json-y-jquery http://www.danwei.org/internet/updated_china_video_website_li.php http://www.computerworld.com/s/article/9232113/NASA_Pentagon_hacker_Tin Kode_gets_two_year_suspended_sentence http://sfist.com/2013/02/20/kinkcom_responds_to_sf_weeklys_gag.php http://www.nytimes.com/2013/03/30/us/politics/guest-worker-program-lowskilled-immigrants.html?_r=0 http://qz.com/68680/dog-pampering-obsessions-in-singapore-and-hong-kongforeshadow-a-demographic-time-bomb/ http://www.nytimes.com/2013/03/29/opinion/brooks-the-empiricalkids.html?_r=0 http://www.nytimes.com/2013/03/31/magazine/is-giving-the-secret-to-gettingahead.html?pagewanted=all http://www.tuaw.com/2013/03/27/review-ikit-nucharge-two-in-one-battery-packand-cover-for-iph/ http://allthingsd.com/20130326/everybodys-a-curator-flipboards-mike-mccuetalks-about-new-version-of-social-magazine-video/ http://nyti.ms/129JTj7 108