Recuperacion de Informacion yRecomendaciones en la Web
Facultad de Ingenierıa, UdelaR
Curso 2018
Sistema de Informacionde eventos musicales y culturales
georreferenciados
Autores:
Alejandro Guggeri
4.555.126-6
Andres Perez
4.833.274-6
Sabrina Sellanes
4.649.172-8
Raquel Sosa
3.168.079-4
Profesora:
Libertad Tansini
Grupo 4
Diciembre 2018
Indice
1 Introduccion 1
2 Problema 2
2.1 Contexto y Motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Tipos de consultas de Usuarios . . . . . . . . . . . . . . . . . . . . . . 2
2.3 Requerimientos Iniciales . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Enfoque de la solucion 3
4 Diseno 4
4.1 Tecnologıas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2 Arquitectura del Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.3 ElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.4 Modulo de carga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.5 Cliente Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5 Implementacion 7
5.1 ElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2 Componente de Carga . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.3 Cliente Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6 Funcionalidades y uso 12
7 Evaluacion y resultados 14
8 Conclusiones 15
9 Trabajo Futuro 16
WEBIR Facultad de Ingeniera, UdelaR
1 Introduccion
Dada la gran diversidad de sitios web que existen con informacion de espectaculos en
los diferentes puntos del paıs, es interesante brindarle a los usuarios mecanismos de
busqueda rapida utilizando diferentes tipos de filtros. En general los sitios tiene la in-
formacion no estructurada y las busquedas sobre los mismos son muy limitadas. Por
ejemplo, el unico uso de la ubicacion suele ser al llegar al detalle de un espectaculo para
orientar al usuario.
El objetivo principal del trabajo es tomar informacion provista, en primera instan-
cia, por el sitio cartelera.com.uy, y proveer en un portal busquedas relacionadas a los
eventos encontrados pero con nuevos filtros, por ejemplo: realizar busqueda georeferen-
ciadas. Esta funcionalidad puede ser de gran utilidad para los usuarios, ya que puede
resolver consultas del estilo: cuales son los espectaculos que se realizaran cerca de la
zona en donde estoy?”.
Al analizar el sitio cartelera.com.uy, vimos que se muestran los distintos tipos de
eventos agrupados por cine, musica, teatro, on demand, TV cable, arte y ebooks, pu-
diendo acceder a los mismos mediante enlaces o busquedas en texto plano. A partir de
esto resulta interesante enriquecer esta busqueda con nuevos filtros, y por otra parte
buscar integrar informacion pertinente sobre los espectaculos, como por ejemplo infor-
macion acerca de los artistas a partir de fuentes confiables, como puede ser la pagina
oficial del mismo.
El presente proyecto se propone obtener la informacion de la cartelera, cargarla en
una base de datos y definir una interfaz de consulta que permita varios tipos de con-
sulta. Para esto se propone una arquitectura basada en el producto elasticsearch como
almacenamiento y motor de busquedas. Tambien se incluye un modulo para la carga de
datos y un cliente Web que le permita al usuario ingresar consultas de forma amigable
y le devuelva los resultados.
En las siguientes secciones se define el problema en detalle, se presenta el enfoque de
la solucion, el diseno de la misma, se comentan algunos aspectos de la implementacion,
las funcionalidades brindadas y forma de uso, la evaluacion del sistema desarrollado,
conclusiones y trabajos a futuro.
1
WEBIR Facultad de Ingeniera, UdelaR
2 Problema
2.1 Contexto y Motivacion
Se propone acercar a los usuarios informacion sobre eventos considerando informacion
de los artistas, la fecha y el lugar donde se presentan. En particular se desea poder
informar a los usuarios sobre los eventos que tiene cerca (geograficamente).
2.2 Tipos de consultas de Usuarios
Se desean contestar consultas de usuario del estilo:
• “¿Que bandas tocan en Montevideo hoy?”
• “¿Donde tocan El Cuarteto de Nos?”
• “¿Que eventos tengo este fin de semana en Centro o Ciudad Vieja?”
2.3 Requerimientos Iniciales
• Obtener informacion: En una primera instancia pensamos obtener informacion de
eventos de la pagina cartelera.com.uy. El sistema debe contar con un modulo en el
que se realizara web scraping para obtener los datos de la web. Ademas en dicho
modulo se debera realizar un proceso de normalizacion de la informacion.
• En cuanto a la busqueda geografica, se georrefenciaran las direcciones de los lu-
gares obtenidos con un servicio que provee la Intendencia1. Para zonas fuera de
Montevideo se evaluara el uso de un servicio que brinda Google 2.
• Se debera proveer un mecanismo para realizar busquedas segun ubicacion geografi-
ca (el usuario podra seleccionar una zona de interes en el mapa), nombre de banda,
estilo musical y fecha en que tocan. Para realizar este requerimiento se debera uti-
lizar elasticsearch como motor de busqueda.
• Se debera proveer un mecanismo que permita almacenar los datos georeferenciados
de Montevideo.
• Se debera brindar una interfaz web donde el usuario podra realizar las consultas
y ver los resultados obtenidos. Se espera que dicha interfaz incluya un mapa para
las consultas por zonas de interes.
1api.montevideo.gub.uy/ubicacionRest/direcciones/posicion2https://developers.google.com/maps/documentation/javascript/examples/geocoding-simple
2
WEBIR Facultad de Ingeniera, UdelaR
3 Enfoque de la solucion
Para la solucion final se espera contar con informacion espacial de base que permita
realizar cruzamientos espaciales. Algunas capas de interes serıan: paıses, departamen-
tos, ciudades, barrios.
Para la informacion de los eventos se considera informacion de internet de “Car-
telera”3. Tambien se consideran otras posibles fuentes como Tickantel o RedUTS. Se
estudiara si se puede extraer informacion de los artistas de wikipedia o de sus paginas
oficiales.
Para relacionar la informacion de los eventos con el territorio, se utiliza la direccion de
las salas de los eventos. Se espera obtener la misma junto con los datos del evento y
georreferenciarlas con un servicio externo de geocodificacion.
Se propone usar elasticsearch4 como componente central de la solucion para la ges-
tion de la informacion y resolucion de las consultas.
3http://www.cartelera.com.uy4https://www.elastic.co
3
WEBIR Facultad de Ingeniera, UdelaR
4 Diseno
4.1 Tecnologıas
Las tecnologıas utilizadas durante el desarrollo del proyecto fueron:
• Apache Tomcat5, para correr el modulo de carga de datos.
• API REST Java6 para la comunicacion entre diferentes componentes.
• Jsoup7 para web scraping para obtener datos.
• Eclipse8 y Maven9 como herramientas de desarrollo.
• ElasticSearch como componente para guardar y buscar los datos.
• GeoServer10 - Servidor de Mapas - utilizado solo durante el desarrollo.
• Openlayers11 - Visualizador de mapas incluido en la interfaz web.
• AngularJS12 y .NET para la aplicacion web.
4.2 Arquitectura del Sistema
Los principales componentes de la arquitectura del sistema son:
• Modulo de carga: Aplicacion Java - WAR.
• Modulo de almacenamiento y motor de consultas: ElasticSearch
• Cliente Web que incluye el Visualizador de Mapas
A continuacion se muestra el diagrama de arquitectura del sistema, a la izquierda
se presentan los servicios externos con los que el sistema se comunica.
5http://tomcat.apache.org/6https://www.arquitecturajava.com/rest-json-y-java/7https://jsoup.org/8https://www.eclipse.org/9https://maven.apache.org/
10http://geoserver.org/11https://openlayers.org/12https://angularjs.org/
4
WEBIR Facultad de Ingeniera, UdelaR
4.3 ElasticSearch
Elasticsearch es un servidor de busqueda, que provee un motor de busqueda de texto
completo, distribuido y con capacidad de multi-tenencia con una interfaz web RESTful
y con documentos JSON. Elasticsearch esta desarrollado en Java y esta publicado como
codigo abierto bajo las condiciones de la licencia Apache.
Utiliza Query DSL (Lenguaje de Dominio Especıfico) para realizar las consultas a los
documentos indexados. Es un lenguaje sumamente flexible y de gran alcance, ademas
de simple, que permite conocer y explorar los datos de la mejor manera. Al ser utilizado
a traves de una interfaz de tipo JSON, las consultas son muy sencillas de leer y, lo mas
importante, de depurar.
Ademas se pueden realizar consultas geoespaciales en base a elementos vectoriales (geo-
metrıas), como por ejemplo: obtener la distancia entre dos puntos geograficos, calcular
el area de un polıgono, interseccion de un punto y un polıgono, interseccion entre polıgo-
nos, etc.
Como ElasticSearch tiene interfaz REST se acceder a cargar y consultar datos con pedi-
dos HTTP de tipo POST, PUT, GET y DELETE. Durante el desarrollo y las pruebas
se uso tanto Kibana13 como PostMan14 para hacer pruebas de conceptos, validar la
carga y probar consultas durante el desarrollo. Como se partio el proyecto centrado en
eventos musicales se definio una estructura para los ındices de la carga de datos como
se ve en la siguiente figura:
4.4 Modulo de carga
Este modulo es el encargado de consultar los datos de la pagina Cartelera, consultar
contra un servicio de la Intendencia de Montevideo las direcciones encontradas para
el lugar de cada evento y enviar esta informacion a elasticsearch. El modulo de carga
expone una interfaz Rest para que se pueda correr la carga a demanda. Dicha interfaz
expone un unico metodo: “/jsoupWeb/cargarDatos” del tipo HTTP POST. Este modu-
lo esta empaquetado en un WAR y se corre en un servidor de aplicaciones TOMCAT.
Usa las librerıas JSOUP y JERSEY15 como implementacion de JAX-RS.
13https://www.elastic.co/products/kibana14https://www.getpostman.com/15https://jersey.github.io/
5
WEBIR Facultad de Ingeniera, UdelaR
4.5 Cliente Web
Este cliente esta implementado con AngularJS y .NET. Tiene un area de campos de
texto para que los usuarios puedan ingresar los valores de los atributos para las consul-
tas. Tambien muestra un mapa base provisto por OpenStreetMap16 en un componente
OpenLayers. Con este componente se pueden realizar busquedas geoespaciales, mar-
cando un area de referencia y obteniendo informacion acerca de los eventos que estan
dentro de esa ubicacion. En este caso las tecnologıas fueron elegidas porque algunos
integrantes del grupo ya tenıan experiencia previa en su uso. Como OpenLayers es un
visualizador geografico desarrollado en JavaScript era mas directo su integracion en la
web desarrollada en Angular.
16https://www.openstreetmap.org/
6
WEBIR Facultad de Ingeniera, UdelaR
5 Implementacion
5.1 ElasticSearch
En primer lugar se realizaron los POST correspondientes al registro de ındices, pa-
ra luego poder ejecutar las consultas correspondientes. Las consultas ejecutadas en
ElasticSearch se construyeron a partir de la documentacion brindada en el sitio de la
herramienta. Se destaca que tanto la carga de informacion, la consulta y las respuestas
que brinda Elasticsearch son el formato JSON.
A continuacion se presenta, a modo de ejemplo, la estructura de una consulta con
un componente espacial, en este caso se define un area de consulta rectangular consi-
derando 2 vertices opuestos:
Consulta para obtener los conciertos que hay en el polıgono especificado
En la siguiente imagen se aprecia un ejemplo del JSON que se recibe de respuesta
a este tipo de consultas, donde aparece un evento con tıtulo ”Belmonte 2que tiene
coordenadas ubicadas en Montevideo.
7
WEBIR Facultad de Ingeniera, UdelaR
5.2 Componente de Carga
La implementacion de la funcionalidad expuesta en este componente consiste en reco-
rrer todo el html encontrado en cartelera.com.uy. Desde aquı se obtienen los distintos
links a donde conseguir informacion referente a los tipos de eventos expuestos en la
pagina, musica, pelıculas entre otros. Para cada tipo de evento se consulta por todos
los eventos disponibles y para cada evento se obtiene la informacion pertinente, consul-
tando ademas la sala en donde se encuentra. Al obtener la direccion de la sala como
un String, se parsea la misma y se consulta contra un servicio de la intendencia que a
partir de ciertos datos de entrada devuelve un conjunto de coordenadas.
La mayor dificultad en esta parte estuvo compuesta por el parseo de la direccion.
Los servicios expuestos por la intendencia son tres y algunos dependen de otros, el
primero a usar es el que se le pasa un nombre de una calle y devuelve un numero que
referencia a esa calle. Los otros dos mapean un cruce de calles (enviando dos nume-
ros que representan cada uno una calle, obtenidos en la consulta antes mencionada)
o una direccion (enviando tambien dos numeros que representan el primero, una calle
obtenida en la consulta antes mencionada, y el segundo un numero de puerta de di-
cha calle). Lo difıcil fue obtener la informacion de la calle y el numero, ya que existen
varias combinaciones, a modo de ejemplo, en los datos se encontro: Mercedes 1805,
Buenos Aires s/n esquina Juncal, Maldonado 1150, esq. Hector Gutierrez Ruiz, An-
des y Mercedes. Por otro lado tambien se encontraron direcciones del interior, en cuyo
caso se descartaron por no proveer, el sistema de la intendencia, informacion al respecto.
Luego de obtener las coordenadas de cada evento, se tuvo que convertir las mis-
8
WEBIR Facultad de Ingeniera, UdelaR
mas del sistema EPSG:32721 (provisto por la intendencia) al sistema de referencias
EPSG:4326 que es el que maneja Elasticsearch. Para esto se uso la implementacion
Java de la biblioteca PROJ417
Otro aspecto que se destaca en este modulo, es que se decidio darle prioridad a la
velocidad de las consultas, para esto se presento un unico concepto, el de evento. Este
evento se “aplana” por la direccion de evento y horario. De esta forma, por cada uno
de estos conceptos se realiza un request POST, al host que publica Elasticsearch y se
carga cada uno de estos elementos.
A continuacion se presenta el flujo de navegacion de cartelera.com.uy para la obten-
cion de sus datos.
17https://trac.osgeo.org/proj4j/
9
WEBIR Facultad de Ingeniera, UdelaR
5.3 Cliente Web
El cliente Web realizado tiene la finalidad de proveer una interfaz grafica al usuario
para que pueda utilizar el sistema implementado. En si, la web consiste en una serie de
filtros (inputs) y de un mapa. Existen dos modalidades de consultas independientes, la
primera es a traves de la serie de filtros disponibles que abarcan los campos de : Titulo,
Subtitulo, Descripcion, Artista, Fecha y Hora, Sala, Direccion y Localidades, mientras
que la segunda se realiza mediante el dibujo de un polıgono en el mapa.
Cuando un usuario realiza una busqueda por filtros se realiza la siguiente consulta,
similar a las anteriores:
{from : 0 ,
s i z e : 100 ,
query : {bool :
{should : [ ]
}}
}
Los campos from y size se utilizan para determinar la cantidad de registros maximos
que se devuelven.
Cabe agregar que para cada filtro se agrega un JSON al arreglo should que sigue la
siguiente estructura:
{wi ldcard : {
Titu lo : ”∗” + v a l o r T i t u l o + ”∗”}
}
El tag especial Wildcard y los * se utilizan para que ElasticSearch realice la busqueda
por substring.
10
WEBIR Facultad de Ingeniera, UdelaR
En cambio, cuando se realiza una consulta geografica se realiza la siguiente consulta:
{from : 0 ,
s i z e : 100 ,
query : {bool : {
must : {match a l l : { }
} ,
f i l t e r : {geo polygon : {
l o c a t i o n : {po in t s : [ ]
}}
}}
}}
En donde para cada vertice del polıgono se traduce de (X,Y) al siguiente objeto, el cual
se inserta en el array points.
Para cada resultado devuelto por las consultas (ya sea por filtro o geografica) se veri-
fica si se encontraban las coordenadas del evento en el resultado (ya que podıan estar
no definidas), en el caso de estarlo se marcaba en el mapa la ubicacion. Esto se logra
mediante la creacion de una capa adicional de puntos, en la cual se agregan todas las
coordenadas de los resultado que luego se anade al mapa.
{lon : X,
l a t : Y
}
Por ultimo, la implementacion de la web trajo una serie de complicaciones que
estuvieron dadas por la interaccion del mapa de OpenLayer con el framework AngularJS
y la interpretacion de los JSON devueltos por ElasticSearch.
11
WEBIR Facultad de Ingeniera, UdelaR
6 Funcionalidades y uso
El sistema propuesto permite realizar consultas sobre los datos cargados, a traves de
una interfaz web que tiene por un lado campos de texto libre y por otro lado un mapa.
En los campos de texto libre se puede ingresar palabras que se usaran en la busqueda
de acuerdo a lo que se carga en cada campo: Tıtulo, Subtıtulo, Artista, Descripcion,
Direccion (texto), Sala, FechaHora y Localidades.
No es necesario llenar todos los campos, sino que se puede consultar por uno solo de
ellos. El texto ingresado se buscara dentro del campo correspondiente de la estructura
en elasticsearch como un substring. Esto es si un usuario busca Artista “Tra” se le
devolveran conciertos de “La Trampa”. El sistema tambien unifica el texto para evitar
problemas de mayusculas y minusculas.
Para usar la consulta por area de interes hay que seleccionarlo en la seccion “Herra-
mientas de Mapa” y dibujar el polıgono deseado sobre el mapa. Se van haciendo clicks
para marcar los diferentes puntos del polıgono y para terminar de definirlo se usa el
doble click. Esto enviara a elastichsearch el area deseada para buscar los eventos que
quedan dentro de esa zona. Para enviar la consulta se utiliza el boton Buscar que se
aprecia en la imagen:
Las consultas pueden ser solo por textos o geograficas. Luego de ejecutar una con-
sulta los resultados de los detalles de los eventos recuperados se muestran en una tabla
debajo del area de consulta. Adicionalmente, en el mapa se ponen marcadores para
mostrar la ubicacion de los eventos encontrados.
12
WEBIR Facultad de Ingeniera, UdelaR
13
WEBIR Facultad de Ingeniera, UdelaR
7 Evaluacion y resultados
Con el proceso de carga de datos se obtuvieron unos 4000 registros en promedio. Du-
rante las pruebas se realizaron cargas en diferentes dıas, ya que la cartelera de eventos
va variando permanentemente. Para estas cargas, los tiempos que se obtuvieron en pro-
medio fueron de 10 minutos. En este tiempo se incluye la obtencion de los datos de
cartelera, y tambien las consultas respectivas contra el servicio de la intendencia de
Montevideo para la obtencion de las coordenadas, su transformacion y el almacena-
miento de todo en elasticsearch.
Como el servicio de georeferenciacion es de la Intendencia de Montevideo, se car-
garon muchos datos de eventos del interior, pero para esos registros no se guardan
coordenadas. Para que no aparecieran sumados a los resultados de las busquedas espa-
ciales hubo que ponerles un valor por defecto que nos asegurara que para una busqueda
en Montevideo no aparecieran.
Otro aspecto a considerar es la introduccion de errores por las transformaciones de
coordenadas espaciales. En el caso de las coordenadas brindadas por el servicio de la
Intendencia, vienen en el sistema de referencias UTM 21S y son transformadas usando
la biblioteca PROJ4 de Java a coordenadas de la forma latitud-longitud. En el caso del
mapa, se usa el sistema Latitud-Longitud pero el mapa tiene unidades en metros. Esto
hace que a las coordenadas del polıgono de consulta tambien haya que transformarlas
a los grados que corresponden (esta transformacion se hizo en forma directa con una
cuenta aproximada).
Un resultado interesante es que aunque inicialmente se pensaba trabajar solamente
con datos de eventos musicales, en el sistema final se cargan todos los eventos que tiene
el sitio cartelera: esto incluye Cine, Musica y Teatro. Otro elemento que se pensaba
considerar era el origen de los artistas, pero en un analisis de los datos vimos que esa
informacion muy pocas veces estaba disponible y generalmente aparece en el area de
descripcion en un campo de texto libre. Los usuarios podran consultar ese campo pero
el sistema no tiene la inteligencia para tener ese dato claramente identificado.
Por otro lado, de acuerdo al planteo inicial se agrego la informacion de la sala del evento,
que incluye los cines, teatros, bares, etc.
14
WEBIR Facultad de Ingeniera, UdelaR
8 Conclusiones
Se logro desarrollar un sistema completo que consulta informacion sobre eventos del
sitio Cartelera, la almacena en elasticsearch y ofrece una interfaz amigable para poder
consultarla, incluyendo la posibilidad de consultar por area de interes. Resulto intere-
sante el uso de nuevas herramientas que no conocıamos, tales como jsoup para la carga
de datos y elasticsearch para el guardado de los mismos. Ambas resultaron de facil uso
y ayudaron mucho para lograr la solucion final presentada.
Mas alla del aprendizaje de nuevas tecnologıas y la integracion de diversas tecno-
logıas, uno de los mas grandes desafıos del proyecto fue el trabajo con datos no muy
estructurados. En varias ocasiones se necesito normalizar o transformar los datos. Al
momento de querer procesar las direcciones de las salas de los eventos nos vimos en-
frentados a varias formas de escribirlas, como se detallo en la seccion que describe la
implementacion del modulo de carga. Incluso para las direcciones que se lograban geo-
referenciar se hizo necesario transformar las coordenadas para luego poder cargarlas en
elasticsearch y que se pudieran consultar. Reconocemos la complejidad de trabajar con
datos no pensados para la consulta automatica aunque no llegamos a integrar datos de
diversas fuentes.
Consideramos que se lograron los objetivos del proyecto obteniendo un buen pro-
totipo de un sistema de consulta en base a recuperacion de informacion de la Web.
Algo novedoso de este proyecto fue la integracion de consultas por zonas geograficas
(basada en polıgonos arbitrarios definidos por el usuario). De esta forma se cubre que
los usuarios puedan buscar eventos en un area de interes o en zonas cercanas a su casa.
15
WEBIR Facultad de Ingeniera, UdelaR
9 Trabajo Futuro
Como trabajos a futuros se considera interesante abarcar algunos otros aspectos en
cuanto a los datos. En principio, obtener alguna otra informacion del evento, por ejem-
plo, informacion de la pagina oficial del artista o el ranking de https://www.imdb.com/
en caso de una pelicula. Esto se planteo como una area a explorar en el proyecto, pero
debido a las dificultades del trabajo con la fuente inicial no se pudo dedicar tiempo a
esta exploracion.
Por otra parte resulta atractivo que esta solucion se pueda aplicar para otros pro-
veedores de eventos como por ejemplo tickantel. Enriqueciendo de esta forma no solo
la busqueda, pero sino tambien la variedad de contenidos y detalles a mostrar. Por
ejemplo, en Cartelera la informacion de precios de las entradas es algo muy vago, en
tickantel es una informacion mucho mas precisa.
Finalmente para llevar el sistema a produccion serıa necesario que la carga de datos
se realice periodicamente, de forma de que los mismos esten siempre actualizados. Como
la carga es automatica, solamente se necesitarıa hostear toda la aplicacion en un servidor
online y programar una tarea que actualice los datos cada noche.
16
Top Related