LibreBORME
Versión online de LibreBORME
Con motivo de la evaluación del Concurso Universitario de Software Libre, esta última semana he estado trabajando en montar una versión de LibreBORME en producción y en darle una capa de pintura.
Para los impacientes: ya se puede acceder a través de https://beta.libreborme.net.
Como su dominio indica, es una versión de pruebas, por lo que fallará de vez en cuando, sus URLs cambiarán, algunas veces contendrá más datos y otras menos porque limpiaré la BD para seguir haciendo pruebas...
Tenlo en cuenta si la usas. De momento no hace falta que se reporten los bugs.
En cuanto a cambios significativos lo más novedoso es que gracias a la sugerencia de mi tutor del proyecto, he empezado a usar MongoDB para almacenar los datos, que viene muy bien ya que la estructura de un BORME se ajusta más al concepto de documento en Mongo que al de una tabla relacional SQL.
En esta primera versión online ya hay algunos miles de datos para empezar a jugar. Se pueden buscar empresas, ver en qué BORMEs aparece y sus actos mercantiles. También es posible buscar nombres de persona y de la misma manera localizar en qué BORMEs aparece y obtener un listado de sociedades relacionadas.
La página principal se carga cada vez con un listado aleatorio de empresas/personas a modo de ejemplo:
Ahora borme_parser es un paquete que importo en Python y que contiene todo lo necesario para procesar BORMEs. Cuando sea estable lo subiré a PyPI para que lo puedan reutilizar fácilmente otros proyectos que analicen BORMEs.
También he comenzado a usar los issues de GitHub:
borme_parserEl paquete borme_parser contiene un conjunto de herramientas que automatiza la obtención y el procesamiento de BORMEs. El proceso ahora es semi-automático (hay que lanzar los scripts uno a uno).
Los procesos que borme_parser automatiza son:
- Ir a la web del BORME y obtener los BORMES del último día
- Descargar todos los PDFs del día
- Recortar los PDFs para obtener otros PDFs con la región que nos interesa (quita los márgenes)
- Conversión de PDF a texto y limpieza del texto que suele contener caracteres extraños
- Reconocer en el texto los actos inscritos y en ellos los nombres de las entidades que nos interesan (empresas y personas principalmente) y generar un archivo CSV a partir de ellos
Para el que lo nunca haya visto, un BORME tiene el siguiente aspecto:
Detalles técnicos: para recortar PDFs uso PyPDF y para convertir los PDFs recortados a texto uso pdfminer. ¿Por qué dos distintos? Porque cada uno me ha dado mejores resultados en esa tarea concreta.
Para las otras dos secciones del BORME que sí publican en XML, la idea es usar XML Schema para que los parsers sean más flexibles y tolerantes a futuros cambios en la estructura.
Como anécdota, para pulir el parser me hice un script para comparar los resultados de dos parsers y ver así si los últimos cambios realmente mejoraban o empeoraban el resultado esperado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16#!/bin/bash # ./parseandcompare.sh txt2/BORME-A-2015-27-07.pdf-cropped.pdf.1.txt.clean.txt echo $1 ./parserText2CSV4c.py $1 csv4=csv/$(basename $1).4c.plain diff -u0 $2 $csv4|pygmentize -l diff -f html -O full -o file_diff14.html echo 'Comparando' echo $2 echo $csv4 ls -l $2 $csv4 chromium-browser ./file_diff14.html &Esto genera un archivo html con las diferencias así:
En definitiva, los parsers funcionan, aunque tienen aún fallos y queda pulirlos bien. Tengo muchas ideas que quiero probar para mejorarlos. Más adelante dedicaré una entrada solo para ellos.
Datos importadosEn esta beta he cargado los datos disponibles hasta el 24 de marzo de 2015.
Algunos datos a modo de estadística:
Los PDF de la Sección Primera descargados (hasta el 24 de marzo) son en total 1609 archivos que pesan 372MB. Una vez recortados pesan 245MB y pasados a texto y aplicando el filtro de limpieza de caracteres raros, ya se quedan 52MB y finalmente los datos útiles en CSV son 40MB.
Importar los datos de 2015 en LibreBORME fue «tan sencillo» como ejecutar:
cd borme_parser ./getAllBormeXML.py 20150101 ./getPDFfromXML.py 20150101 ./crop_borme.py pdf ./parserPDF.py pdfcrop ./cleanText.py txt ./parserText2CSV4c.py txt2 ./manage.py importbormecsv borme_parser/csv/*.csvAlgunos tiempos de cada script, en negrita los más significativos:
Conversión de PDF a texto: 44 minutos
Limpieza del texto: 3 segundos
Generación de los CSV a partir de los textos: 29 segundos
Importación en Mongo: más de 8 horas
El proceso de importación de estos 40MB de CSV tardó más de 8 horas, algo que sin saber apenas nada de Mongo me parece excesivo y que tendré que investigar. Lo más lógico sería generar e importar directamente JSON en lugar de CSV, pero el motivo de porqué uso CSV es porque fue lo primero que se me ocurrió cuando aún no sabía que iba a usar MongoDB.
En total se han incorporado a la base de datos 124168 registros, identificándose 104800 empresas y 34496 personas.
Sin embargo a día 24 de marzo había 124879 registros, por lo que en 711 (0,57%) el parser falló y no consiguió importarlos.
¡Seguimos!
Qué es libreBORME
LibreBORME es mi apuesta como Proyecto de Fin de Carrera y estará tutorizado por Carlos Canal de la Universidad de Málaga y David Cabo de la Fundación Ciudadana Civio.
El progreso se puede ir viendo en el repositorio de GitHub: libreborme, aunque ahora mismo el último commit es de octubre, de cuando ni siquiera me habían aprobado el anteproyecto. En los próximos días subiré los últimos cambios para que reflejen el estado actual.
He presentado libreBORME a dos concursos de software libre: al Concurso Universitario de Software Libre y al Certamen de Proyectos Libres que celebra este año la Oficina de Software Libre de la Universidad de Granada (UGR). ¡Espero tener una versión funcional y bonita para las fechas de entrega!
Y ahora sí, para saber de qué va, os dejo a continuación con el texto del anteproyecto que me fue aprobado el pasado mes de noviembre.
Plataforma web para la consulta y el análisis del Boletín Oficial del Registro Mercantil MotivaciónDurante los últimos años la transparencia es un tema en auge en el ámbito político-institucional. Sin embargo, el diablo está en los detalles y muchas veces la palabra "transparencia" se usa de forma viciada por ser un tema que está de moda y suena bien, independientemente de si la institución en cuestión es transparente o no. O quizás simplemente la definición de este término que manejan unas y otras partes es distinta.
Otro problema muy común es confundir "datos abiertos" con "transparencia", cuando la realidad es que lo primero puede usarse como una herramienta para conseguir lo segundo, pero no necesariamente: publicar los horarios de autobuses como datos abiertos no mejora la transparencia (aunque tenga otros beneficios).1
En el momento en el que se redacta este documento hace menos de un año que España ha aprobado su Ley de Transparencia2. Hasta entonces era el único país europeo con más de un millón de habitantes sin una.
La aprobación fue sin duda una noticia importante y esperada. Sin embargo, ya durante el periodo de debate empezaron a oírse voces desacordes con esta ley.
La Open Knowledge Foundation3, una de las organizaciones internacionales sin ánimo de lucro más importantes y referentes por su trayectoria en la lucha por la transparencia, proporciona en su «Manual de Datos Abiertos» una definición, con una serie de condiciones que un conjunto de datos (o en inglés, dataset) debe cumplir para poder ser considerado "Datos Abiertos".45 La definición es extensa pero se puede resumir en:
- Disponibilidad y acceso. La información debe estar disponible como un todo y a un costo razonable de reproducción, preferiblemente descargándola de Internet. Además, debe estar disponible en una forma conveniente y modificable.
- Reutilización y redistribución. Los datos deben ser proporcionados bajo términos que permitan reutilizarlos y redistribuirlos, e incluso integrarlos con otros datos.
- Participación universal. Todos deben poder utilizar, reutilizar y redistribuir la información. No debe haber discriminación alguna en términos de esfuerzo, personas o grupos. No están permitidas las restricciones "no comerciales" que prevendrían el uso comercial de los datos ni las restricciones de uso para ciertos propósitos (por ejemplo sólo para educación).
En la actualidad no hay una apuesta seria por ello y son pocas las instituciones españolas que cumplen esta definición cuando hablan de datos abiertos.
Sin embargo, en los últimos años ha quedado demostrado que una de las fortalezas más claras de nuestro país es que a pesar del descontento generalizado en la política institucional, en la sociedad civil surgen grupos que se organizan y especializan para trabajar de forma proactiva y cambiar las cosas.
En este caso, la sociedad civil lleva tiempo organizándose para exigir transparencia de verdad, poniendo como ejemplo la que existe en países de nuestro entorno que se consideran referentes en cuestión de datos abiertos como Reino Unido, y está consiguiendo acelerar el proceso de la transparencia en las instituciones haciendo el trabajo que ellas no hacen, creando conjuntos de datos abiertos de verdad.
Algunos ejemplos de estas organizaciones son OpenKratio6, Fundación Ciudadana Civio7, y Qué Hacen Los Diputados8 (la primera, con sede en Sevilla y las dos últimas con sede en Madrid). A nivel internacional nos encontramos, entre otras, con Sunlight Foundation9, y Open Knowledge Foundation (OKFN), ya citada anteriormente.
Su programa de actividades es público y en él encontramos reuniones con técnicos de gobiernos regionales para ofrecer asesoramiento y colaboración de forma altruista; organización de conferencias sobre transparencia y datos abiertos en universidades con ponentes internacionales que explican la perspectiva desde otros países; colaboración con administraciones públicas para liberar y visualizar datos; organización y participación en concursos y hackatones para desarrollar nuevas APIs, aplicaciones de móvil, etc.
En este contexto se plantea el siguiente proyecto con el objetivo de abordar los datos públicos del Registro Mercantil de España para abrirlos de una forma más cercana a la definición de la OKFN y ofrecerlos a cualquiera (sea persona o robot de Internet) que quiera hacer uso de ellos.
El Boletin Oficial del Registro Mercantil (BORME)El Registro Mercantil Central (RMC) es el organismo encargado de la publicación del BORME, que por sus siglas responde al "Boletín Oficial del Registro Mercantil".
El BORME es «el BOE de las empresas» y en él se publican las nuevas inscripciones, las bajas, y otra serie de actos que las sociedades están obligadas a comunicar.
Desde 2009 se publica en formato electrónico. Es un gran paso, pero el BORME contiene únicamente los cambios, es decir, que si leemos el BORME podemos conocer que una sociedad se ha disuelto hoy, pero nos será muy difícil saber cuándo se constituyó, ya que la web no incorpora un buscador que nos permita encontrarlo. Además, si la fecha de constitución fue anterior a 2009, sería aún más difícil, ya que no existe el documento en formato electrónico y tendríamos que solicitar al RMC una fotocopia del documento en papel, indicándoles previamente el número de BORME, que también necesitaremos conocer. Sin embargo esos datos están ya informatizados en algún sitio. Para acceder al historial de una empresa podemos acudir al servicio ofrecido del Colegio de Registradores de la Propiedad y Mercantiles de España (o simplemente Colegio de Registradores) y pagar en concepto de honorarios por él, en función de las consultas que queramos realizar.
Este procedimiento no cumple la definición de datos abiertos de la OKFN y además es contradictorio y contraproducente por los siguientes motivos:
- No tiene sentido que sea un servicio cerrado, ya que la función primordial del Registro Mercantil es ser un instrumento de publicidad (hacer público) de las empresas.10
- El simple hecho de cobrar por él dificulta y contradice su propia función de publicidad.
- Es una forma de funcionamiento obsoleto que tendría que haber sido renovada hace más de una década. Entonces se precisaba pagar a una persona encargada de buscar en miles de folios de cientos de tomos la información solicitada, pero hoy vivimos en la Sociedad de la Información, donde ya existe Internet, donde esa información la tenemos en algún sitio ya informatizada y el coste de la consulta de estos datos tiene un coste real cercano a 0€.
Sin embargo, sí que sigue teniendo sentido que cobren por los servicios de expedición de certificados (otro de los servicios ofrecidos por el Colegio de Registradores) ya que en él precisan de un Registrador Mercantil que certifique los datos.
Desafortunadamente por otra parte,el buscador del BORME solo está activo para la sección II, que es en la que se publican "Anuncios y avisos legales", cuando la realmente interesante es la sección I, donde se publican los actos de inscripción y otros actos relativos a las empresas. Por último, a esto le sumamos que mientras que el BOE ya se publica en los formatos PDF y XML, el BORME se continua publicando únicamente en PDF (la sección II sí que se publica en XML) y que antes de comenzar este proyecto el autor contactó con el webmaster del BORME, quien manifestó la voluntad de que esto no iba a cambiar al menos a corto plazo «por el convenio y legislación actual del Registro Mercantil».
Objetivos y alcance del proyectoEl objetivo del presente PFC es crear una plataforma que de forma automatizada descargue los BORME desde el 2 de enero de 2009, que fue el día que se comenzaron a publicar en formato electrónico, para procesarlos y generar una base de datos propia con los datos que estos contienen.
El procesado automático extraerá la información útil de los PDF, identificando entidades y acciones. Una vez se haya generado esta base de datos, el potencial estará en la posibilidad de hacer consultas por campos o incluso semánticas.
Por ejemplo:
¿Qué otras sociedades administran los administradores de esta otra empresa? ¿Cuántas empresas se crearon/destruyeron en 2011?
Para facilitar las consultas se desarrollará también una plataforma web alojada en la nube usando el framework Django con el lenguaje de programación Python.
La plataforma será compatible con OpenStack y Cloud Foundry, soluciones de computación de la nube IaaS y PaaS respectivamente. Se han escogido ambas soluciones de entre todas las que coexisten actualmente por ser software libre y por las organizaciones que las respaldan como "estándar de la nube".
Otro objetivo es que el servicio siga online tras la finalización del proyecto. Para ello el autor contactó con la Fundación Ciudadana Civio, y ésta mostró su conformidad en mantener y explotar el servicio de forma conjunta. El sistema será autónomo y quedará programado para buscar diariamente los nuevos boletines publicados e incorporar esta información a la base de datos. De este modo las consultas se podrán realizar con la última información disponible hasta el momento.
El código de la plataforma se publicará con una licencia de software libre, ya que la idea es que el proyecto se reutilice y se cree comunidad con él.
Por último se facilitarán a OpenCorporateslos datos recopilados. OpenCorporates es una iniciativa que pretende liberar datos de sociedades a nivel mundial y "asignar una URL a cada empresa del mundo", ya que los datos sobre compañías y corporaciones españolas con los que cuenta actualmente son muy pobres en comparación con los de otros países.111213
Referencias-
The New Ambiguity of "Open Government", 2012: http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2012489 ↩
-
http://www.20minutos.es/noticia/1991399/0/ley-de-transparencia/actitudes-politicas/congreso/ ↩
-
Definición completa de "Abierto": http://opendefinition.org/od/ ↩
-
http://www.mjusticia.gob.es/cs/Satellite/es/1215197983369/Estructura_P/1215198328530/Detalle.html ↩
-
Zara España SA: https://opencorporates.com/companies/es/15022510 ↩
-
Google Inc.: https://opencorporates.com/companies/us_ca/C2474131 ↩
What is libreBORME
LibreBORME is my dissertation and it will be mentored by Carlos Canal from Universidad de Málaga and David Cabo from Fundación Ciudadana Civio.
Progress can be seen in the GitHub repository: libreborme, although right now the last commit is from October, when my draft hadn't even been approved. In the coming days I will upload the latest changes to reflect the current state.
I have submitted libreBORME to two different competitions about Free Software, that is, Concurso Universitario de Software Libre and Certamen de Proyectos Libres which is organized this year by the Free Software Office of Universidad de Granada (UGR). I expect to have a functional and pretty version for the deadlines!
The following is the text of the draft that was approved last November.
BORME queries and analysis web platform MotivationIn recent years, transparency is a booming subject in the political-institutional field. However, the devil is in the detail and most of the times the word "transparency" is used in a corrupted way because it's a fashion subject and sounds well, independently if the institution is considered to be transparent or not. Or maybe it's just because the definition of this term is different for both parts.
Another common problem is misunderstanding "open data" with "transparency", when reality is that the first one can be used as a tool to get the second, but not necessarily: publishing bus timetables as open data doesn't improve transparency (but it has other benefits).1 In the moment where this document was written, it's less than one year that Spain passed its own Transparency Act2. So far it was the only European country with more than a million inhabitants without one.
The passing was without any doubt an important and long waited fact. However, during the debate period they started to hear conflicting voices about this Act.
The Open Knowledge Foundation3, one of the most important international non for profit organizations and model for its background in the fight for transparency, provides in their «Open Data Handbook» a definition, with a number of conditions that a dataset must accomplish in order to be considered "Open Data".45 The definition is large but it can be summed up as three facts:
- Availability and Access. the data must be available as a whole and at no more than a reasonable reproduction cost, preferably by downloading over the internet. The data must also be available in a convenient and modifiable form.
- Reuse and Redistribution. the data must be provided under terms that permit reuse and redistribution including the intermixing with other datasets.
- Universal Participation. everyone must be able to use, reuse and redistribute - there should be no discrimination against fields of endeavour or against persons or groups. For example, 'non-commercial' restrictions that would prevent 'commercial' use, or restrictions of use for certain purposes (e.g. only in education), are not allowed.
Nowadays there isn't a serious bet about it and only a few institutions apply to the definition when they speak about open data.
Nonetheless in the last years, we have seen that one of the clear strengths of our country, Spain, is that in spite of the general dissatisfaction of institutional politics, civil society organizes and they start to form groups to specialize and work in a proactive way to change things.
In this case, civil society has been organizing for a while to demand true transparency, giving as example transparency exiting in our surrounding countries that are considered model in regards of open data as is the United Kingdom, and they are achieving to speed up the process of transparency in public institutions by doing the work that they should be in the charge of but unfortunately don't do, by making true open datasets.
Some examples of these organizations are OpenKratio6, Fundación Ciudadana Civio7 or Qué Hacen Los Diputados8 (the first one, based in Seville and the rest based in Madrid). At international level we can find, among others, Sunlight Foundation9 or Open Knowledge Foundation (OKFN), previously quoted.
Their activities program is public and we can find in it: meeting with regional government staff in order to offer advising and collaborate in an altruistic way; organizing conferences about transparency and Open Data in public universities with international speakers that explain the point of view from other countries; collaboration with public administrations to open and visualize datasets; organizing and participating in competitions and hackathons for developing new APIs, mobile apps, etc.
In this context the following project is planned with the goal of address public data of the Mercantile Register in order to open them in a way closer to the OKFN definition and offer them to everyone (be it a human or a Internet robot) willing to make use of them.
Boletín Oficial del Registro Mercantil (BORME)Registro Mercantil Central (RMC) is the organization in charge of publishing BORME, which in Spanish stands for "Mercantile Register Official Bulletin".
BORME publishes newly created societies, societies that have broken up, and some other data the companies must communicate.
Since 2009 it is also published in electronic format. This is a big step, but BORME only contain changes, that is, if we read BORME we can know that a a society has dissolved today, but it will be really hard to know when it was established, since the website doesn't provide a search engine that allows us to find it. Besides, if the constitution date is previous to 2009, it will be even more difficult, since there doesn't exist a document in electronic format and we should request to RMC a paper photocopy of the original document, indicating previously the page number in the BORME, which is also something we must know beforehand. However these datasets are already computerized somewhere. In order to access the history of a company we can use a service provided by _Colegio de Registradores, _which are the Official Registrars and to pay them in concept of professional fees, depending on how many requests we can to realize.
This procedure doesn't meet the definition of open data by OKFN and is contradictory and counter-productive because of the following reasons:
- It doesn't make sense that it's a closed service, since the main goal of Registro Mercantil is to be a public advertisement instrument of the companies.10
- The fact of collecting money makes it harder and contradicts its own function of advertisement.
- It is an obsolete model of work that should have been renewed more than a decade ago. In those days you had to pay a person in charge of finding the requested information in thousand of sheets of hundreds of volumes, but nowadays we live in the Information Society, where it already exists the Internet, where this information is already computerized somewhere and the real cost of that request is near 0€.
Nonetheless, it keeps making sense that they collect money for the services of certificates expedition (another service offered by Colegio de Registradores) since they require a mercantile registrar to certify the data.
Unfortunately on the other hand,the search engine of BORME is only active for section II, which is where they publish Legal Notices, when the really interesting part is section I, where they publish registration data and other data concerning to companies. Finally BORME publishing format is only PDF, where other official documents are published also in XML format and before the beginning of this project the Author contacted the webmaster of BORME, who claimed that this behavior was not going to change in a short time because of «the current agreement and legislation of the Mercantile Register».
Goal and scope of this projectThe goal of this project is developing a platform that automatedly downloads BORME files from January 2nd 2009, the day when they started to publish BORME in electronic format, in order to process them and build its own database with the contained data.
The automatic processing will extract every useful information of the PDF files, by identifying entities and actions. Once the database is generated, the potential will be in the ability of performing queries by fields or even semantic queries.
For example:
What other societies do administer the administrators of this company? How many companies closed in 2011?
In order to ease the queries it will be developed additionally a web platform hosted in the cloud using the Django framework with the programming language Python.
The platform will be compatible with OpenStack and Cloud Foundry, both solutions for cloud computing, IaaS and PaaS respectively. Both solutions were chosen of among all existing solutions because these are free software and because of the trust on the organizations supporting them as "cloud standards".
The goal is that the service will be kept online after the project is finished. The author contacted to Fundación Ciudadana Civio and they showed their interest in maintaining the service and to make use of it together with the author. The platform will be autonomous, in the sense that it will be developed and will remain ready to look for new BORMES daily to incorporate new information to the database. This way it will be possible to query the website with the latest information available to the moment.
The source code of the platform will be released with a free software license, since the idea of this project is that as many entities as possible make use of it and we create a community around it.
Eventually, collected data will be given to OpenCorporates. OpenCorporates is an initiative that aims to free companies data worldwide and to "assign an URL to every company in the world", since data from Spanish companies and corporations available are poor compared to those available for other countries.111213
References-
The New Ambiguity of "Open Government", 2012: http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2012489 ↩
-
http://www.20minutos.es/noticia/1991399/0/ley-de-transparencia/actitudes-politicas/congreso/ ↩
-
Definición completa de "Abierto": http://opendefinition.org/od/ ↩
-
http://www.mjusticia.gob.es/cs/Satellite/es/1215197983369/Estructura_P/1215198328530/Detalle.html ↩
-
Zara España SA: https://opencorporates.com/companies/es/15022510 ↩
-
Google Inc.: https://opencorporates.com/companies/us_ca/C2474131 ↩