Parte I MEMORIA - IIT - Universidad Pontificia Comillas

Anuncio
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
Descargar