prototipo de aplicaciÓn para la visualizaciÓn de...
TRANSCRIPT
PROTOTIPO DE APLICACIÓN PARA LA VISUALIZACIÓN DE RELACIONES DE FUNCIONARIOS PÚBLICOS UTILIZANDO UN MOTOR DE BASES DE
DATOS NoSQL
ANGYE KATHERINE MALAGON TAVERA
Trabajo de grado presentado como requisito para optar al título de
INGENIERA DE SISTEMAS
Director: SONIA ORDOÑEZ SALINAS Ph.D
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
FACULTAD DE INGENIERÍA
INGENIERÍA DE SISTEMAS
BOGOTÁ D.C
2020
TABLA DE CONTENIDO
1. INTRODUCCIÓN ....................................................................................................... 6
2. PLANTEAMIENTO DEL PROBLEMA ........................................................................ 6
3. MARCO TEÓRICO .................................................................................................... 7
3.1 WEB CRAWLER ...................................................................................................... 7
3.2 PROCESAMIENTO DEL LENGUAJE NATURAL ..................................................... 8
3.3 BASES DE DATOS NoSQL ..................................................................................... 8
3.4 HERRAMIENTAS DE BASES DE DATOS NoSQL .................................................. 9
3.5 METODOLOGÍA DE DESARROLLO ..................................................................... 11
3.6 ARQUITECTURA ORIENTADA A SERVICIOS ...................................................... 11
4. MARCO REFERENCIAL .......................................................................................... 12
4.1 HERRAMIENTAS PARA LA EXTRACCIÓN DE DATOS DE SITIOS WEB ............ 12
4.2 TRABAJOS RELACIONADOS ............................................................................... 12
5. ESTADO DEL ARTE ................................................................................................ 14
6. OBJETIVOS ............................................................................................................. 15
6.1 OBJETIVO GENERAL ........................................................................................... 15
6.2 OBJETIVOS ESPECÍFICOS .................................................................................. 15
7. METODOLOGÍA ...................................................................................................... 15
7.1 DEFINICIÓN DE ITERACIONES Y ETAPAS ......................................................... 16
8. DESARROLLO DEL PROTOTIPO ........................................................................... 17
8.1 PRIMERA ITERACIÓN .......................................................................................... 17
8.2 SEGUNDA ITERACIÓN ......................................................................................... 35
8.3 TERCERA ITERACIÓN.......................................................................................... 38
8.4 ARQUITECTURA DEL SISTEMA .......................................................................... 50
9. RESULTADOS ......................................................................................................... 51
10. TRABAJO FUTURO ................................................................................................. 53
11. CONCLUSIONES .................................................................................................... 54
12. REFERENCIAS........................................................................................................ 54
13. ANEXO N° 1 – PRIMERA ITERACIÓN .................................................................... 58
14. ANEXO N° 2 – SEGUNDA ITERACIÓN ................................................................... 60
15. ANEXO N° 3 –TERCERA ITERACIÓN .................................................................... 63
16. ANEXO N° 4 – ANÁLISIS DE FUENTES DE INFORMACIÓN ................................. 68
17. ANEXO N° 5 – CÓDIGOS DE ESTADO HTTP ........................................................ 94
INDICE DE ILUSTRACIONES
Figura 1. Funcionamiento de un web crawler. diseño propio .................................. 7
Figura 2. Grafo generado por el sitio web de quién es quién [25] ......................... 13
Figura 3. Ejemplo de consulta, imagen tomada del repositorio en Github [26]...... 13
Figura 4. Correlación de fuentes y atributos, elaboración propia .......................... 23
Figura 5. Diseño de almacenamiento para metadatos, diseño propio ................... 24
Figura 6. Esquema de página sencilla, diseño propio ........................................... 25
Figura 7. Esquema de página con contenedores, diseño propio ........................... 26
Figura 8. Esquema de página con patrones en la url, diseño propio ..................... 26
Figura 9. Esquema de página con enlaces a perfiles, diseño propio ............. ¡Error!
Marcador no definido.
Figura 10. Clasificación de servicios del crawler, fuente propia ............................ 27
Figura 11. Pseudocódigo para explotar página sencilla, diseño propio ................. 31
Figura 12. Pseudocódigo para explotar página con patrón numérico en la url, diseño
propio .................................................................................................................... 32
Figura 13. Pseudocódigo para explotar página de contenedores, diseño propio .. 32
Figura 14. Pseudocódigo para explotar página con enlaces, diseño propio.......... 32
Figura 15. Pseudocódigo para explotar subestructuras de la página, diseño propio
.............................................................................................................................. 33
Figura 16. Diseño de almacenamiento de la página en MONGODB, diseño propio
.............................................................................................................................. 33
Figura 17. Diseño de estructura en Redis para personas, diseño propio .............. 34
Figura 18. Diseño de estructura en Redis para enlaces de sitios web, diseño propio
.............................................................................................................................. 34
Figura 19. Servicios alternativos de análisis y explotación, diseño propio ............ 36
Figura 20. Pseudocódigo para unificar versiones, diseño propio .......................... 38
Figura 21. Flujo de creación de nodos y relaciones, diseño propio ....................... 40
Figura 22. Logo Palliri, diseño propio .................................................................... 41
Figura 23. Diseño inicial del grafo, diseño propio .................................................. 42
Figura 24. Componentes Popoto.js:
Grafo(1),Acciones(2),Taxonomía(3),Query(4),Resultados(5)[58] .......................... 44
Figura 25. Vista principal Palliri, diseño propio ...................................................... 45
Figura 26. Búsqueda y lista de resultados, diseño propio ..................................... 45
Figura 27. Visualización de resultados del crawler, diseño propio ........................ 46
Figura 28. Vista inicial del grafo, fuente propia ...................................................... 47
Figura 29. Visualización de resultados, fuente propia ........................................... 48
Figura 30. Visualización de atributos en la relación, fuente propia ........................ 48
Figura 31. Opciones de visualización de resultados, fuente propia ....................... 49
Figura 32. Página web de contacto, diseño propio ................................................ 49
Figura 33. Página web de información del grupo, diseño propio ........................... 50
Figura 34. Arquitectura del proyecto, fuente propia ............................................... 51
Figura 35. Clasificación de fuentes de información, fuente propia ........................ 52
Figura 36. Diagrama de componentes Palliri, fuente propia .................................. 52
INDICE DE TABLAS
Tabla 1. Revisión de trabajos relacionados, elaboración propia ........................... 15
Tabla 2. Plantilla de historias de usuario, diseño con base en [40] ....................... 16
Tabla 3. Plantilla de tareas de ingeniería, diseño con base en [40] ...................... 16
Tabla 4. Plantilla de pruebas de aceptación, diseño con base en [40] .................. 17
Tabla 5. Resumen historias de usuario primera iteración, elaboración propia ...... 17
Tabla 6. Consolidado de fuentes de información, elaboración propia ................... 21
Tabla 7. Tareas de ingeniería de primera iteración, elaboración propia ................ 25
Tabla 8. Identificación de etiquetas HTML por atributo, elaboración propia .......... 25
Tabla 9. Esquema de políticas de servicios del web crawler, elaboración propia . 29
Tabla 10. Herramientas para extracción de información, elaboración propia ........ 29
Tabla 11. Códigos de estado HTTP, elaboración propia ....................................... 30
Tabla 12.Estructura de elementos HTML de interés, elaboración propia .............. 31
Tabla 13. Pruebas de aceptación, primera iteración ............................................. 34
Tabla 14. Historias de usuario, segunda iteración ................................................. 35
Tabla 15. Tareas de ingeniería, segunda iteración ............................................... 36
Tabla 16. Análisis de similitud de texto, elaboración propia .................................. 37
Tabla 17. Pruebas de aceptación, segunda iteración ............................................ 38
Tabla 18. Historias de usuario, tercera iteración ................................................... 39
Tabla 19. Tareas de ingeniería, tercera iteración .................................................. 41
Tabla 20. Nodos del grafo, elaboración propia ...................................................... 42
Tabla 21. Relaciones del grafo, elaboración propia .............................................. 42
Tabla 22. Herramientas de visualización de grafos, elaboración propia ............... 43
Tabla 23. Configuración Popoto.js, fuente propia .................................................. 47
Tabla 24. Pruebas de aceptación, tercera iteración .............................................. 50
Tabla 25. Distribución de fuentes de información, fuente propia ........................... 52
Tabla 26. Historia de usuario 1 .............................................................................. 58
Tabla 27. Tarea de ingeniería 1 ............................................................................ 58
Tabla 28. Tarea de ingeniería 2 ............................................................................ 58
Tabla 29. Prueba de aceptación 1 ......................................................................... 58
Tabla 30. Historia de usuario 2 .............................................................................. 59
Tabla 31. Tarea de ingeniería 3 ............................................................................ 59
Tabla 32. Tarea de ingeniería 4 ............................................................................ 59
Tabla 33. Tarea de ingeniería 5 ............................................................................ 59
Tabla 34. Prueba de aceptación 2 ......................................................................... 59
Tabla 35. Prueba de aceptación 3 ......................................................................... 59
Tabla 36. Historia de usuario 3 .............................................................................. 60
Tabla 37. Tarea de ingeniería 6 ............................................................................ 60
Tabla 38. Tarea de ingeniería 7 ............................................................................ 60
Tabla 39. Prueba de aceptación 4 ......................................................................... 60
Tabla 40. Historia de usuario 4 .............................................................................. 61
Tabla 41. Tarea de ingeniería 8 ............................................................................ 61
Tabla 42. Prueba de aceptación 5 ......................................................................... 61
Tabla 43. Historia de usuario 5 .............................................................................. 61
Tabla 44. Tarea de ingeniería 9 ............................................................................ 61
Tabla 45. Tarea de ingeniería 10 .......................................................................... 62
Tabla 46. Tarea de ingeniería 11 .......................................................................... 62
Tabla 47. Prueba de aceptación 6 ......................................................................... 62
Tabla 48. Prueba de aceptación 7 ......................................................................... 62
Tabla 49. Historia de usuario 6 .............................................................................. 62
Tabla 50. Tarea de ingeniería 12 .......................................................................... 63
Tabla 51. Prueba de aceptación 8 ......................................................................... 63
Tabla 52. Prueba de aceptación 9 ......................................................................... 63
Tabla 53. Historia de usuario 7 .............................................................................. 63
Tabla 54. Tarea de ingeniería 13 .......................................................................... 63
Tabla 55. Tarea de ingeniería 14 .......................................................................... 64
Tabla 56. Tarea de ingeniería 15 .......................................................................... 64
Tabla 57. Prueba de aceptación 10 ....................................................................... 64
Tabla 58. Prueba de aceptación 11 ....................................................................... 64
Tabla 59. Historia de usuario 8 .............................................................................. 64
Tabla 60. Tarea de ingeniería 16 .......................................................................... 65
Tabla 61. Prueba de aceptación 12 ....................................................................... 65
Tabla 62. Historia de usuario 9 .............................................................................. 65
Tabla 63. Tarea de ingeniería 17 .......................................................................... 65
Tabla 64. Tarea de ingeniería 18 .......................................................................... 65
Tabla 65. Prueba de aceptación 13 ....................................................................... 65
Tabla 66. Prueba de aceptación 14 ....................................................................... 66
Tabla 67. Historia de usuario 10 ............................................................................ 66
Tabla 68. Tarea de ingeniería 19 .......................................................................... 66
Tabla 69. Tarea de ingeniería 20 .......................................................................... 66
Tabla 70. Tarea de ingeniería 21 .......................................................................... 66
Tabla 71. Prueba de aceptación 15 ....................................................................... 67
Tabla 72. Prueba de aceptación 16 ....................................................................... 67
Tabla 73. Historia de usuario 11 ............................................................................ 67
Tabla 74. Tarea de ingeniería 22 .......................................................................... 67
Tabla 75. Tarea de ingeniería 23 .......................................................................... 67
Tabla 76. Prueba de aceptación 17 ....................................................................... 68
1. INTRODUCCIÓN
El contenido que reside en la web se ha considerado como fuente principal de
información y por lo tanto se ha utilizado en distintas áreas como la lingüística
computacional, bioinformática y en ámbitos comerciales con la analítica de datos.
Sin embargo, en la exploración realizada no se encontraron herramientas que
utilicen esta información con el objetivo de fomentar el fortalecimiento de la cultura
política, menos aún que pongan a disposición de la ciudadanía información
consolidada que ayude a entender el entorno de la política.
Por lo anterior, en este trabajo se presenta la conceptualización de las herramientas
utilizadas y documenta el desarrollo de un prototipo de software que permite
relacionar los actores de la política frente a la experiencia profesional y académica;
para lo cual se utilizaron datos libres de la web como fuente principal de información
y la presentación de la información de manera gráfica y amigable al usuario por
medio de una aplicación web y el uso de un motor de bases de datos NoSQL.
2. PLANTEAMIENTO DEL PROBLEMA
Los colombianos asocian la política a la corrupción y malas prácticas institucionales;
adicionalmente la fuente principal de información política y construcción de la esfera
de lo público se da a través de canales de televisión y comunicación popular [1].
La cultura política colombiana está enmarcada por variables históricas y socio-
políticas como la violencia, la cultura religiosa y el bipartidismo [2]. Algunos autores
indican que la privatización de los medios de comunicación supone la edición y
contextualización de mensajes, evitando que los ciudadanos consoliden su
capacidad de creación y circulación de mensajes propios [3]. Lo anterior implica el
deterioro progresivo de la participación y confianza política, afectando la percepción
e impacto de la democracia y la ética pública existente.
Por otro lado, las conclusiones del ciudadano común generalmente obedecen a las
noticias que circulan por redes sociales y obtener conclusiones propias frente al
gran cúmulo de información que se publica a diario a través de la Web se hace
complicado, dado que se requiere conocimiento previo sobre política, tecnología,
uso de técnicas propias de la minería de datos y de procesamiento de lenguaje
natural.
Por lo anterior se plantea la pregunta: ¿Es posible que a través de una herramienta
gráfica se sinteticen relaciones académicas y laborales de los funcionarios públicos
colombianos, con el objetivo de brindar información a la población, y apoyar la toma
de decisiones formando un criterio propio y fortaleciendo la cultura política,
utilizando una base de datos no relacional?
3. MARCO TEÓRICO
En este capítulo se da a conocer la conceptualización de los temas relevantes del
proyecto desarrollado, como son: los web crawler, sus características y tipos; el
procesamiento de lenguaje natural y las bases de datos NoSQL.
3.1 WEB CRAWLER
Un web crawler (también conocido como un robot o spider) es un sistema que
permite descargar información masiva de páginas web, siguiendo hipervínculos de
una página a otra; son usados con una gran variedad de propósitos, siendo el más
destacado el crawling o rastreo en los motores de búsqueda [4].
El procedimiento general que sigue un web crawler consiste en descargar las
páginas semilla (URLs de exploración inicial), indexarlas, extraer los hipervínculos
que contienen y para cada uno de ellos repetir el proceso [3]. A continuación, se
muestra un esquema que profundiza y aclara el proceso.
Figura 1. Funcionamiento de un web crawler. diseño propio
A partir de una página inicial (semilla) se hace una petición web, el servidor resuelve
y retorna el contenido HTML del sitio, se continua con la búsqueda de los enlaces a
partir de un filtro predefinido, en caso de que existan duplicados se eliminan de lo
contrario se continua con la priorización de los resultados encontrados y se anexan
a una cola donde a cada uno se le aplica recursivamente el proceso descrito, ver
figura 1.
Los web crawler pueden clasificarse en focalizados y dispersos; los primeros
obtienen, indexan y mantienen páginas que satisfacen algunas propiedades
particulares relacionadas con un conjunto específico de temas [4] y los dispersos
intentan abarcar todo el contenido de la web.
3.1.1 CRAWLERS DISTRIBUIDOS
A diferencia de los crawler centralizados, es decir que un nodo se encarga del
proceso de rastreo y extracción de enlaces, en los crawlers distribuidos las URLs
semilla se distribuyen a otros nodos (el criterio que se recomienda es que cada nodo
se encargue de un dominio específico); posteriormente al eliminar duplicados, las
URLs deben estar en memoria principal para que todos los nodos puedan visualizar
el conjunto de enlaces en su totalidad. Esta arquitectura a pesar de utilizar más
recursos computacionales disminuye el tiempo de respuesta [5].
3.2 PROCESAMIENTO DEL LENGUAJE NATURAL
El procesamiento del lenguaje natural (PLN) se puede definir como el
procesamiento automático (o semi-automático) del lenguaje humano. Es un área
multidisciplinar, sin embargo se vincula esencialmente con la inteligencia artificial
(IA) y la lingüística computacional [6]. Se ocupa de la interacción entre el lenguaje
natural y la computadora; permitiendo analizar, comprender y generar lenguaje
natural escrito o hablado con objetivos prácticos como la extracción y recuperación
de Información [7].
Las aplicaciones del PLN pueden subdividirse en aplicaciones basadas en texto y
voz: las primeras abarcan objetivos como buscar temas, palabras clave, extraer
datos, traducir, identificar emociones y resumir texto mientras que las aplicaciones
de voz están enfocadas al reconocimiento de voz para el control de máquinas,
mejora de los motores de búsqueda, traducción de voz a voz y sistemas de diálogo
[8].
La recuperación de información generalmente se dedica a detectar entidades referidas en textos no estructurados o semiestructurados, las relaciones entre ellos y los eventos en los que participa. Informalmente, podría decirse la identificación de los elementos "qué”, "quién", "cuándo" y "dónde” [9].
3.3 BASES DE DATOS NoSQL
El término NoSQL (Interpretado como “No sólo SQL”) fue utilizado por primera vez
en 1998 por Carlo Strozzi. NoSQL hace referencia a los motores de bases de datos
que no siguen el modelo relacional tradicional [10], es decir no están focalizadas en
transacciones y por lo tanto no buscan satisfacer las propiedades ACID [11]:
• Atomicidad: Se ejecutan todas las operaciones que hagan parte de una
transacción o ninguna, de tal forma que sea exitosa o falle completamente.
• Consistencia: Los datos no persisten si se viola alguna regla predefinida o
deja la base de datos en un estado inconsistente.
• Aislamiento: Una transacción no puede interferir con otra.
• Durabilidad: Si una transacción es confirmada se asegura su persistencia.
Por su parte, este tipo de motores de bases de datos están orientados a satisfacer
las propiedades BASE acuñadas por Eric Brewer [12]:
• Básicamente disponible: Se garantiza a cada solicitud una respuesta
satisfactoria o fallo de ejecución.
• Estado flexible: El estado del sistema puede cambiar con el tiempo, a veces
sin ninguna entrada (para una eventual consistencia).
• Eventualmente consistente: La base de datos puede ser
momentáneamente inconsistente pero será consistente eventualmente.
Algunas características comunes de los motores de bases de datos NoSQL son: no
requieren de un esquema para almacenar información, mejoran la velocidad de
respuesta a consultas dado que no existen restricciones entre estructuras, tienen
fácil adaptación en entornos distribuidos y generalmente no requieren de hardware
costoso [12].
A continuación se brinda una visión general de las características de algunos
modelos de base de datos NoSQL [13]:
Orientadas a documentos: Cada clave está vinculada a una estructura de datos
compleja conocida como documento, no se soportan relaciones entre documentos
lo que mejora el rendimiento en entornos distribuidos.
Orientadas a grafos: Representan la información en términos de nodos y
relaciones lo cual facilita la ejecución de consultas complejas.
Clave-valor: Cada elemento en la base de datos tiene una clave, la cual es
asociada a un valor; las búsquedas se realizan sobre la clave lo que permite
optimizar la velocidad y mejorar el rendimiento en entornos distribuidos.
Orientadas a columnas: Soportan un número variable de conjuntos o familias de
columnas, son optimizadas para consultas en grandes volúmenes de datos,
especialmente sobre columnas específicas.
3.4 HERRAMIENTAS DE BASES DE DATOS NoSQL
3.4.1 NEO4J
Neo4j es una base de datos orientada a grafos altamente escalable, diseñada para
utilizar datos y sus relaciones. Cuenta con el lenguaje de consulta Cypher, que
además de ser declarativo, es muy descriptivo y su sintaxis se basa en el nodo, sus
propiedades y relaciones.
El motor de procesamiento y almacenamiento nativo de Neo4j proporciona
rendimiento constante en tiempo real; algunos ejemplos de compañías que utilizan
este motor de bases de datos son: Walmart para el análisis de tendencias de
producto y necesidades del cliente, eBay que aseguran mejoras en tiempos de
respuesta y Cisco.1
Algunas características destacables de Neo4j son [14]:
• El procesamiento nativo de grafos de Neo4j (también conocido como
"adyacencia libre de índices") hace referencia a la conexión entre nodos en
la base de datos; que proporciona rendimiento en tiempo
independientemente del tamaño del conjunto de datos.
• A diferencia de otras bases de datos NoSQL Neo4j conserva las propiedades
ACID dando garantía de la consistencia de los datos.
• Libre de esquema, lo que permite que se ajuste a diferentes contextos,
apoyando además las iteraciones ágiles disminuyendo los tiempos de
diseño.
3.4.2 MONGODB
Es una base de datos NoSQL de software libre que inició su desarrollo en el año
2007 por la compañía 10gen que desde el 2013 cambio su nombre a MongoDB Inc. 2 El nombre proviene de “humongous”, que significa enorme en inglés, está
desarrollada en C++ y algunas de las características más importantes de este motor
de bases de datos son [15]:
• Almacenamiento orientado a documentos: A partir de documentos JSON,
contando con un esquema dinámico y flexible.
• Manejo de réplicas.
• Soporte de índices.
• Libertad de esquema.
3.4.3 REDIS
Redis es un almacén de estructura de datos clave-valor en memoria (con licencia
BSD), utilizado como base de datos, caché y agente de mensajes. Soporta
estructuras de datos, tales como strings, hash, listas, entre otros; además
proporciona alta disponibilidad y particionamiento automático.[16]
Redis trabaja con un conjunto de datos en memoria; la persistencia puede estar
opcionalmente deshabilitada o acorde a la necesidad de volcar el conjunto de datos
en el disco o registrar cada comando en un log. A continuación se muestran otras
características de este motor:
• Transacciones: Permiten la ejecución de un grupo de comandos en un solo
paso
1 https://neo4j.com/customers/ 2 https://www.mongodb.com/press/10gen-announces-company-name-change-mongodb-inc
• Pub/Sub: Implementa el paradigma Publish/Suscribe
• Claves con TTL (Time to Live)
• Expulsión de claves con LRU (Least Recently Used)
3.5 METODOLOGÍA DE DESARROLLO
Dado que el proyecto está orientado a la construcción de un prototipo se optó por la
filosofía de las metodologías ágiles, que se basa en el Manifiesto para el desarrollo
ágil [17], donde se valora:
• Al individuo e interacciones del equipo, sobre el proceso y las
herramientas.
• El software que funciona, en lugar de buena documentación.
• Colaboración con el cliente, en lugar de negociación de un contrato.
• Respuesta a cambios, sobre planes estrictos.
3.5.1 EXTREME PROGRAMMING (XP)
Es una metodología disciplinada y adaptable desarrollada por Kent Beck en el año
1999, fundamentada en cinco valores: Simplicidad (desarrollar lo que sea
necesario), Comunicación (comunicación diaria y personal con el equipo),
Retroalimentación (entregas pequeñas y frecuentes), Coraje (sinceridad sobre el
progreso y adaptación al cambio) y Respeto (al equipo de desarrollo) [18].
Los requerimientos del software se especifican a través de las historias de usuario,
su tratamiento es flexible por lo cual pueden reemplazarse, añadirse o modificarse;
con base en los registros de las historias de usuario se planifica la siguiente
iteración. Los roles de esta metodología son los siguientes: programador, cliente,
encargado de pruebas, encargado de seguimiento, director, consultor (miembro
externo al equipo con conocimiento en temas relacionados al proyecto) y gestor
(vínculo entre clientes y programadores) [19].
3.6 ARQUITECTURA ORIENTADA A SERVICIOS
La extracción y manejo de la información es fundamental para el proyecto, puede
que durante el desarrollo puedan extenderse o ajustarse algunos procesos; en la
perspectiva de orientación a servicios se dejan de lado las estructuras complejas y
en cambio se utilizan servicios que son recursos que agrupan la lógica de los
procesos y soportan su ejecución [20].
Algunas de las características principales de los servicios son su reusabilidad, bajo
acoplamiento, y especificaciones donde se define el contrato, el esquema de
políticas del servicio, los mensajes de entrada y salida, tipos de dato y demás que
permitan que otros servicios lo descubran y faciliten su composición [21].
4. MARCO REFERENCIAL
En este ítem se incluirán algunas de las herramientas existentes que permiten la
extracción de datos de sitios web y trabajos que utilizan crawlers y facilitan la
visualización de información relacionada con la política.
4.1 HERRAMIENTAS PARA LA EXTRACCIÓN DE DATOS DE SITIOS WEB
4.1.1 BEAUTIFULSOUP
Es una librería de Python que permite extraer datos de documentos HTML y XML,
las siguientes tres características la destacan [22]:
1. Proporciona métodos sencillos en Python para navegar, buscar y modificar
un árbol de análisis (no se necesita mucho código para escribir una
aplicación).
2. Convierte automáticamente los documentos entrantes a Unicode y
documentos salientes a UTF-8.
3. Se encuentra en el top de los analizadores populares de Python como lxml y
html5lib, lo que le permite probar diferentes estrategias de análisis o
velocidad de cambio para flexibilidad.
4.1.2 SCRAPY
Scrapy es un framework con licencia BSD utilizado para rastrear sitios web y extraer
datos estructurados que pueden utilizarse para una amplia gama de aplicaciones,
como minería de datos y procesamiento de información; funciona bajo Linux,
MacOS o Windows. A pesar de que Scrapy fue diseñado originalmente para el web
scraping, también se puede utilizar para extraer datos mediante APIs o como web
crawler de propósito general [23].
4.2 TRABAJOS RELACIONADOS
4.2.1 QUIÉN ES QUIÉN, LA SILLA VACÍA
La silla vacía es un medio digital que comunica información referente al poder
público en Colombia. En el año 2014 lanzaron la versión gráfica de Quién es Quién,
un módulo que permite visualizar por medio de un grafo relaciones personales,
familiares, de rivalidad y alianza de los personajes que hacen parte de la élite del
poder del país [24].
Figura 2. Grafo generado por el sitio web de quién es quién [25]
4.2.2 GRAPH-POLITICS
A partir de información de fuentes oficiales como la Comisión Federal de Elecciones
(FEC), el Centro para la Política Responsable (CRP), la iniciativa de datos abiertos
es EEUU; entre otras el proyecto procesa grandes cantidades de datos relacionados
con la política estadounidense y construye una red utilizando Neo4j que representa
las conexiones entre los legisladores estadounidenses [26].
Figura 3. Ejemplo de consulta, imagen tomada del repositorio en Github [26]
4.2.3 THE FRAMEWORK OF INTERNET PUBLIC OPINION MONITORING &
ANALYSIS SYSTEM
Este framework está compuesto por un web crawler que recolecta información de la
web incluyendo blogs y noticias, un módulo de pre-procesamiento de información,
un módulo de análisis y minería para finalmente presentar un análisis de información
de la opinión pública. Además utiliza una arquitectura orientada a servicios y ESB
(Enterprise-service-Bus) [27].
5. ESTADO DEL ARTE
Los crawler focalizados se han vuelto indispensables para los motores de búsqueda
verticales que proveen un servicio de consulta para conjuntos de datos
especializados [28]. Por otra parte también se han integrado con ontologías para
mejorar la precisión semántica de las búsquedas [29][30] y también se han utilizado
técnicas de inteligencia artificial como el aprendizaje automático para construir
bases de conocimiento a partir de palabras clave y URLs [31].
Con el objetivo de mejorar las búsquedas, los tiempos de respuesta y la eliminación
de duplicados se han utilizado técnicas como el aprendizaje supervisado, linked
data, paralelismo y filtros de Bloom [32][33][34], por otra parte en el área del
procesamiento del lenguaje natural recientemente se han explorado aplicaciones
como la identificación biométrica, la minería en redes sociales [5], el uso de la teoría
de grafos como apoyo cualitativo de investigación [6] y la nominalización en la
especificación de requerimientos [7].
En la Tabla 1 se muestra una descripción de trabajos relacionados con el uso de
información en redes sociales y otras fuentes para el análisis de tendencias
políticas:
Titulo Descripción
Analysis and Visualization of Social Media Networks [35]
Analiza una red de libros relacionados con la política estadounidense, utilizando el conjunto de datos “polbooks” de la UCI (University of California, Irvine) y mostrando sus resultados mediante un grafo donde los nodos están representados por letras para denotar el partido político (liberal, neutral o conservador).
Characterizing Communication Networks Associated with Political Hashtags [36]
Se analiza la actividad en twitter definida por hashtags en temas políticos; se recopiló información acorde a un evento específico y se analizaron factores como clustering, reciprocidad y longitud de caminos mediante grafos.
Discovering Political Tendency in Bulletin Board Discussions by Social Community Analysis [37]
Analiza comunidades sociales que participan en tableros de discusión (BBS) para encontrar tendencias políticas sin análisis lingüístico utilizando técnicas propias de grafos como particionamiento, clustering y coloreado.
Aplicación del análisis de redes sociales al estudio de la estructura y desarrollo de una red de blogs económicos políticos en Argentina [38]
Con base a un grupo de blogs de debates sobre actualidad, economía y política en Argentina, se propone realizar un mapeo de la red y realizar análisis con medidas de centralidad.
Graph Theory Algorithms for Analysing Political Blogs [39]
Muestra cómo utilizar la teoría de grafos para el análisis de texto de blogs de política y resaltar las ideas principales, temas sobresalientes y su interrelación.
Tabla 1. Revisión de trabajos relacionados, elaboración propia
6. OBJETIVOS
6.1 OBJETIVO GENERAL
Desarrollar un prototipo de software que permita representar relaciones académicas
y laborales de funcionarios públicos en Colombia utilizando datos abiertos.
6.2 OBJETIVOS ESPECÍFICOS
• Definir y/o desarrollar el crawler, que permita visitar y obtener la información
de los funcionarios públicos.
• Definir los requerimientos funcionales y no funcionales que permitan el
desarrollo de un prototipo de software que permita representar las relaciones
académicas y laborales de los funcionarios públicos.
• Definir, diseñar y desarrollar los componentes necesarios para la
implementación y validación del prototipo de software que permita
representar las relaciones académicas y laborales de los funcionarios
públicos.
7. METODOLOGÍA
Para el desarrollo del proyecto se utilizó la metodología ágil XP (Extreme
Programming) dado que el prototipo de software es de índole experimental y se
requiere una revisión continúa considerando que pueden surgir nuevas historias de
usuario, modificarse o eliminarse en las diferentes etapas o iteraciones de desarrollo
del proyecto.
7.1 DEFINICIÓN DE ITERACIONES Y ETAPAS
Cada una de las iteraciones que se definieron para el desarrollo del prototipo cuenta
con las etapas de análisis, diseño, codificación y pruebas. A continuación se
describen los artefactos que se generan en cada una de estas.
• Análisis: Se definen las historias de usuario acorde al formato que se muestra
en la tabla 2. El identificador consta de las siglas HU seguido de un número
consecutivo.
Nombre N° Iteración
Nombre de la historia de usuario Identificador de la
historia de usuario, por ejemplo, HU1
Número de la iteración en que se
desarrolla
Descripción Descripción corta y concisa de la historia de usuario
Prioridad Riesgo
Puede ser Alta, Media o Baja
Rango de 1 (riesgo bajo) a 5 (riesgo
alto)
Observaciones Consideraciones, notas o aclaraciones para la historia de usuario
Puntos Estimados
Número de horas estimado
Tabla 2. Plantilla de historias de usuario, diseño con base en [40]
• Diseño: Se realizan los modelos de bases de datos, arquitecturales o diagramas
relacionados según lo requiera la historia de usuario y tareas de ingeniería cuyo
identificador consta de las siglas TI seguido de un número consecutivo, el
formato a utilizar se detalla en la tabla 3.
N° Historia de usuario Etapa Horas
Identificador de la tarea, ejemplo TI1
Identificador de la historia de usuario
relacionada
Etapa de desarrollo en la que se efectuó
la tarea
Número de horas empleadas en
desarrollar la tarea
Nombre
Descripción
Tabla 3. Plantilla de tareas de ingeniería, diseño con base en [40]
• Codificación: Se elaboran los métodos, clases, funciones u otros elementos
que permitan el desarrollo de las tareas de ingeniería.
• Pruebas: Se realizan pruebas de aceptación por cada historia de usuario, el
identificador consta de las siglas PA seguido de un número consecutivo; se sigue
el formato de la tabla 4 para su documentación.
N° Historia de usuario Evaluación
Identificador de la prueba, ejemplo PA1
Identificador de la historia de usuario relacionada
Aceptada/Rechazada
Nombre
Condición
Entrada
Salida esperada
Tabla 4. Plantilla de pruebas de aceptación, diseño con base en [40]
8. DESARROLLO DEL PROTOTIPO
En este apartado se presenta la arquitectura diseñada para el sistema y el desarrollo
siguiendo la metodología XP con la documentación de cada una de las iteraciones
con base en los lineamientos descritos en el capítulo 7.
8.1 PRIMERA ITERACIÓN
La primera iteración comprende el hallazgo de fuentes de interés, su respectivo
análisis y la extracción de información de los perfiles de personas de cada uno de
los sitos.
8.1.1 HISTORIAS DE USUARIO
En la tabla 5 se muestran las historias de usuario que se definieron para la primera
iteración.
N° Nombre
historia de usuario
Descripción Estado
HU1
Exploración y análisis de las fuentes de información
Identificación de los sitios web que contienen información de interés y su respectivo análisis estructural de contenido.
Aprobada
HU2 Extracción de información de las fuentes
El sistema debe analizar cada una de las fuentes y acorde a su estructura extraer la información que corresponda
Aprobada
HU3
Almacenamiento de información obtenida de la extracción
Se define el o los motores de base de datos y diseño que permitan almacenar y manejar la información que se obtiene del web crawler
Aprobada
Tabla 5. Resumen historias de usuario primera iteración, elaboración propia
8.1.1.1 Exploración y análisis de las fuentes de información
En la tabla 6 se muestra un consolidado de los enlaces que contienen información
relevante para el propósito del proyecto; dado que la veracidad de la información
relacionada con las personas que ocupan cargos públicos es crítica, se decide
tomar como fuente principal las páginas oficiales de las entidades que hacen parte
de las tres ramas del poder público que son: la ejecutiva, legislativa y judicial, y
como segunda instancia otras fuentes oficiales que contienen hojas de vida de
funcionarios públicos.
Entidad N° Enlace
Ram
a l
eg
isla
tiva y
ju
dic
ial
Senado 1 http://www.senado.gov.co/el-senado/senadores
Cámara 2 www.camara.gov.co/representantes
Corte Suprema de Justicia
3 http://www.cortesuprema.gov.co/corte/index.php/directorio-telefonico/
Consejo de estado
4 https://www.ramajudicial.gov.co/portal/sobre-la-rama/magistrados-de-las-altas-cortes/consejo-de-estado
Consejo superior de la judicatura
5 http://www.despachospublicos.com/tipos-de-entidad/24/administraci%C3%B3n-judicial/consejo-superior-de-la-judicatura
Fiscalía General de la Nación
6 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/vicefiscal-general-de-la-nacion/
7 http://www.fiscalia.gov.co/colombia/la-entidad/el-fiscal/
8 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/director-nacional-de-politicas-y-planeacion/
9 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/director-de-planeacion-y-desarrollo/
10 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/jefe-de-la-oficina-de-divulgacion-y-prensa/
11 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/director-de-asuntos-internacionales/
12 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/director-de-control-interno/
13 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/jefe-oficina-de-veeduria-y-control-disciplinario-interno/
14 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/director-nacional-del-cuerpo-tecnico-de-investigacion-cti/
15 http://www.fiscalia.gov.co/colombia/la-entidad/el-fiscal/director-nacional-de-proteccion-y-asistencia/
16 http://www.fiscalia.gov.co/colombia/director-de-altos-estudios/
17 http://www.fiscalia.gov.co/colombia/la-entidad/equipo-de-trabajo/jefe-oficina-juridica/
Ram
a e
jecu
tiva Superintendencia
de salud
18 https://www.supersalud.gov.co/es-co/superintendencia/nuestra-entidad/directorio-de-funcionarios
19 https://www.supersalud.gov.co/es-co/superintendencia/nuestra-entidad/el-superintendente
Superintendencia financiera
20 https://www.superfinanciera.gov.co/jsp/publicaciones.jsf?id=20480
Superintendencia de vigilancia
21 https://www.supervigilancia.gov.co/publicaciones/537/el-secretario-general/
22 http://www.ssf.gov.co/wps/portal/ES/superintendencia/contratacion/directorio-contratistas/
Superintendencia de subsidio familiar
23
http://www.ssf.gov.co/wps/portal/ES/Inicio/mapa-sitio?1dmy&page=superintendencia&urile=wcm%3apath%3a%2Fsupersubsidio-est-org%2Festructuraorganicaytalentohumano%2Fdirectorio-de-funcionarios
24 http://www.ssf.gov.co/wps/portal/ES/Inicio/mapa-sitio?1dmy&page=superintendencia&urile=wcm%3apath%3a%2Fsupersubsidio-est-org%2Festructuraorganicaytalentohumano%2Fdirectivos
Superintendencia de sociedades
25 http://www.supersociedades.gov.co/nuestra_entidad/despacho_superintendente/Paginas/perfil_directivos.aspx
26 http://www.supersociedades.gov.co/nuestra_entidad/despacho_superintendente/Paginas/default.aspx
Superintendencia de servicios públicos domiciliarios
27 http://www.superservicios.gov.co/Institucional/Talento-Humano/Perfiles-de-nivel-directivo
Superintendencia de transporte
28 http://www.supertransporte.gov.co/index.php/la-entidad/perfiles-directivos/superintendente-delegada-de-puertos
29 http://www.supertransporte.gov.co/index.php/la-entidad/perfiles-directivos/superintendente-delegado-de-concesiones-e-infraestructura
30 http://www.supertransporte.gov.co/index.php/la-entidad/perfiles-directivos/superintendente-delegado-de-transito-y-transporte-terrestre-automotor
31 http://www.supertransporte.gov.co/index.php/la-entidad/perfiles-directivos/jefe-oficina-juridica
32 http://www.supertransporte.gov.co/index.php/la-entidad/perfiles-directivos/jefe-oficina-asesora-de-planeacion
33 http://www.supertransporte.gov.co/index.php/la-entidad/perfiles-directivos/jefe-control-interno
34 http://www.supertransporte.gov.co/index.php/la-entidad/perfiles-directivos/secretaria-general
Superintendencia solidaria
35 http://www.supersolidaria.gov.co/es/nuestra-entidad/1funcionarios
Superintendencia de industria y comercio
36 http://www.sic.gov.co/despacho-superintendente-de-industria-y-comercio
37
38 http://www.sic.gov.co/asesores-despacho
39 http://www.sic.gov.co/secretaria-general
40 http://www.sic.gov.co/delegatura-para-la-proteccion-del-consumidor
41 http://www.sic.gov.co/delegatura-para-la-proteccion-de-la-competencia
42 http://www.sic.gov.co/delegatura-para-la-propiedad-industrial
43 http://www.sic.gov.co/delegatura-para-la-proteccion-de-datos-personales
44 http://www.sic.gov.co/delegatura-reglamentos-tecnicos-y-metrologia-legal
45 http://www.sic.gov.co/delegatura-de-asuntos-jurisdiccionales
Ministerio de ambiente
46 http://www.minambiente.gov.co/index.php/ministerio/directorio
Ministerio de agricultura
47 https://www.minagricultura.gov.co/ministerio/Paginas/Directorio.aspx
48 https://www.minagricultura.gov.co/ministerio/Paginas/Viceministro-de-Desarrollo-Rural.aspx
49 https://www.minagricultura.gov.co/ministerio/Paginas/Viceministro-de-Asuntos-Agropecuarios.aspx
50 https://www.minagricultura.gov.co/ministerio/Paginas/Secretario-General.aspx
51 https://www.minagricultura.gov.co/contrataciones/Lists/Contratistas/default.aspx
52 https://www.minagricultura.gov.co/ministro/Paginas/Ministro.aspx
Ministerio de comercio industria y turismo
53 http://www.mincit.gov.co/publicaciones/79/funcionarios_principales_del_ministerio_de_comercio_industria_y_turismo
Ministerio de cultura
54 http://www.mincultura.gov.co/ministerio/quienes-somos/directorio-principal/Paginas/default.aspx
55 http://www.mincultura.gov.co/ministra/Paginas/default.aspx
Ministerio de transporte
56 https://www.mintransporte.gov.co/Publicaciones/Ministerio/Dependencias/viceministro_de_transporte
57 https://www.mintransporte.gov.co/Publicaciones/grupo_de_coordinacion_sectorial/viceministro_de_infraestructura
58 https://www.mintransporte.gov.co/Publicaciones/Ministerio/Dependencias/secretaria_general
Ministerio de vivienda
59 http://www.minvivienda.gov.co/sobre-el-ministerio/funcionarios
60 http://www.minvivienda.gov.co/el-ministro/hoja-de-vida
Ministerio de tecnología y comunicaciones
61 http://www.mintic.gov.co/portal/604/w3-propertyvalue-541.html#
62 http://www.mintic.gov.co/portal/604/w3-propertyvalue-542.html#
63 http://www.mintic.gov.co/portal/604/w3-propertyvalue-543.html#
64 http://www.mintic.gov.co/portal/604/w3-propertyvalue-6149.html#
Ministerio de trabajo
65 http://www.mintrabajo.gov.co/web/guest/el-ministerio/ministra-del-trabajo
66 http://www.mintrabajo.gov.co/web/guest/empleo-y-pensiones/viceministro
67 http://www.mintrabajo.gov.co/web/guest/relaciones-laborales/viceministra
Cancillería
68 http://www.cancilleria.gov.co/ministerio/viceministra-relaciones-exteriores
69 http://www.cancilleria.gov.co/ministra
70 http://www.cancilleria.gov.co/ministerio/viceministro-asuntos-multilaterales
71 http://www.cancilleria.gov.co/ministerio/secretario-general
Ministerio de minas
72 https://www.minminas.gov.co/el-ministro
73 https://www.minminas.gov.co/oficina-asesora-juridica
74 https://www.minminas.gov.co/oficina-de-control-interno
75 https://www.minminas.gov.co/oficina-de-planeacion-y-gestion-internacional
76 https://www.minminas.gov.co/oficina-de-asuntos-ambientales-y-sociales
77 https://www.minminas.gov.co/oficina-de-asuntos-regulatorios-y-empresariales
78 https://www.minminas.gov.co/viceministros
79 https://www.minminas.gov.co/viceministros
80 https://www.minminas.gov.co/secretaria-general
81 https://www.minminas.gov.co/direccion-mineria-empresarial
82 https://www.minminas.gov.co/direccion-de-formalizacion-minera
83 https://www.minminas.gov.co/direccion-de-energia-electrica
84 https://www.minminas.gov.co/direccion-de-hidrocarburos
85 https://www.minminas.gov.co/subdireccion-administrativa-y-financiera
86 https://www.minminas.gov.co/subdireccion-de-talento-humano
Ministerio de educación
87 https://www.mineducacion.gov.co/portal/Ministerio/Informacion-Institucional/355837:La-Ministra
Ministerio de hacienda
88 http://www.minhacienda.gov.co/HomeMinhacienda/faces/Ministerio/AcercaMinisterio/EstructuraTalentoHumano/ServidoresPublicos/DirJefeOfic?
89 http://www.minhacienda.gov.co/HomeMinhacienda/faces/PerfilMinistro
90 http://www.minhacienda.gov.co/HomeMinhacienda/faces/Menus/menuo/perfilvicegeneral
91 http://www.minhacienda.gov.co/HomeMinhacienda/faces/Menus/menuo/perfilvicetecnico
92 http://www.minhacienda.gov.co/HomeMinhacienda/faces/Menus/menuo/perfilsecretariogeneral
Presidencia 93 http://es.presidencia.gov.co/presidencia/Paginas/presidente.aspx
Vicepresidencia 94 http://www.vicepresidencia.gov.co/vicepresidencia/Paginas/vicepresidente.aspx
Departamento nacional de planeación
95 https://www.dnp.gov.co/direccion-general/Paginas/Perfil.aspx
Departamento de prosperidad social
96 http://www.dps.gov.co/ent/gen/SitePages/Perfil_directivos.aspx
Departamento administrativo de la función pública
97 http://www.funcionpublica.gov.co/equipo-directivo;jsessionid=2113330124EF5F85262591BED67D29C1
Unidad Administrativa Especial de Organizaciones Solidarias
98 http://www.orgsolidarias.gov.co/la-entidad/qui%C3%A9nes-somos/perfil-del-director
Otr
as f
uen
tes
gu
bern
am
en
tale
s Sistema de
Información y Gestión del Empleo Público (SIGEP)
99 http://www.sigep.gov.co/directorio
Sistema de publicación de hojas de vida
100 https://aspirantes.presidencia.gov.co/
Tabla 6. Consolidado de fuentes de información, elaboración propia
En la figura 4 se representa el análisis realizado de los atributos que contiene cada
una de las páginas para los funcionarios públicos, el número asociado corresponde
al que se asignó en la Tabla 6:
N°
fech
a d
e ac
tual
izac
ión
No
mb
re c
om
ple
to
Foto
Per
fil
Co
rreo
Telé
fon
os
Ofi
cin
a
Co
mis
ión
Luga
r d
e n
acim
ien
to
Par
tid
o p
olít
ico
Dep
arta
men
to
Red
es s
oci
ales
Siti
o w
eb
Per
iod
o c
on
stit
ucio
nal
Legi
slat
ura
Vo
tos
ob
ten
ido
s
Car
go
Gra
do
/Ord
en
Dep
end
enci
a
Tip
o d
e vi
ncu
laci
ón
Enla
ce a
SIG
EP
Do
cum
ento
de
iden
tid
ad
iden
tifi
caci
ón
Exp
erie
nci
a la
bor
al
Form
ació
n a
cadé
mic
a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Figura 4. Correlación de fuentes y atributos, elaboración propia
8.1.1.2 Extracción de información de las fuentes
Para la extracción automática de la información de las páginas de la tabla 6, se
requiere de una herramienta que permita interactuar con los elementos de un sitio
web, como por ejemplo dar clic a un botón o enlace, volver a la página anterior y
buscar elementos por XPATH, id, clase u otros atributos; por otra parte se requiere
que los componentes a desarrollar sean altamente reutilizables y autónomos por lo
tanto se decide utilizar orientación a servicios, definiendo los procesos de negocio
a partir del análisis realizado a las fuentes y los tipos de página definidos.
8.1.1.3 Almacenamiento de información obtenida de la extracción
Las fuentes de información son variadas en estructura e información contenida por
lo tanto se hace necesario que los metadatos que fueron resultado del análisis
realizado en la historia de usuario HU2 se guarden para que se facilite y automatice
la extracción de información. Como un hecho particular fueron encontrados casos
en los que más de un enlace tiene los mismos metadatos, debido a que pertenecían
a la misma entidad y dominio (se presenta un caso claro en el análisis de los sitios
con número de 6 al 10, ver anexo 1). En la figura 5 se esboza el modelo general de
la colección de MongoDB donde se almacena esta información (se debe tener en
cuenta que las relaciones en dicha representación no indican documentos
diferentes sino subestructuras del mismo).
8.1.1.4 Optimización para el acceso a la información
Una base de datos en memoria reduce el tiempo de respuesta significativamente, y
dado que el número de fuentes puede ir en aumento se decide utilizar el sistema
manejador de bases de datos REDIS para almacenar información clave de las
fuentes y su estado de procesamiento, asimismo las personas con el conjunto de
fuentes en donde puede encontrarse.
8.1.2 TAREAS DE INGENIERÍA
En la tabla 7 se encuentra el listado de tareas de ingeniería necesarias para la
primera iteración, los detalles de cada tarea se encuentran en el anexo 1.
Figura 5. Diseño de almacenamiento para metadatos, diseño propio
Tarea Historia de
usuario Nombre Estado
TI1 HU1 Búsqueda de patrones en la estructura de las fuentes de información
Aprobada
TI2 HU1 Identificación de elementos HTML de interés
Aprobada
TI3 HU2 Diseño del web Crawler Aprobada
TI4 HU2 Esquema de políticas de servicios Aprobada
TI5 HU2 Elección de herramienta para extraer información
Aprobada
TI6 HU2 Codificación de los componentes del web crawler
Aprobada
TI7 HU3 Diseño de estructura de almacenamiento del sitio web
Aprobada
TI8 HU3 Diseño de estructura en REDIS Aprobada Tabla 7. Tareas de ingeniería de primera iteración, elaboración propia
8.1.2.1 Búsqueda de patrones en la estructura de las fuentes de información
En primer lugar, se realizó un análisis de tipos de etiquetas para cada uno de los
sitios, dado que los tipos de documento son HTML se identificaron las etiquetas
acordes a los atributos del perfil de los funcionarios públicos, ver tabla 8.
Etiquetas HTML Atributos del funcionario
Texto
<span> <h1>,<h2>,<h3> … <p> <div>
Nombre Perfil Cargo Teléfonos Oficina Lugar de nacimiento
Imagen <img> Foto
Enlace <a> Correo electrónico Redes sociales Enlace a SIGEP
Tabla 8. Identificación de etiquetas HTML por atributo, elaboración propia
A pesar de que la estructura de la página web es variable para cada uno de los
sitios, se logró generalizar la estructura a partir del análisis realizado en los casos
que se describen a continuación:
• Página con estructura sencilla: desde la vista principal se tiene acceso a la
información o perfil de una sola persona (ver figura 6).
Figura 6. Esquema de página sencilla, diseño propio
• Página con contenedores internos: en la vista principal existen contenedores
(pueden ser de tipo <div> o <table>) y en cada una de las subdivisiones existe una
estructura “SENCILLA” (ver figura 7).
• Página con enlaces a perfiles: en la vista principal existen enlaces a páginas
de estructura sencilla (ver figura 8).
• Patrones en el enlace de búsqueda para un sitio: se encuentra una sección
fija en la url seguida de un consecutivo numérico que tiene límites superior e inferior,
al completar la ruta con estos números se accede directamente a una página de
estructura sencilla (ver figura 9).
Los sitios web se pudieron clasificar en estas categorías a excepción de los dos
pertenecientes al apartado “Otras fuentes gubernamentales” (ver tabla 6) que tienen
un comportamiento distintivo y propio.
Figura 7. Esquema de página con contenedores, diseño propio
Figura 9. Esquema de página con patrones en la url, diseño propio
Figura 8. Esquema de página con enlaces a perfiles, diseño propio
8.1.2.2 Identificación de elementos HTML de interés
El lenguaje XPATH permite acceder a secciones específicas de un documento3
mediante el uso de atributos de estilo como la clase o el id; algunos complementos
para los navegadores facilitan la edición o construcción de las expresiones XPATH,
como por ejemplo Firepath4 para Firefox o XPath Helper para Chrome. Dado que
para cada sitio la estructura es variable, en el anexo 4 se muestra un análisis
estructural que se realizó para cada uno.
8.1.2.3 Diseño del web Crawler
Con base en la clasificación de los servicios de SOA (Service Oriented Architecture)
[41] se plantean los servicios de tarea, entidad y utilidad. Los servicios de tarea
están alineados con el proceso de negocio, en este caso corresponde al análisis del
sitio web, los servicios de entidad tienen una dinámica y comportamientos
independientes y según los resultados de la tarea de ingeniería 1 TI1 se propone un
servicio de entidad para cada tipo de página adicionando el sitio web del SIGEP y
el repositorio de hojas de vida de la presidencia de la república fuentes 99 y 100 de
la tabla 6; finalmente los servicios de utilidad tienen naturaleza genérica y son de
fácil reutilización, en este caso son transversales a la extracción de información de
los sitios. El esquema con la clasificación de los tipos de servicios descritos
anteriormente se muestra en la figura 10.
Figura 10. Clasificación de servicios del crawler, fuente propia
3 https://www.w3.org/TR/1999/REC-xpath-19991116/
4 https://addons.mozilla.org/en-US/firefox/addon/firepath/
8.1.2.4 Esquema de políticas de servicios
En la tabla 9 se visualiza el esquema de políticas o SLA (Service level
agreement)[41] donde se describe información de las entradas, salidas y
funcionalidad de cada uno de los servicios:
Nombre Descripción Entrada Salida
Tare
a
Extraer
información
de sitio web
Analiza la metadata del sitio web
y retorna la información de la/las
persona(s) que se encuentren en
formato JSON y sus respectivos
campos de auditoría.
Json con los
metadatos de la
página
Json con
información
encontrada, fecha
y hora del análisis.
En
tid
ad
En
tid
ad
Explotar
página de
estructura
sencilla
Obtiene la información de la
persona
Json con los
metadatos de la
página
Json con
información
encontrada
Explotar
página con
estructura de
contenedores
Obtiene la información de cada
perfil alojado en elementos como
<div>, <table>, <list>.
Json con los
metadatos de la
página, incluyendo
el elemento a iterar
Json con
información
encontrada
Explotar
página con
enlaces de
redirección a
perfiles.
Obtiene la información del perfil
alojado en cada una de las
páginas anidadas en formato
JSON
Json con los
metadatos de la
página
Json con
información
encontrada
Explotar
página con
patrones en
la url
Obtiene la información del perfil
alojado en cada una de las
páginas en formato JSON
JSON con los
metadatos de la
página, incluyendo
los límites superior
e inferior del patrón.
JSON con
información
encontrada
Explotar
SIGEP
Obtiene la información del perfil
del funcionario en formato JSON,
también permite búsqueda de
perfiles por nombre
JSON con los
metadatos de la
página, nombre (no
requerido)
JSON con
información
encontrada
Explotar
repositorio
HV
presidencia
Obtiene la información del perfil
del funcionario en formato JSON,
también permite búsqueda de
perfiles por nombre
JSON con los
metadatos de la
página, nombre (no
requerido)
JSON con
información
encontrada
Uti
lid
ad
Estado de
disponibilidad
de URL
Verifica si el enlace responde
correctamente a una petición http
URL 1 si está
disponible, 0 en
caso contrario
Identificar
elemento
HTML
Utilizando expresiones regulares
identifica si el elemento contiene
texto, imagen, enlace o es
desconocido.
Elemento HTML retorna en un
String el tipo de
dato que contiene
la etiqueta (text,
img, url)
Obtener
información
Obtiene el texto, fuente de la
imagen o enlace de un elemento
HTML.
XPATH del
elemento HTML
String con la
información
obtenida.
Generar
campos de
auditoría
Obtiene la fecha y hora en el
momento de la solicitud y los
retorna.
Ninguna String con fecha y
hora actual
Tabla 9. Esquema de políticas de servicios del web crawler, elaboración propia
8.1.2.5 Elección de herramienta para extraer información
En la tabla 10 se consolidan las herramientas que podrían apoyar la extracción de
información de los sitios web y sus características a nivel general en cuanto a las
facilidades en navegación e interacción con el contenido.
Navegación Contenido
BeautifulSoup
Tipos de etiquetas, propiedades de clase y expresiones regulares
Descarga el contenido XML o HTML y se trabaja sobre este
Scrapy Etiquetas de estilo, expresiones regulares, XPATH
Se parte de una semilla (sitio web inicial) posteriormente se define a partir de selectores cual es la siguiente petición HTTP para continuar el ciclo de descarga de contenido.
Selenium
XPATH, etiquetas de estilo, id, clase, nombre del elemento, texto en los enlaces
Utiliza un driver de navegador y a través de este se pueden utilizar todas sus funcionalidades.
Tabla 10. Herramientas para extracción de información, elaboración propia
De las fuentes consolidadas en la Tabla 6, algunas requieren interacción con
componentes JavaScript como por ejemplo volver a la página anterior, acciones en
botones y ventanas emergentes; este tipo de acciones no es posible manejarlas con
el contenido estático HTML, Selenium permite automatizar estas interacciones en
el navegador utilizando un driver de navegador; los más comunes son: Edge[42],
Firefox[43], Chrome[44] y Safari[45]; estos mantienen un componente gráfico por lo
tanto puede visualizarse todo el flujo de la interacción; sin embargo, para esta
implementación es preferible mantener este proceso en segundo plano, esto lo
permite el driver de PhantomJS[46] (navegador sin interfaz gráfica).
Se decide utilizar Selenium con PhantomJS como driver para la exploración de los
sitios web apoyándose cuando se requiera con Beautiful Soup para los elementos
estáticos.
8.1.2.6 Codificación de los componentes del web crawler
Se realiza la codificación de cada uno de los componentes que se definieron en la
arquitectura siguiendo los principios de la orientación a servicios utilizando el
lenguaje de programación Python.
8.1.2.6.1 Codificación de servicios de utilidad
La disponibilidad del enlace se verifica a partir de los códigos de estado HTTP
descritos en el anexo 5, en la tabla 11 se sintetiza cada tipo de respuesta, el primer
digito determina la clasificación general de la respuesta de la petición por ende este
servicio retornará 1 si la respuesta de la petición fue exitosa (2XX) y 0 en cualquier
otro caso.
Digito inicial Clasificación Tipo de
respuesta
1
Informativa (respuesta provisional que requiere aceptación del usuario)
1XX
2 Petición correcta 2XX 3 Redirección 3XX 4 Error del cliente 4XX 5 Error del servidor 5XX
Tabla 11. Códigos de estado HTTP, elaboración propia
En el momento de identificar los elementos HTML se utilizaron expresiones
regulares para identificar etiquetas de imagen, enlaces y texto, esto permite que al
momento de obtener la información se puedan extraer los atributos que
correspondan a partir del XPATH del elemento. En la tabla 12 se presenta un
ejemplo concreto del análisis e identificación de información.
Sitio Web
Nombre
HTML <td class="ms-cellstyle ms-vb2">Jonathan Malagón González</td>
XPATH .//td[3][text()]
REGEX ^.*text\(\)\]$
Foto
HTML <img src="/ImagenesContenido/ministro_JonathanMalagon_mini.JPG" alt="Ministro de Vivienda - Jonathan Malagón González">
XPATH .//td[2]/img
REGEX ^.*img$ Tabla 12.Estructura de elementos HTML de interés, elaboración propia
8.1.2.6.2 Codificación de servicios de entidad
El esquema de políticas de servicios de la tabla 9, brinda los lineamientos
fundamentales para estructurar cada uno de los servicios definidos, en las figuras
11 a 14 se muestra el pseudocódigo de cada uno; además surge un nuevo servicio
(ver figura 15) que es reutilizado para la extracción de los tipos de página de
contenedores, enlaces y enlaces con límites que recibe el driver como parámetro
adicional, esto último con el objetivo de brindar la sección específica que se va a
analizar.
Figura 11. Pseudocódigo para explotar página sencilla, diseño propio
Figura 13. Pseudocódigo para explotar página de contenedores, diseño propio
Figura 14. Pseudocódigo para explotar página con enlaces, diseño propio
Figura 12. Pseudocódigo para explotar página con patrón numérico en la url, diseño propio
8.1.2.7 Diseño de estructura de almacenamiento del sitio web
La información que se obtiene de la extracción es semiestructurada en formato
JSON (JavaScript Object Notation) y dado que MongoDB es una base de datos
orientada a documentos de tipo BSON (Binary JSON), es compatible y facilita el
almacenamiento de los datos que se obtienen de los sitios web.
Figura 15. Pseudocódigo para explotar subestructuras de la página, diseño propio
Figura 16. Diseño de almacenamiento de la página en MONGODB, diseño propio
8.1.2.8 Diseño de estructura en REDIS
Redis se plantea como un complemento a las estructuras definidas en MongoDB, al
mantener en memoria los datos de mayor relevancia para facilitar las búsquedas y
procedimientos de explotación; para el manejo de enlaces (figura 17) se utilizan
valores de tipo HASH que permiten almacenar pares clave-valor o representar
objetos, en este caso el identificador es la url y los atributos permiten que se
identifique rápidamente cuáles son sus metadatos relacionados y en caso de que el
sitio haya sido explotado cual es el identificador de la versión de la página. Por otra
parte, para las personas (figura 19) se utilizan valores de tipo SET que son conjuntos
de elementos no repetidos que permiten identificar los sitios que tienen relación con
cada persona.
8.1.3 PRUEBAS DE ACEPTACIÓN
El resumen de las pruebas de aceptación para las historias de usuario se presenta
en la tabla 13, los detalles de cada una se pueden ver en el anexo 1.
N° de prueba N° Historia de usuario
Nombre de la prueba Estado
PA1 HU1 Funcionalidad de XPATH Aprobada
PA2 HU2 Obtener información de las fuentes de información
Aprobada
PA3 HU2 Tiempo límite de respuesta de cuatro minutos para la tarea de extracción
Rechazada
PA4 HU3 Almacenamiento completo de la información extraída en MongoDB
Aceptada
Tabla 13. Pruebas de aceptación, primera iteración
Figura 18. Diseño de estructura en Redis para enlaces de sitios web, diseño propio
Figura 17. Diseño de estructura en Redis para personas, diseño propio
La prueba de aceptación número PA3 cumple con la salida esperada para los tipos
de página sencilla y de contenedores, sin embargo en los casos de enlaces y
patrones numéricos en la url el tiempo de respuesta es directamente proporcional a
la cantidad de enlaces que se deben analizar del sitio, de tal modo que el tiempo de
respuesta no es aceptable; por ende se crea una historia de usuario para codificar
nuevos servicios que permitan analizar estos dos tipos de página en un tiempo
razonable.
8.2 SEGUNDA ITERACIÓN
Esta iteración comprende la historia de usuario que surgió de la iteración anterior y
mejoras funcionales del web crawler.
8.2.1 HISTORIAS DE USUARIO
En la tabla 14 se describen las historias de usuario que se definieron para la
segunda iteración.
N° Nombre
historia de usuario
Descripción Estado
HU4 Codificación de servicios adicionales
Servicios alternativos que permitan explotar páginas de tipo enlaces y patrón numérico en la url optimizando el tiempo de respuesta.
Aprobada
HU5 Unificación de versiones de páginas
Componente que permita unificar la información de versiones del mismo sitio en diferente espacio de tiempo.
Aprobada
HU6
Ejecución de tareas programadas de extracción
Componente que permita la explotación de los diferentes sitios de forma automática y programada.
Aprobada
Tabla 14. Historias de usuario, segunda iteración
8.2.1.1 Codificación de servicios adicionales
Para los subsitios de la página de enlaces o de patrón numérico se realiza el análisis
y explotación proponiendo como alternativa guardar una nueva página sencilla con
estado 0 (Nuevo) para cada uno de estos. Como consecuencia se reduce
drásticamente el tiempo de espera en cada caso, permitiendo así que puedan ser
tratados de forma independiente.
8.2.1.2 Unificación de versiones de páginas
Cada uno de los sitios se actualiza con una frecuencia que se desconoce, sin
embargo, es necesario buscar cada cierto tiempo nueva información en el sitio
relacionada con los funcionarios, nuevos miembros o cambio de personal. Por lo
anterior se requieren controlar los cambios sin perder información previamente
almacenada, con este objetivo se plantea la construcción de un servicio que permita
unificar las versiones de la página con cada nueva exploración.
8.2.1.3 Ejecución de tareas programadas
Dado el número de fuentes que se deben analizar, y el tiempo de respuesta, se
plantea la ejecución en paralelo para el análisis de los sitios utilizando tareas
programadas, considerando los recursos disponibles de memoria y procesamiento.
8.2.2 TAREAS DE INGENIERÍA
En la tabla 15 se encuentra el listado de tareas de ingeniería necesarias para la
segunda iteración, los detalles de cada tarea se encuentran en el anexo 2
Tarea Historia de
usuario Nombre Estado
TI8 HU4 Codificación de servicios alternativos para análisis y explotación
Aprobada
TI9 HU5 Análisis de similitud de texto Aprobada
TI10 HU5 Criterio de clasificación de contenido nuevo
Aprobada
TI11 HU5 Codificación de componente unificador de versiones
Aprobada
TI12 HU6 Codificación de componente para ejecución de tareas en paralelo
Aprobada
Tabla 15. Tareas de ingeniería, segunda iteración
8.2.2.1 Codificación de servicios alternativos para análisis y explotación
La información de entrada de las páginas de tipo enlaces y patrón numérico en la
URL es suficiente para crear por cada subsitio una nueva página de estructura
sencilla, así se almacenan los metadatos en MongoDB y el estado de nueva página
en Redis (ver figura 19).
Figura 19. Servicios alternativos de análisis y explotación, diseño propio
8.2.2.2 Análisis de similitud de texto
Difflib es una librería para Python sin dependencias de sistema operativo que
permite analizar cadenas de texto mediante diferentes métodos [47]. En la tabla 16
se muestra el ejemplo de salida de cada uno de los métodos del componente, los
valores oscilan entre 0 y 1 donde 1 significa que las cadenas de texto son idénticas
y 0 que no tienen nada en común.
Cadena de entrada 1 Cadena de entrada 2 ratio real_quick
_ratio quick_ratio
Presidente Vicepresidente
0.83 0.83 0.83
Dr. Juan Guillermo Zuluaga Cardona
Juan Guillermo Zuluaga Cardona
0.9375 0.9375 0.937
5
Es profesora de cátedra de la Pontificia Universidad Javeriana y de la Universidad Externado de Colombia.
Es profesora de cátedra de la Universidad Externado de Colombia y de la Pontificia Universidad Javeriana.
0.61 1.0 1.0
Aeio eiou 0.75 1.0 0.75 Tabla 16. Análisis de similitud de texto, elaboración propia
El método ratio obtiene bloques de coincidencias en las cadenas de texto lo que
representa un alto costo de procesamiento, real_quick_ratio se basa en la
longitud de las cadenas de texto y halla un límite superior pero no analiza su
contenido, finalmente quick_ratio tiene un tiempo de respuesta inferior dado que
analiza bloques de las cadenas de texto con una segmentación ágil.
8.2.2.3 Criterio de clasificación de contenido nuevo
Se decide utilizar el método quick_ratio con umbral de 0.84 con base en pruebas
realizadas con ejemplos similares a los expuestos en la tabla 16, si es inferior a esta
medida se considera información nueva, de lo contrario significa que ya se cuenta
con esa información y se mantienen los datos previos.
8.2.2.4 Codificación de componente unificador de versiones
En la figura 20 se muestra la estructura del servicio que permite unificar dos
versiones de un sitio, utilizando el criterio definido en la tarea de ingeniería 10.
8.2.2.5 Codificación de componente para ejecución de tareas en paralelo
Node.js facilita la ejecución de tareas en paralelo, dado que las tareas de análisis y
extracción están codificadas en Python, se requiere de:
• Child Process: Componente que permite ejecutar scripts y obtener la salida
utilizando spawn() [48].
• Cron: Permite programar las tareas especificando días, horas, minutos y
segundos [49].
• Async: Permite la ejecución en paralelo de las tareas [50].
8.2.3 PRUEBAS DE ACEPTACIÓN
El resumen de las pruebas de aceptación para las historias de usuario se presenta
en la tabla 17, los detalles de cada una se pueden ver en el anexo 2.
N° de prueba N° Historia de usuario
Nombre de la prueba Estado
PA5 HU4 Tiempo límite de respuesta de cuatro minutos para la tarea de extracción
Aprobada
PA6 HU5 Reconocimiento de diferencias significativas Aprobada
PA7 HU5 Unificación correcta de dos páginas Aprobada
PA8 HU6 Extracción en paralelo Aprobada
PA9 HU6 Configuración de tarea programada Aprobada Tabla 17. Pruebas de aceptación, segunda iteración
8.3 TERCERA ITERACIÓN
Esta iteración comprende la construcción e integración del entorno gráfico para el
web crawler que permita al usuario final realizar búsquedas y tenga la posibilidad
Figura 20. Pseudocódigo para unificar versiones, diseño propio
de ver los resultados tanto en estructura JSON como el grafo con sus respectivos
nodos y relaciones.
8.3.1 HISTORIAS DE USUARIO
En la tabla 18 se describen las historias de usuario que se definieron para la tercera
iteración.
N° Nombre historia
de usuario Descripción Estado
HU7 Reestructuración de
la información
Diseño de estructura para representar la información resultante del crawler en un motor de base de datos orientado a grafos.
Aprobada
HU8 Diseño de vista
principal del sitio web
Definición de nombre, logo y vista principal del sitio web
Aprobada
HU9 Interfaz del web
Crawler Integración de búsqueda y visualización de resultados del crawler
Aprobada
HU10 Interfaz de
visualización del grafo
Visualización del grafo con funcionarios y entidades
Aprobada
HU11 Interfaces
informativas Se construyen e integran las interfaces de información adicional.
Aprobada
Tabla 18. Historias de usuario, tercera iteración
8.3.1.1 Reestructuración de la información
Se realiza un análisis de los objectos serializados JSON que da como resultado el
crawler con la información contenida del sitio web para identificar su
correspondencia estructural para la representación en Neo4j en nodos y relaciones;
el flujo del proceso de construcción se puede ver en la figura 21.
En primer lugar se identifican los atributos propios del funcionario dado que pueden
existir múltiples sitios con información relacionada se mantiene el nombre de la
fuente relacionado con cada atributo; posteriormente se verifica la existencia del
nodo en caso de que no se encuentre se crea y en caso contrario se actualizan los
atributos relacionados al nodo.
Luego se procede a actualizar la información académica y laboral (si se encuentra),
en caso de que la entidad no se especifique la información quedará relacionada con
una entidad de nombre “DESCONOCIDO” de lo contrario se verifica la existencia
de la entidad en la base de datos y se procederá con su creación en caso de que
no se encuentre.
Figura 21. Flujo de creación de nodos y relaciones, diseño propio
8.3.1.2 Diseño de vista principal del sitio web
Dada la relevancia de la extracción de la información en el proyecto se decide
denominar al web crawler “Palliri”, palabra quechua que denomina a la persona
(habitualmente de género femenino) que se dedica a recolectar mineral de las rocas.
Se definen los elementos base para el diseño de la vista principal del sitio web:
• Logo, representación de herramienta de exploración y recolección, ver figura 22.
• Propósito, es importante evidenciar a primera vista la funcionalidad del sitio
web.
• Barra de navegación, debe permitir el acceso a todas las opciones de
navegación de forma sencilla.
• Acceso a información general del sitio, grupo de investigación, contacto.
Figura 22. Logo Palliri, diseño propio
8.3.1.3 Interfaz del web Crawler
Se construyen los métodos de búsqueda de funcionarios y entidades
posteriormente se hace la respectiva integración en el sitio web donde se visualiza
la lista de resultados según los parámetros de la búsqueda y se puede observar y
descargar el resultado del crawler.
8.3.1.4 Interfaz de visualización del grafo
En primer lugar se define cual va a ser la herramienta de apoyo en la visualización
del grafo, posteriormente se hace la respectiva parametrización de la conexión a
Neo4j y los ajustes de integración con el sitio y de visualización necesarios.
8.3.1.5 Interfaces informativas
Se construyen e integran las interfaces graficas de contacto, información del grupo
de investigación, información del proyecto y funcionamiento del aplicativo.
8.3.2 TAREAS DE INGENIERÍA
En la tabla 19 se listan las tareas de ingeniería necesarias para la tercera iteración,
los detalles de cada una se encuentran en el anexo 3.
Tarea Historia de
usuario Nombre Estado
TI13 HU7 Diseño de estructura orientada a grafos Aprobada
TI14 HU7 Construcción de nodos y relaciones Aprobada
TI15 HU7 Elección de herramienta para visualización del grafo
Aprobada
TI16 HU8 Creación del esquema base del sitio web Aprobada
TI17 HU9 Creación de búsquedas por entidad y funcionario
Aprobada
TI18 HU9 Construcción de interfaz del crawler Aprobada
TI19 HU10 Construcción de interfaz del grafo Aprobada
TI20 HU10 Visualización de atributos en la relación Aprobada
TI21 HU10 Integración de resultados con el grafo Aprobada
TI22 HU11 Construcción de página web de contacto Aprobada
TI23 HU12 Construcción de página web con información del grupo
Aprobada
Tabla 19. Tareas de ingeniería, tercera iteración
8.3.2.1 Diseño de estructura orientada a grafos
El diseño del modelo orientado a grafos requiere definir en primer lugar las
entidades en el grafo y sus atributos (ver tabla 20), por otra parte, las relaciones que
permitirán conectar las entidades se detallan en la tabla 21, es necesario especificar
el nodo de inicio y fin (nodo adyacente e incidente respectivamente), los atributos
propios de la relación permiten tener información adicional; el esquema general se
puede ver en la figura 23.
Nodo Atributos
Entidad (Entity) Nombre (identificador), fuente
Funcionario (Person) Nombre (identificador), información personal y perfil Tabla 20. Nodos del grafo, elaboración propia
Relación Nodo adyacente
Nodo incidente
Atributos
Trabajo en (WORK_IN)
Funcionario Entidad Fecha de inicio y fin, cargo, fuente
Estudió en (STUDY_IN)
Funcionario Entidad Nivel, estado, título recibido, fuente
Se postuló en (APPLY_TO)
Funcionario Entidad Cargo al que se postula, fecha de inicio y fin
Tabla 21. Relaciones del grafo, elaboración propia
Figura 23. Diseño inicial del grafo, diseño propio
8.3.2.2 Construcción de nodos y relaciones
Para las operaciones relacionadas con la base de datos se construyó un módulo
utilizando py2neo[51] con los métodos para la conexión, registro y consulta en Neo4j
usando como base el lenguaje Cypher con apoyo en las clausulas MERGE y
UNWIND, la primera evita la redundancia en la creación de los nodos y la segunda
permite iterar sobre un objeto para relacionar los atributos ya sea sobre el nodo o la
relación.
8.3.2.3 Elección de herramienta para visualización del grafo
En la tabla 22 se sintetizan las herramientas que pueden utilizarse para visualizar
los grafos en Neo4j, y sus características principales.
Herramienta Funcionalidades en visualización de grafos Conexión
directa a Neo4j
Neovis.js[52]
Utiliza vis.js para personalizar propiedades de visualización de nodos y relaciones, este proyecto hace parte de los laboratorios de Neo4j[53]
SI
Popoto.js[54]
Basada en D3.js, permite integrar componentes de visualización como por ejemplo un panel de consultas en Cypher, la taxonomía de nodos, el grafo resultante, además, permite personalizar propiedades de diseño del grafo
SI
D3.js[55] Permite embeber visualización de grafos, requiere una estructura definida de nodos y relaciones
NO
Vis.js[56] Ofrece una variedad de posibilidades para dar estilo a los nodos, etiquetas, animación, color y agrupación de elementos
NO
Sigma.js[57]
Requiere datos en formato JSON o GEXF, permite una visualización básica pero de fácil extensión, facilita la manipulación del grafo y su ajuste en la vista
NO
Tabla 22. Herramientas de visualización de grafos, elaboración propia
Se decide utilizar Popoto.js como apoyo para la visualización del grafo dado que
permite integrar fácilmente componentes de interacción con los datos, es fácilmente
extensible y permite personalizar las propiedades de estilos del grafo.
La aplicación básica de Popoto.js tiene los componentes que se describen a
continuación y se visualizan en la figura 24.
1. Grafo: Se presentan los nodos y relaciones, permiten interacción para
expandir y contraer información.
2. Acciones: Permiten ajustar la visualización del grafo como por ejemplo:
centrar, ver en pantalla completa y ajustar etiquetas al tamaño de los nodos.
3. Taxonomía: Muestra los tipos de nodos presentes en el grafo.
4. Query: Cambia acorde a la interacción con el grafo y muestra la sentencia
Cypher que corresponda a la visualización actual del grafo.
5. Resultados: Muestra los atributos relacionados a los nodos que da como
resultado la visualización actual del grafo.
Figura 24. Componentes Popoto.js: Grafo(1),Acciones(2),Taxonomía(3),Query(4),Resultados(5)[58]
8.3.2.4 Creación del esquema base del sitio web
Se decide utilizar Flask, un framework de Python que permite la creación de
aplicaciones web, para la visualización utiliza Jinja, un motor de plantillas
(templates) que facilita el manejo de los datos en la vista y además permite extender
o incluir otras plantillas para evitar la sobreescritura[59].
Siguiendo los lineamientos de diseño de Jinja[60] se construyen los siguientes
elementos para tener la base del sitio web (ver figura 25), cada uno se encuentra
en un archivo HTML independiente:
• Header, compuesto por el logo y descripción inicial, fijo en la parte superior.
• Navbar, tiene los elementos de navegación dentro del sitio web, se sitúa en
la parte lateral izquierda.
• Footer, contiene información general del sitio, se sitúa de manera estática en
la parte inferior.
Figura 25. Vista principal Palliri, diseño propio
8.3.2.5 Creación de búsquedas por entidad y funcionario
Para agilizar las búsquedas por nombre de funcionario se extiende el módulo de
redis utilizado en el crawler para realizar búsquedas sobre la clave (Nombre de la
persona) y obtener los identificadores de las versiones de las páginas web que tiene
relacionadas.
Por otra parte la búsqueda por entidad se realiza apoyándose en el componente de
consulta de MongoDB.
8.3.2.6 Construcción de interfaz del crawler
Se integra la búsqueda por funcionario y entidad para listar los resultados (ver figura
26) y posteriormente mostrar el JSON que se obtiene del crawler, dando la
posibilidad de realizar una nueva búsqueda y descargar los resultados para facilitar
la reutilización de esta información, ver figura 27.
Figura 26. Búsqueda y lista de resultados, diseño propio
Figura 27. Visualización de resultados del crawler, diseño propio
8.3.2.7 Construcción de interfaz del grafo
Se realiza la parametrización de Popoto.js con los parámetros que se muestran en
la tabla 23.
Parametro Valor
CYPHER_URL Url usada por el API REST de Neo4j para ejecutar queries
AUTHORIZATION Codificación Base64 del usuario y contraseña de Neo4j
node.Provider
Se provee información de los nodos que se van a visualizar en el grafo.
link.Provider Se personalizan los colores y textos a mostrar en las relaciones
Tabla 23. Configuración Popoto.js, fuente propia
Figura 28. Vista inicial del grafo, fuente propia
La librería provee la facilidad de especificar los atributos que se van a visualizar en
los nodos, pero dado que para este caso los atributos son variables se construye un
método en JavaScript para extender los resultados y permitir la visualización
dinámica de los atributos de los nodos, además se modifica la estructura de
visualización de los resultados como se muestra en la figura 29.
Figura 29. Visualización de resultados, fuente propia
8.3.2.8 Visualización de atributos en la relación
Se construye una modal con los atributos y se posiciona acorde a las coordenadas
de la relación para facilitar su visualización, ver figura 30.
Figura 30. Visualización de atributos en la relación, fuente propia
8.3.2.9 Integración de resultados con el grafo
Se integra la posibilidad de ver los resultados de la búsqueda para funcionarios en
el grafo manteniendo la opción de ver los resultados del crawler de tal manera que
el grafo se inicialice con la persona seleccionada, ver figura 31.
Figura 31. Opciones de visualización de resultados, fuente propia
8.3.2.10 Construcción de página web de contacto
Se crea un formulario que permite enviar un mensaje a los creadores del proyecto
con el correo electrónico de la persona interesada, el nombre y motivo de contacto
o mensaje (ver figura 32)
Figura 32. Página web de contacto, diseño propio
8.3.2.11 Construcción de página web con información del grupo
Esta página web contiene una reseña histórica del grupo de investigación tomada
de la página oficial del grupo, las áreas de investigación y los participantes del
proyecto, ver figura 33.
Figura 33. Página web de información del grupo, diseño propio
8.3.3 PRUEBAS DE ACEPTACIÓN
Las pruebas de aceptación correspondientes a las historias de usuario de la tercera
iteración se resumen en la tabla 24 y sus detalles pueden revisarse en el anexo 3
N° de prueba N° Historia de usuario
Nombre de la prueba Estado
PA10 HU7 Automatización de registro de información en Neo4j
Aprobada
PA11 HU7 Nodos y relaciones sin información redundante
Aprobada
PA12 HU8 Integración de las plantillas para la base de la vista principal
Aprobada
PA13 HU9 Búsqueda por nombre de funcionario y entidad
Aprobada
PA14 HU9 Descarga y consulta de resultados del crawler
Aprobada
PA15 HU10 Visualización de nodos y relaciones Aprobada
PA16 HU10 Visualización de atributos de los nodos Aprobada
PA17 HU11 El formulario de contacto envía el mensaje Aprobada Tabla 24. Pruebas de aceptación, tercera iteración
8.4 ARQUITECTURA DEL SISTEMA
La figura 34 corresponde a la arquitectura cliente-servidor en 3 capas del proyecto,
cada una se describe a continuación:
• La capa de datos consta de las instancias de las bases de datos: a) Redis, que
sirve de índice para los funcionarios y los sitios web; b) MongoDB, que contiene
los resultados de la extracción de cada uno de los sitios web y c) Neo4j que
almacena los nodos y relaciones correspondientes a entidades y funcionarios
resultantes en la extracción.
• La capa de proceso se compone de: a) Crawler que extrae información
académica y laboral de los sitios fuente; b) Servicio en NodeJS que permite
ejecutar de manera programada la tarea del crawler y c) el servicio de la
aplicación en Flask que se encarga de realizar las consultas necesarias para
obtener la información resultante del crawler.
• La capa de presentación contiene los flujos de interacción entre el usuario y el
aplicativo por medio de las interfaces de usuario.
Figura 34. Arquitectura del proyecto, fuente propia
9. RESULTADOS
En este apartado se consolidan y explican a grandes rasgos los componentes del
proyecto Palliri y los aspectos más importantes del proyecto. En primer lugar se
analizaron 100 fuentes de información y se clasificaron en las tres ramas del poder
público en Colombia y otras fuentes gubernamentales, su distribución se puede
evidenciar en la tabla 25 y la figura 34.
A pesar de que el apartado de otras fuentes gubernamentales solo cuenta con un
2%, se trata de repositorios de hojas de vida que aportaron un número significativo
en la cantidad de funcionarios públicos a diferencia de las demás fuentes que en su
mayoría contenían perfiles independientes o directorios de funcionarios de cada
entidad.
Figura 35. Clasificación de fuentes de información, fuente propia
Fuente de información Conteo
Otras Fuentes gubernamentales 2
Rama ejecutiva 81
Rama legislativa y judicial 17
Total 100
Tabla 25. Distribución de fuentes de información, fuente propia
En la figura 36 se presenta el diagrama de componentes del proyecto, cada uno se
describe brevemente a continuación.
Figura 36. Diagrama de componentes Palliri, fuente propia
• Navegador web: Es el medio por el cual el usuario final va a tener acceso al
aplicativo.
• Servidor de aplicaciones: Contiene y sirve la aplicación web usando el framework
Flask.
2%
81%
17% Otras Fuentesgubernamentales
Rama ejecutiva
Rama legislativa yjudicial
▪ Python: Submódulos para la consulta de información, codificación de los
resultados y envío de emails.
▪ PopotoJS: Librería de javascript que permite la consulta a Neo4j mediante la
transformación de queries de grafo a Cypher y su respectiva visualización.
• Almacenamiento:
▪ Redis: Contiene dos índices, uno que permite la identificación y clasificación
de los sitios web y otro con los funcionarios públicos y su relación con la
información extraída de los sitios.
▪ MongoDB: Contiene dos colecciones, en primera instancia la estructura o
metadatos de cada una de las fuentes de información y por otra parte el
contenido resultante de la extracción o versionamiento de las páginas.
▪ Neo4j: Contiene la estructura tipo grafo de cada uno de los funcionarios
hallados por el crawler con sus respectivas relaciones académicas y
laborales.
• Crawler:
▪ Python: Consta de los submódulos que permiten la inicialización con los
metadatos de los sitios fuente, la extracción de los diferentes tipos de sitios
web, la unificación de versiones y la reestructuración del JSON resultante del
crawler a nodos y relaciones en Neo4j.
▪ NodeJS: Permite la programación y ejecución de la tarea de explotación de
los sitios web, a partir del índice de sitios web de Redis.
10. TRABAJO FUTURO
En este proyecto las propiedades HTML como identificadores y atributos de clase
tienen un papel fundamental para la identificación de los elementos y dado que los
sitios fuente pueden tener actualización en estilo y diseño en la presentación de la
información se propone que una extensión para la administración de los metadatos
le daría sostenimiento y robustez al proyecto.
Es posible extender las búsquedas a redes sociales u otros sitios no
gubernamentales a partir de los resultados que se obtienen actualmente con el
crawler.
Algunas de las fuentes cuentan únicamente con una breve reseña, esta información
no se encuentra estructurada y por lo tanto tiene un uso limitado, podrían utilizarse
técnicas propias de lenguaje natural para procesar el texto y obtener nuevos nodos
y relaciones para asociados a los funcionarios.
11. CONCLUSIONES
El rendimiento del crawler es dependiente de la conexión a internet y ancho de
banda, dado que el proceso de extracción requiere acceso a los sitios fuente y
descarga de información.
La actualización de los sitios facilita la extensión de la información y gracias al
manejo de versiones es posible mantener los datos previos sin afectar la
consistencia en la base de datos en las próximas extracciones.
La representación de la información en el grafo brinda información de interés sobre
entidades académicas y laborales relacionadas con los funcionarios públicos en
Colombia, esta información podría ser reutilizada en otras áreas de conocimiento
para un mejor análisis.
Dado que la representación en el grafo acepta atributos de forma variable es posible
agregar nuevos sitios fuente realizando el análisis de los metadatos y registrándolos
en la colección de MongoDB.
Es posible utilizar diferentes motores de bases de datos dando provecho a las
características que poseen siempre y cuando se tenga claridad de la necesidad
funcional que pueden suplir.
Las bases de datos en memoria mejoran el desempeño y permiten que las consultas
realizadas en la capa de presentación sean más rápidas y a su vez que el usuario
final tenga una mejor experiencia con la aplicación.
12. REFERENCIAS
[1] J. David, “Una aproximación a la cultura política colombiana desde el debate,” Rev. Fac. Derecho y Ciencias Políticas., vol. 42, no. 117, pp. 393–424, 2012.
[2] M. C. Herrera, A. Pinilla Díaz, R. Infante Acevedo, and C. Díaz Soler, La construcción de cultura política en Colombia: proyectos hegemónicos y resistencias culturales. 2005.
[3] P. Santana Rodríguez, “Opinión pública,culturas políticas y democracia,” 1998, Bogotá, pp. 83–93, Sep-2014.
[4] M. Peshave, “HOW SEARCH ENGINES WORK AND A WEB CRAWLER APPLICATION Advisor : Kamyar Dezhgosha University of Illinois at Springfield.”
[5] S. F. University, “Web Crawling,” 2016.
[6] A. Copestack, “Natural Language Processing,” Nat. Lang. Process., pp. 2003–2004, 2004.
[7] D. Chopra, N. Joshi, and I. Mathur, Mastering Natural Language Processing with Python. .
[8] H. K. Sumanaweera, “Natural language processing applications,” 1997. [Online]. Available: http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol1/hks/. [Accessed: 20-Jul-2002].
[9] G. Hirst, E. Hovy, and M. Johnson, Theory and Applications of Natural Language Processing. .
[10] A. Fowler, NoSQL for dummies. 2015.
[11] S. Tiwari, Professional NoSQL. 2011.
[12] G. Vaish, Getting Started with NoSQL, no. March. 2013.
[13] Mongodb, “NoSQL databases explained.” [Online]. Available: https://www.mongodb.com/nosql-explained.
[14] R. Van Bruggen, Learning Neo4j. 2014.
[15] M. Viera, “Empezando con Mongo,” 2013. [Online]. Available: http://mviera.io/blog/empezando-con-mongodb/.
[16] Redislab, “Introduction to Redis.” [Online]. Available: https://redis.io/topics/introduction.
[17] “Manifesto for Agile Software Development,” 2001. .
[18] D. Wells, “Extreme Programming: A gentle introduction,” 2013. .
[19] P. Letelier and M. C. Penadés, “Métodologías ágiles para el desarrollo de software: eXtreme Programming (XP).” Valencia, 2006.
[20] G. Schmutz, P. Welkenbach, and D. Liebhart, Service-Oriented Architecture : An Integration Blueprint. 2010.
[21] B. Portier, “SOA terminology overview , Part 1 : Service , architecture , governance , and business terms,” vol. 2007, pp. 1–12, 2007.
[22] L. Richardson, “BeautifulSoup.” [Online]. Available: https://www.crummy.com/software/BeautifulSoup/.
[23] S. Developers, “Scrapy.” [Online]. Available: https://doc.scrapy.org/en/1.3/intro/overview.html.
[24] LASILLAVACIA.COM, “Llega el Quién es Quién en versión gráfica,” 2014. .
[25] LASILLAVACIA.COM, “Quién es quién, la silla vacía.” .
[26] E. Aaron, “Graph-Politics,” 2016. .
[27] X. Li, “The Design and Implementation of an Internet Public Opinion Monitoring and Analyzing System,” pp. 176–180, 2013.
[28] S. Gupta, Anangpuria institute of education, and M. D. University, “Design of focused crawler based on feature extraction,classification and term extraction,” pp. 3430–3434, 2016.
[29] S. Yang, “Expert Systems with Applications OntoCrawler : A focused crawler with ontology-supported website models for information agents,” Expert Syst. Appl., vol. 37, no. 7, pp. 5381–5389, 2010.
[30] S. Yang, “Expert Systems with Applications OntoPortal : An ontology-supported portal architecture with linguistically enhanced and focused crawler technologies,” Expert Syst. Appl., vol. 36, no. 6, pp. 10148–10157, 2009.
[31] A. Rungsawang and N. Angkawattanawit, “Learnable topic-specific web crawler,” vol. 28, pp. 97–114, 2005.
[32] A. Kapoor, “Application of bloom filter for duplicate URL detection in a web crawler,” 2016.
[33] L. Zhang, Z. Bu, Z. Wu, and J. Cao, “DGWC : Distributed and Generic Web Crawler for Online Information Extraction.”
[34] T. Suebchua, A. Rungsawang, and H. Yamana, “Adaptive Focused Website Segment Crawler,” pp. 3–4, 2016.
[35] A. Malathi, “Analysis and Visualization of Social Media Networks,” pp. 58–63, 2016.
[36] M. Maruyama, D. D. Suthers, and S. P. Robertson, “Characterizing Communication Networks Associated with Political Hashtags,” pp. 1546–1555, 2014.
[37] K. Lee and M. Shan, “Discovering Political Tendency in Bulletin Board Discussions by Social Community Analysis Department of Computer Science National Chengchi University,” pp. 1–5, 2009.
[38] S. Gabriel, G. Universidad, and D. B. Aires, “Aplicación del analisis de redes sociales al estudio de la estructura y desarrollo de una red de blogs económicos políticos en Argentina,” vol. 14, pp. 1–19, 2008.
[39] B. Patrut and M. Patrut, Social Media in Politics. 2014.
[40] D. R. Velandia and Y. D. Ramos, “Prototipo de herramienta de software que permite realizar minería de opinión en español utilizando un motor de bases de datos no relacional.,” 2017.
[41] E. Thomas, Service Oriented Architecture. 2016.
[42] “Microsoft Edge, Web Driver.” [Online]. Available: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/.
[43] Mozilla, “Geckodriver, Firefox web driver.”
[44] “ChromeDriver - WebDriver for Chrome.” [Online]. Available:
https://sites.google.com/a/chromium.org/chromedriver/downloads.
[45] B. Burg, “Safari, Web driver.” [Online]. Available: https://webkit.org/blog/6900/webdriver-support-in-safari-10/.
[46] “PhantomJS - Scriptable Headless Browser.” [Online]. Available: https://phantomjs.org/.
[47] pyp, “Difflib,” 2018.
[48] npm, “Child Process,” 2018. .
[49] npm, “Node Cron,” 2018. .
[50] npm, “Async,” 2018.
[51] N. Small, “Py2neo.” [Online]. Available: https://py2neo.org/v4/.
[52] W. Lyon, “Graph visualization whith Neovis.j.” [Online]. Available: https://medium.com/neo4j/graph-visualization-with-neo4j-using-neovis-js-a2ecaaa7c379.
[53] Neo4j, “Neo4j Labs.” [Online]. Available: https://neo4j.com/labs/.
[54] N. Interactive, “Popoto.js.” [Online]. Available: http://www.popotojs.com/.
[55] M. Bostock, “D3.js.” [Online]. Available: https://d3js.org/.
[56] “Vis.js.” [Online]. Available: https://visjs.github.io/vis-network/docs/network/.
[57] A. Jacomy, “Sigmajs.”
[58] N. Interactive, “Popoto wiki.” [Online]. Available: https://github.com/Nhogs/popoto/wiki.
[59] A. Ronacher, “Flask.” [Online]. Available: https://flask.palletsprojects.com/en/1.1.x/.
[60] D. Gaspar and J. Stouffer, Mastering Flask Web Development. 2018.