ūüĎ®ūüŹĽ‚ÄćūüíĽ

Una API para nuestra memoria colectiva

Link
Tags

Eduardo Marisca | 31 Jul 2016

 
Este fin de semana largo he tenido tiempo para seguir avanzando el trabajo que empec√© hace tiempo con¬†la digitalizaci√≥n del Informe Final de la Comisi√≥n de la Verdad y la Reconciliaci√≥n¬†. Soy de la idea de que un documento de tal magnitud como el IF tiene que tener una representaci√≥n digital que facilite su an√°lisis, su procesamiento, su difusi√≥n y, sobre todo, su discusi√≥n. Pero a pesar de que se present√≥ hace apenas trece a√Īos, el IF no cuenta con una buena versi√≥n digital o interactiva: fue pensado, preparado y finalmente publicado bajo la l√≥gica del documento impreso.
He podido avanzar m√°s con¬†el trabajo alrededor de las Conclusiones del IF¬†‚ÄĒ 171 peque√Īos pedazos de texto que buscan sintetizar dos d√©cadas de violencia pol√≠tica en el Per√ļ, sus causas y sus secuelas. Son quiz√°s la parte m√°s le√≠da y difundida del IF. Y por lo mismo, desde hace tiempo quiero construir una versi√≥n nativa digital de este contenido. Lo que he podido implementar ahora es una aplicaci√≥n completa (aunque a√ļn muy b√°sica) alrededor de las Conclusiones ‚ÄĒ en realidad, dos aplicaciones: una API que permite acceder a las Conclusiones almacenadas en una base de datos, y una versi√≥n web que se alimenta de esa API para presentar el texto a los usuarios.
Estas dos aplicaciones pueden servir como herramientas de información, de investigación y de consulta. Por un lado, permiten la consulta y el procesamiento del texto como si fuera una base de datos para ser analizada. Por otro, facilitan la creación de herramientas e interfaces que facilitan la presentación de la información, poniéndola en contexto con otras fuentes y facilitando su análisis.
Quiero explicar en un poco más de detalle el proceso de creación de estas herramientas, porque creo que ayuda para ilustrar el tipo de análisis que puede hacerse con este tipo de herramientas.

Preparando la data

En un post anterior¬†expliqu√© el proceso para convertir la data de las Conclusiones ‚ÄĒ disponible en la web solo como un PDF con formato ‚ÄĒ en registros JSON, un formato mucho m√°s f√°cil de leer por herramientas digitales. En ese caso, lo que hice fue extraer la data, limpiarla, y exportarla en este formato.
Una vez con la data en formato JSON, el siguiente paso fue cargarla en una base de datos nativa a Internet desde la cual pudiera ser consultada. Escogí trabajar con Firebase , una herramienta recientemente adquirida por Google y que ofrece una base de datos muy ligera y flexible donde todos los registros se trabajan nativamente en JSON. Firebase hizo muy simple la carga de datos, y también facilita enormemente la manipulación de los registros directamente en la BD. Puede, sin embargo, ser difícil de asimilar para los que están acostumbrados a BD relacionales basadas en tablas: toda la data en Firebase existe como árboles, cuyos registros anidados se despliegan en ramas.
La data estructurada como √°rboles en Firebase.
La data estructurada como √°rboles en Firebase.

Identificando entidades

Hace unas semanas,¬†Google lanz√≥ una nueva API para procesamiento de lenguaje natural¬†que hace disponible su motor de machine learning al p√ļblico de manera relativamente sencilla. Utilizando esta API, podemos analizar cualquier bloque de texto para hacer reconocimiento de entidades: identificar personas, organizaciones, eventos o lugares que son mencionados en un texto. De esta manera podemos tomar el texto de las Conclusiones y destacar elementos importantes de manera autom√°tica ‚ÄĒ algo que, para un lector ne√≥fito, puede facilitar enormemente la lectura pues ayuda brindando contexto al contenido (por ejemplo, identificando que ‚ÄúAlan Garc√≠a‚ÄĚ es una persona o que ‚ÄúAyacucho‚ÄĚ es un lugar, y creando un enlace a la referencia correspondiente en Wikipedia).
Un ejemplo de an√°lisis y reconocimiento de entidades utilizando la Cloud Natural Language API de Google.
Un ejemplo de an√°lisis y reconocimiento de entidades utilizando la Cloud Natural Language API de Google.
Con esta data podemos complementar muy bien nuestra data existente.¬†Una peque√Īa aplicaci√≥n en Javascript¬†nos permite jalar el texto de cada una de las conclusiones, pasarlo a trav√©s de la API de lenguaje natural de Google, y recibir de vuelta las entidades identificadas en el texto. La informaci√≥n de las entidades es ahora parte de la BD, ya que es poco probable que cambie y es m√°s eficiente que consultarla continuamente.

Creando nuestra API

El objetivo de crear una API es que sea más fácil para cualquier desarrollador extraer información en un formato estándar, sin tener que preocuparse por cómo conectarse a la BD, cómo está estructurada la data, y demás. Así, cualquier aplicación puede jalar la data fácilmente utilizando pedidos HTTP y recibiendo data de vuelta en JSON. Además, si en el futuro queremos cambiar de BD o la estructura de datos, mientras la nueva herramienta siga respondiendo a las mismas llamadas y devolviendo la misma estructura de datos, todas las aplicaciones que se alimentan de esa API siguen funcionando sin tener que hacer ninguna modificación.
Nuestra API es una aplicación node.js , también muy simple y muy ligera. Esta aplicación, conclusiones-api, abstrae todo el trabajo de conectarse directamente a la BD, y permite extraer dos formas de data: /getconclusiones retorna el contenido para un elemento específico, mientras que /getsecciones retorna un JSON con la estructura maestra de las Conclusiones y las referencias dentro de cada sección (para construir el índice).
Probando la API utilizando Postman, un cliente para formular HTTP requests.
Probando la API utilizando Postman, un cliente para formular HTTP requests.
Cualquier aplicaci√≥n puede solicitar data a la API ‚ÄĒ esa apertura es justamente la raz√≥n por la que quise abstraer el backend y la data (a trav√©s de la API) de la presentaci√≥n de la data al usuario a trav√©s de una aplicaci√≥n. Aunque todav√≠a no he tenido oportunidad de documentar los endpoints y los retornos para que cualquiera pueda utilizarlos, el procedimiento es bastante sencillo.

Creando la aplicación web

El siguiente paso era crear una manera para que otros seres humanos (ya no otras aplicaciones) puedan acceder a la data. Para eso cre√© una segunda aplicaci√≥n, tambi√©n basada en¬†node.js¬†, que extrae la data a trav√©s de la API y la utiliza para crear un sitio web. Esta aplicaci√≥n,¬†conclusiones-display, no tiene su propia base de datos, sino que jala siempre la versi√≥n m√°s actual de la data. Como a√ļn estoy limpiando y mejorando partes del texto, haciendo un solo cambio en la base de datos a nivel del backend autom√°ticamente actualiza lo que se muestra a los usuarios a trav√©s de la aplicaci√≥n web.
El índice de la aplicación con las referencias a todas las Conclusiones.
El índice de la aplicación con las referencias a todas las Conclusiones.
La llamada que hace la aplicaci√≥n web a la API recibe la informaci√≥n de las entidades contenidas en el texto.¬†Una primera versi√≥n con todas las Conclusiones ya est√° disponible¬†. A√ļn no he terminado de agregar los campos para que se reflejan en la interfaz, pero una vez que hecha la conexi√≥n, el texto de cada conclusi√≥n vendr√° de la mano con las entidades identificadas y los enlaces que aportan contexto a la lectura. De la misma manera, pueden en el futuro agregarse enlaces a art√≠culos, contenido multimedia, y cualquier tipo de informaci√≥n complementaria que ayude a brindar contexto.

Subiéndolo todo a la nube

El paso final de todo este proceso fue hacer que ambas aplicaciones estuvieran disponibles al p√ļblico. Ambas aplicaciones est√°n disponibles en entornos en la nube ‚ÄĒ¬†conclusiones-api, el backend, existe como un entorno en la plataforma de¬†Google Cloud¬†, mientras que¬†conclusiones-display, el frontend web, est√° alojado en la plataforma de¬†Amazon Web Services¬†(por la √ļnica raz√≥n de que quer√≠a aprender a interactuar con ambos entornos). La gran ventaja de esto es que ambos entornos abstraen la necesidad de preocuparse por mantener la infraestructura: en caso de recibir m√°s tr√°fico, los entornos est√°n configurados para expandirse el√°sticamente mientras sea necesario para responder a la demanda, y encogerse de nuevo cuando el tr√°fico se regularice.
Al final, fue la implementaci√≥n de las aplicaciones en ambos entornos lo que termin√≥ tomando m√°s tiempo que el desarrollo de las aplicaciones mismas. Pero a pesar de ello, estos entornos permiten un /deployment/ de aplicaciones m√°s r√°pido y m√°s resiliente, pues uno ya no tiene que preocuparse por qu√© servidor utiliza, c√≥mo lo configura, qu√© paquetes le instala, y dem√°s problemas que acompa√Īan el aprovisionamiento de nueva infraestructura. Para que eso funcione,¬†uno tiene que ajustar la arquitectura de su aplicaci√≥n para responder a estos patrones efectivamente¬†.

Siguientes pasos

Aunque todo esto suena muy técnico, al final todo esto se trata de facilitar el acceso a información histórica muy importante. Esta es información vinculada a nuestra memoria colectiva y nuestra identidad como Estado-Nación, es nuestra historia política y social, y es una radiografía que explica muchas de las características de la sociedad peruana contemporánea. Es información que debería estar en las manos de más personas, y que debería ser fácil de acceder, complementar y discutir. Con todo tipo de herramientas es posible contribuir y participar a la discusión sobre qué somos y qué queremos ser como sociedad.
Todavía quedan detalles que pulir y terminar en el código, además de documentar los endpoints de la API, pero todo este trabajo está disponible para cualquiera que quiera utilizarlo, revisarlo, o modificarlo. Todo el código está disponible en Github, para el reconocimiento de entidades , conclusiones-api y conclusiones-display . La API está disponible para consultas y el frontend web está ya en línea también . Con suerte, nada se caerá en los próximos días.
Quiero seguir trabajando en esto poco a poco, explorando tambi√©n otras √°reas del Informe Final y explorando c√≥mo pueden transformarse digitalmente. Empec√© a hacer estos ejercicios hace unos tres o cuatro a√Īos, y en este tiempo es impresionante qu√© nuevas herramientas han aparecido que hacen todo este trabajo mucho m√°s f√°cil. Pero tambi√©n quiero empezar a promoverlo un poco m√°s ‚ÄĒ no tanto el trabajo, que estoy seguro que alguien con mejor entendimiento de tecnolog√≠a podr√≠a hacerlo mucho mejor, sino m√°s el esp√≠ritu de utilizar herramientas digitales para la lectura de problemas hist√≥ricos, sociales, culturales y pol√≠ticos. Estas son fronteras que t√≠picamente no se suelen cruzar, pero donde se puede encontrar mucho valor, no tanto para encontrar respuestas sino m√°s para ayudar en la formulaci√≥n de preguntas que se hacen posibles una vez que tienes disponibles herramientas computacionales. ¬ŅQu√© es lo que se hace posible cuando hacemos que una computadora lea las Conclusiones del Informe Final de la CVR?