Una solución híbrida Open Source/Microsoft
Muchas veces se habla de si una solución open source es mejor que una propietaria o al revés y, por ello, queremos mostrar que esto no siempre tiene que ser así. La solución, diseñada íntegramente por NETCheck, se basa en la construcción de un sistema de almacenamiento de documentos que permite la indexación y búsqueda de los mismos en base a sus contenidos y a unos metadatos estructurados que los describen. Adicionalmente, el sistema también es capaz de determinar las temáticas de las que habla el documento (clasificación) y de detectar similitudes entre documentos, basándose en un análisis semántico de contenido.
La solución se ha concebido teniendo en cuenta las siguientes características:
- Necesidad de un sistema de gestión documental que permita workflows de gestión de los documentos almacenados, almacenamiento seguro de los mismos, control de acceso a ellos mediante autorización y posibilidad de búsquedas de documentos en base a su contenido.
- El sistema proporciona una interfaz de acceso web basado en la herramienta Microsoft SharePoint.
- De cada documento se almacenan unos datos estructurados y es posible realizar búsquedas en base a valores de los mismos.
- El sistema es capaz de inferir las temáticas de las que habla un documento dado, en base a su contenido, utilizando técnicas de NLP (Natural Language Processing).
- Por razones de privacidad y salvaguarda de la información, el procesado de los documentos se realiza on premise.
Para el análisis semántico de los documentos, se ha buscado una solución de NLP que fuera suficientemente madura, con amplio campo de aplicación en la comunidad y que no tuviera necesidades computacionales elevadas, de manera que se pueda ejecutar sin necesidad de inversión en hardware específico.
Tras un examen de las alternativas disponibles, tanto de software libre como de productos comerciales, la elección fue Natural Language ToolKit (NLTK – www.nltk.org), una librería open source, basada en Python que, gracias a extensiones, permite realizar nativamente las operaciones típicas de NLP:
- Tokenization: descomposición de un texto en componentes del lenguaje (tokens), por lo general palabras, signos de puntuación o locuciones.
- Análisis de frecuencias: Recuento de ocurrencias de un token dentro de un texto (corpus) y medición de la frecuencia de aparición.
- Stemming: Reducción de inflexiones de un término dado a su raíz. Procedimiento heurístico que se suele realizar término a término, sin tener en cuenta el contexto.
- Lematización: proceso análogo al de stemming, con la diferencia que cada término se intenta examinar en el contexto en el que aparece.
- Etiquetado (tagging): Clasificación de tokens como partes del lenguaje (nombres, adjetivos, verbos,…)
Además de todo lo anterior, existen librerías que, tras un entrenamiento previo, también permiten:
- Clustering de textos: Agrupación de textos en clusters por “afinidad de contenido” (algoritmos no supervisados).
- Clasificación de textos: Asignación de una o más etiquetas preexistentes a textos en base a sus características (algoritmos supervisados).
Para realizar la integración entre las aplicaciones Windows, SharePoint y la librería NLTK se utiliza la librería IronPython (ironpython.net). La cuál permite invocaciones, de forma muy sencilla, desde código Microsoft .NET al motor de ejecución de NLTK.
El procesamiento de documentos para la extracción de metadatos estructurados de los mismos se realiza mediante código .NET que se ejecuta in process dentro de la aplicación SharePoint. La lectura de documentos se realiza utilizando unos procesadores y adaptadores, desarrollados ad hoc, específicos para distintos formatos de documento (XML, XSIG de @Firma o PDF).
Una vez extraídos los datos estructurados, se almacenan en una base de datos NoSQL, persiguiendo la exigencia de almacenar los datos de un documento como una entidad única. Por ello, como motor de almacenamiento, se ha elegido MongoDB (www.mongodb.org), en su versión open source. Desarrollando una librería, en .NET, que implementa la capa de acceso a datos, utilizando el driver específico para C#, en su versión 2.2.3.
En conclusión, dado el escenario planteado, se ha diseñado una solución que satisface de la mejor manera todos y cada uno de los requisitos planteados por nuestros clientes. La búsqueda de las mejores herramientas para solventar cada uno de los problemas expuestos nos ha llevado a una construir una solución que, entre otras cosas, mezcla de manera homogénea, y en igual medida, tecnologías open source y herramientas de naturaleza más comercial (en nuestro caso, de Microsoft). Una solución híbrida lo ha permitido.