Universidad Politécnica de Madrid Facultad de Informática Trabajo de Fin de Carrera Sistema de Identificación, Extracción y Recuperación de Secuencias Genéticas a partir de la Literatura Cientı́fica AUTOR: Alejandro Cuevas Candela TUTOR: Miguel Garcı́a Remesal Marzo, 2011 A mi abuelo Agradecimientos A mi madre. Gracias por estar siempre ahı́, por ser como eres y por enseñarme a ser como soy. A mi familia: mi abuela, tı́os, tı́as, primos y primas. Sois la mejor familia que se puede tener, ¡gracias por todo! A mis amigos de siempre. En especial a Juan y a Pablo. Gracias por todos los años que llevamos siendo amigos, y por todos los que nos quedan! A mi tutor, Miguel Garcı́a, y a Vı́ctor Maojo. Muchas gracias por darme la oportunidad de realizar este proyecto, y por todo lo que he aprendido durante mi estancia en el Grupo de Informática Biomédica (GIB). A mis compañeros del GIB: Alberto, Ana, Alex2, Dani, David, Diana1, Diana2, Guillermo, Luis, Martı́n, Nelly, Sergio, Stefano y Toni. Gracias por hacer de este tiempo uno de mis mejores recuerdos. A mis compañeros durante todos estos años en la FI, en especial a Alberto, Ana, Andrés, Carmen, Daniel, Diana, Eva, Jesús, Jorge, Miguel, Rubén y Tomás. ¡Gracias por todo este tiempo, sois los mejores! A mis nuevos compañeros en BrainSINS: @avc conti, @FkieCarrero, @josek net, @Kayvan666, @luisdiazdeldedo, @LuMartin y @Prueno. ¡Gracias por hacer del trabajo un placer! A todos a los que deberı́ais aparecer aquı́ y por culpa de mi mala memoria no estáis. Índice de contenidos 1 Introducción 1 1.1 Planteamiento del Problema . . . . . . . . . . . . . . . . . . . 1 1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1 Formato de los Documentos . . . . . . . . . . . . . . . 3 1.2.2 Detección y Anotación de Secuencias . . . . . . . . . . 3 1.2.3 Creación de un Índice de Artı́culos y Secuencias . . . 4 Solución Propuesta . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3.1 Extracción del Texto de los Artı́culos . . . . . . . . . . 5 1.3.2 Reconocimiento de Secuencias . . . . . . . . . . . . . . 7 1.3.3 Filtrado de Secuencias . . . . . . . . . . . . . . . . . . 10 1.3.4 Anotación de Secuencias . . . . . . . . . . . . . . . . . 10 1.3.5 Generación de un Índice de Artı́culos y Secuencias . . 11 1.3 2 ESTADO DE LA CUESTIÓN 13 2.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 Trabajos Previos Relacionados . . . . . . . . . . . . . . . . . 13 2.3 Fundamentos Teóricos . . . . . . . . . . . . . . . . . . . . . . 15 2.3.1 Recuperación de Información . . . . . . . . . . . . . . 15 2.3.1.1 Visión General de un Sistema Clásico de RI . 15 2.3.1.2 Creación del Índice de Documentos . . . . . 16 2.3.2 2.3.1.2.1 Estructura del Índice . . . . . . . . 17 2.3.1.2.2 Enfoques Más Importantes . . . . . 18 2.3.1.2.3 Evaluación de Sistemas de RI . . . . 19 Búsqueda en Textos Mediante Autómatas Finitos . . . 20 3 TECNOLOGÍAS, EMPLEADOS LENGUAJES Y ESTÁNDARES 23 i 3.1 UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.1 24 Notación UML . . . . . . . . . . . . . . . . . . . . . . 3.1.1.0.4 Casos de Uso . . . . . . . . . . . . . 24 3.1.1.0.5 Diagrama de Casos de Uso . . . . . 25 3.1.1.0.6 Diagrama de Clases . . . . . . . . . 26 3.1.1.0.7 Diagrama de Interacción entre Objetos . . . . . . . . . . . . . . . . 28 3.2 JAVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3 PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4 Apache PDFBox . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.5 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.5.1 Parsers XML . . . . . . . . . . . . . . . . . . . . . . . 33 Bases de Datos Relacionales . . . . . . . . . . . . . . . . . . . 34 3.6.1 El Modelo Relacional . . . . . . . . . . . . . . . . . . 35 3.6.2 Modelado Entidad/Relación . . . . . . . . . . . . . . . 35 3.6.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 36 GenBank y BioSQL . . . . . . . . . . . . . . . . . . . . . . . 37 3.7.1 GenBank . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.7.2 BioSQL . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.8 BLAST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.9 Servlets y Apache Tomcat . . . . . . . . . . . . . . . . . . . . 38 3.9.1 Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.9.2 Apache Tomcat . . . . . . . . . . . . . . . . . . . . . . 39 3.10 Lucene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.6 3.7 4 ANÁLISIS DEL SISTEMA 4.1 41 ESPECIFICACIÓN DE REQUISITOS SOFTWARE . . . . . 41 4.1.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . 41 4.1.1.1 Propósito . . . . . . . . . . . . . . . . . . . . 41 4.1.1.2 Ámbito del sistema . . . . . . . . . . . . . . 41 4.1.1.3 Definiciones, acrónimos y abreviaturas . . . . 42 4.1.1.4 Referencias . . . . . . . . . . . . . . . . . . . 43 4.1.1.5 Visión General del Documento ERS . . . . . 43 Descripción General . . . . . . . . . . . . . . . . . . . 43 4.1.2.1 Perspectiva del Producto . . . . . . . . . . . 44 4.1.2.2 Funciones del producto . . . . . . . . . . . . 44 4.1.2 ii 4.1.3 4.1.2.3 Caracterı́sticas del usuario . . . . . . . . . . 45 4.1.2.4 Restricciones . . . . . . . . . . . . . . . . . . 46 4.1.2.5 Suposiciones y dependencias . . . . . . . . . 46 Requisitos Especı́ficos . . . . . . . . . . . . . . . . . . 47 4.1.3.1 . . . . . . 47 Interfaces de Comunicación . . . . . 48 Requisitos de Interfaces Externos 4.1.3.1.1 4.2 4.1.3.2 Requisitos Funcionales . . . . . . . . . . . . 48 4.1.3.3 Requisitos de Rendimiento . . . . . . . . . . 50 4.1.3.4 Atributos del sistema . . . . . . . . . . . . . 50 CASOS DE USO DEL SISTEMA . . . . . . . . . . . . . . . . 51 4.2.1 Actores . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.1.1 Actores Principales . . . . . . . . . . . . . . 52 4.2.1.2 Actores de Apoyo . . . . . . . . . . . . . . . 52 4.2.2 Diagrama de Casos de Uso . . . . . . . . . . . . . . . 52 4.2.3 Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . 54 4.2.3.1 Anotar Secuencias de Artı́culo . . . . . . . . 54 4.2.3.2 Extraer Secuencias del Texto . . . . . . . . . 55 4.2.3.3 Generar Índice . . . . . . . . . . . . . . . . . 55 4.2.3.4 Consultar Índice por Texto . . . . . . . . . . 56 4.2.3.5 Consultar Índice por Secuencias . . . . . . . 57 4.2.3.6 Consultar Índice por Texto y Secuencias . . 58 Diagramas de Secuencia del Sistema . . . . . . . . . . 58 4.2.4.1 Anotar Secuencias de Artı́culo . . . . . . . . 59 4.2.4.2 Generar Índice de Artı́culos y Secuencias . . 59 4.2.4.3 Consultar Índice por Texto . . . . . . . . . . 60 4.2.4.4 Consultar Índice por Secuencias . . . . . . . 60 4.2.4.5 Consultar Índice por Secuencias . . . . . . . 61 Contratos de las Operaciones del Sistema . . . . . . . . . . . 61 4.3.1 Contrato CO1: anotarArticulo . . . . . . . . . . . . . 61 4.3.2 Contrato CO2: recuperarSecuencias . . . . . . . . . . 62 4.3.3 Contrato CO3: detectarAlineamientos . . . . . . . . . 62 4.3.4 Contrato CO4: obtenerInformacion . . . . . . . . . . . 62 4.3.5 Contrato CO5: anotarArticulo . . . . . . . . . . . . . 63 4.3.6 Contrato CO6: generarIndice . . . . . . . . . . . . . . 63 4.3.7 Contrato CO6: crearIndice . . . . . . . . . . . . . . . 63 4.3.8 Contrato CO7: crearIndice . . . . . . . . . . . . . . . 64 4.2.4 4.3 iii 4.3.9 Contrato CO8: consultarPorTexto . . . . . . . . . . . 64 4.3.10 Contrato CO8: buscarTxt . . . . . . . . . . . . . . . . 64 4.3.11 Contrato CO9: obtenerInfoDoc . . . . . . . . . . . . . 65 4.3.12 Contrato C10: obtenerSecuencias . . . . . . . . . . . . 65 4.3.13 Contrato C11: consultarPorSecuencia . . . . . . . . . 65 4.3.14 Contrato C12: consultarTxtSeq . . . . . . . . . . . . . 66 5 DISEÑO E IMPLEMENTACIÓN DEL SISTEMA 67 5.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.2 Módulos del Sistema . . . . . . . . . . . . . . . . . . . . . . . 67 5.3 Mecanismo de Comunicación . . . . . . . . . . . . . . . . . . 70 5.4 Módulo Document . . . . . . . . . . . . . . . . . . . . . . . . 71 5.4.1 Diagramas de interacción entre objetos . . . . . . . . . 71 5.4.2 Diagrama de Clases . . . . . . . . . . . . . . . . . . . 72 5.4.3 Detalle de las clases más significativas . . . . . . . . . 73 5.5 5.6 5.7 5.8 5.9 Módulo Recognition . . . . . . . . . . . . . . . . . . . . . . . 73 5.5.1 Diagramas de Interacción entre Objetos . . . . . . . . 75 5.5.2 Diagramas de Clases . . . . . . . . . . . . . . . . . . . 75 5.5.3 Detalle de las clases más significativas . . . . . . . . . 77 Módulo BLAST . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.6.1 Diagramas de Interacción entre Objetos . . . . . . . . 79 5.6.2 Diagrama de Clases . . . . . . . . . . . . . . . . . . . 79 5.6.3 Detalle de las Clases más significativas . . . . . . . . . 79 Módulo NCBI . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.7.1 Diagrama de Interacción entre Objetos . . . . . . . . . 81 5.7.2 Diagrama de Clases . . . . . . . . . . . . . . . . . . . 82 5.7.3 Detalle de las Clases más significativas . . . . . . . . . 83 Módulo ResultManagement . . . . . . . . . . . . . . . . . . . 84 5.8.1 Diagrama de Interacción entre Objetos . . . . . . . . . 84 5.8.2 Diagrama de Clases . . . . . . . . . . . . . . . . . . . 85 Módulo Index . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.9.1 86 Diagramas de Interacción entre Objetos . . . . . . . . 5.10 Diagrama de Clases . . . . . . . . . . . . . . . . . . . . . . . 6 EVALUACIÓN DEL SISTEMA 6.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv 87 89 89 6.2 6.3 Evaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.2.1 Detección de Secuencias . . . . . . . . . . . . . . . . . 90 6.2.2 Anotación de secuencias . . . . . . . . . . . . . . . . . 92 Rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 CONCLUSIONES Y LÍNEAS FUTURAS 7.1 7.2 95 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7.1.1 Tratamiento de PDF . . . . . . . . . . . . . . . . . . . 95 7.1.2 Detección de secuencias . . . . . . . . . . . . . . . . . 96 7.1.3 Anotación de Secuencias . . . . . . . . . . . . . . . . . 96 7.1.4 Generación de un Índice de Artı́culos y Secuencias . . 97 Lı́neas Futuras . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7.2.1 98 Extracción Estructurada de Ficheros PDF . . . . . . . 7.2.1.1 Crear una herramienta de generación de plantillas . . . . . . . . . . . . . . . . . . . . 98 Eliminar la necesidad de uso de plantillas . . 99 Detección de Secuencias . . . . . . . . . . . . . . . . . 99 7.2.1.2 7.2.2 7.2.2.1 7.2.3 7.2.4 Adaptar el sistema para reconocer otro tipo de secuencias . . . . . . . . . . . . . . . . . . 99 Anotación de Secuencias . . . . . . . . . . . . . . . . . 100 7.2.3.1 Utilizar bases de datos más completas . . . . 100 7.2.3.2 Utilizar supercomputadores . . . . . . . . . . 100 Creación y Mantenimiento del ı́ndice de Artı́culos y Secuencias . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.2.4.1 7.3 92 Automatizar el proceso de obtención de artı́culos . . . . . . . . . . . . . . . . . . . . 100 Publicaciones Derivadas de Este Trabajo . . . . . . . . . . . . 101 7.3.1 A method for automatically extracting infectious disease-related primers and probes from the literature 101 7.3.2 PubDNA Finder: a web database linking full-text articles to sequences of nucleic acids . . . . . . . . . . 101 REFERENCIAS 103 A INSTALACIÓN DEL SISTEMA, MANUAL DE USUARIO Y EJEMPLOS DE USO 109 A.1 Instalación del Sistema . . . . . . . . . . . . . . . . . . . . . . 109 A.1.1 Paso 1: Prerrequisitos . . . . . . . . . . . . . . . . . . 109 v A.1.2 Paso 2: BLAST . . . . . . . . . . . . . . . . . . . . . . 110 A.1.3 Paso 3: GenBank . . . . . . . . . . . . . . . . . . . . . 110 A.1.4 Paso 4: instalar y configurar PrimerXTractor . . . . . 111 A.2 Ejecución del Sistema . . . . . . . . . . . . . . . . . . . . . . 112 A.2.1 Detección y extracción de secuencias . . . . . . . . . . 112 A.2.2 Generación del Índice de Artı́culos y Secuencias . . . . 112 A.3 Ejemplos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . 113 A.3.1 Detección y Anotación de Secuencias usando PrimerXTractor . . . . . . . . . . . . . . . . . . . . . 113 A.3.2 Ejemplo de uso de PubDNA Finder: interfaz web para el ı́ndice de artı́culos y secuencias . . . . . . . . . . . . 114 B DETALLES DEL SISTEMA 117 B.1 Detección y Filtrado de Secuencias . . . . . . . . . . . . . . . 117 B.1.1 Reconocedores . . . . . . . . . . . . . . . . . . . . . . 117 B.1.1.1 Ejemplos de Reconocimiento de Secuencias . 117 B.1.2 Reglas de Filtrado . . . . . . . . . . . . . . . . . . . . 119 B.2 Anotación de Secuencias . . . . . . . . . . . . . . . . . . . . . 121 B.2.1 Cálculo del Valor de Confianza de Nombres de Organismo y Gen . . . . . . . . . . . . . . . . . . . . . 121 C ARTÍCULOS PUBLICADOS vi 123 Lista de figuras 1.1 Fases del sistema . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Ejemplo de Árbol de Secciones . . . . . . . . . . . . . . . . . 6 2.1 Esquema de un sistema de RI clásico . . . . . . . . . . . . . . 16 2.2 Autómata para búsqueda exacta . . . . . . . . . . . . . . . . 20 2.3 Autómata para búsqueda aproximada, utilizando una distancia de Hamming de una unidad . . . . . . . . . . . . . 21 3.1 Ejemplo de Diagrama de Casos de Uso . . . . . . . . . . . . . 26 3.2 Ejemplo de Diagrama de Clases de Diseño . . . . . . . . . . . 28 3.3 Ejemplo de diagrama de Interacción entre Objetos . . . . . . 29 3.4 Ejemplo de Diagrama E/R . . . . . . . . . . . . . . . . . . . 36 4.1 Diagrama de casos de uso del sistema . . . . . . . . . . . . . 53 4.2 Diagrama de secuencia para el caso de uso “Anotar Secuencias de Artı́culo” . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Diagrama de secuencia para el caso de uso “Generar Índice de artı́culos y secuencias” . . . . . . . . . . . . . . . . . . . . 59 Diagrama de secuencia para el caso de uso “Consultar ı́ndice por texto” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Diagrama de secuencia para el caso de uso “Consultar ı́ndice por secuencias” . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Diagrama de secuencia para el caso de uso “Consultar ı́ndice por texto y secuencias” . . . . . . . . . . . . . . . . . . . . . 61 5.1 Módulos del Sistema . . . . . . . . . . . . . . . . . . . . . . . 68 5.2 Diagrama de Interacción entre Objetos: establecimiento de la comunicación en PrimerXTractor. . . . . . . . . . . . . . . . . 70 Comunicación del sistema: Diagrama de Clases. . . . . . . . . 71 4.3 4.4 4.5 4.6 5.3 vii 5.4 Diagrama de Interacción entre Objetos: procesamiento de un documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.5 Diagrama de Clases: módulo Document . . . . . . . . . . . . 73 5.6 Detalle de las Clases: módulo Document . . . . . . . . . . . . 74 5.7 Diagrama de Interacción entre Objetos: reconocimiento de secuencias en el módulo Recognizer . . . . . . . . . . . . . . . 76 Diagrama de Interacción entre Objetos: filtrado de secuencias en el módulo Recognizer . . . . . . . . . . . . . . . . . . . . . 76 Diagrama de Clases: módulo Recognition . . . . . . . . . . . 77 5.10 Detalle de las Clases: módulo Recognition . . . . . . . . . . . 78 5.11 Diagrama de Interacción entre Objetos: módulo BLAST . . . 80 5.12 Diagrama de Clases: módulo BLAST . . . . . . . . . . . . . 80 5.13 Detalle de las Clases: módulo BLAST . . . . . . . . . . . . . 81 5.14 Diagrama de Interacción entre Objetos: módulo NCBI . . . . 82 5.15 Diagrama de Clases: módulo NCBI . . . . . . . . . . . . . . 82 5.16 Detalle de las Clases: módulo NCBI . . . . . . . . . . . . . . 83 5.17 Diagrama de Interacción entre Objetos: módulo ResultManagement . . . . . . . . . . . . . . . . . . . . . . . . 84 5.18 Diagrama de Clases: módulo ResultManagement . . . . . . . 85 5.19 Diagrama de Interacción entre Objetos: creación del ı́ndice en el módulo Index (1/2) . . . . . . . . . . . . . . . . . . . . 87 5.20 Diagrama de Interacción entre Objetos: creación del ı́ndice en el módulo Index (2/2) . . . . . . . . . . . . . . . . . . . . 87 5.21 Diagrama de Clases: módulo Index . . . . . . . . . . . . . . . 88 6.1 Secuencias Detectadas vs Secuencias no Detectadas . . . . . . 90 6.2 Secuencias Detectadas vs Falsos Positivos . . . . . . . . . . . 91 6.3 Anotación de secuencias . . . . . . . . . . . . . . . . . . . . . 92 5.8 5.9 A.1 Interfaz web PubDNAFinder . . . . . . . . . . . . . . . . . . 115 B.1 Reconocimiento de Secuencias: Reconocedores . . . . . . . . . 119 B.2 Cálculo del Valor de Confianza: Función CS . . . . . . . . . . 122 viii Capı́tulo 1 Introducción 1.1 Planteamiento del Problema Las tecnologı́as moleculares se usan con frecuencia en la práctica clı́nica para la identificación de microorganismos y detección de la presencia de factores virulentos, resistencia a antibióticos e interacciones huesped-paciente (Bravo et al., 2009). Por ejemplo, se han desarrollado numerosos ensayos sobre ácidos nucleicos (Mothershed et al., 2006) utilizando hibridación o técnicas de extensión de ADN que incluyen un amplio rango de tecnologı́as como métodos de PCR (Ratcliff et al., 2007), secuenciación de genes y genomas completos (Woo et al., 2008; Enright et al., 1999), Luminex (Pabbaraju et al., 2008) y análisis de mircoarrays (Miller et al., 2009) Existen un gran número de tecnologı́as que utilizan cadenas relativamente cortas de bases conocidas como primers y probes. Los primers – término inglés cuya traducción es cebador o disparador – son utilizados para la amplificación de secuencias de ADN, actuando como disparador del proceso de amplificación. Por otro lado, los probes – cuyo significado en castellano es sonda – son secuencias utilizadas para la detección de secuencias concretas que serán la cadena complementaria al probe. Primers y probes son el principal componente de los sistemas de detección basados en ácidos nucleicos y, por tanto, han sido objeto de numerosos estudios. Además, se han desarrollado sistemas software para el diseño de estas secuencias especı́ficas de primers y probes minimizando la posible hibridación cruzada que puede ser observada, por ejemplo, como oligonucleótidos en microarrays de cDNA (Li et al., 2001) o en secuencias de primers que aplifican un segmento único de un gen especı́fico utilizando una técnica conocida como (RT)-PCR, o para la identificación de un amplio espectro de patógenos humanos (Huang et al., 2005) Tanto primers como probes son secuencias de ácidos nucleicos y no existe un estándar de representación de este tipo de cadenas en los artı́culos cientı́ficos. En bastantes casos, estas secuencias se encuentran delimitadas 1 PROYECTO FIN DE CARRERA por las expresiones 5’ y 3’, o simplemente introducidas por la expresión 5’. No obstante, la relación de ocasiones en que estas secuencias se encuentran delimitadas o introducidas respecto del total de ocurrencias en los artı́culos no permite asumir esta representación. Lo que sı́ es común a este tipo de secuencias es que están formadas por el mismo conjunto de sı́mbolos, que puede observarse en la Tabla 1.1. La literatura cientı́fica del área de la biologı́a es la principal fuente de información sobre primers y probes para el diagnóstico y prescripción de enfermedades infecciosas. Las secuencias de primers y probes que aparecen en dicha literatura resultan de gran ayuda a la hora de afrontar la laboriosa tarea del diseño de nuevas secuencias con esta funcionalidad para la identificación de microorganismos y estudios de expresiones genéticas y genotipados. Por esta razón, los investigadores recurren a la búsqueda de esta información en la literatura existente. Durante los últimos años, diferentes técnicas de minerı́a de textos, extracción de información e ingenierı́a del conocimiento han probado su utilidad para la extracción, análisis y visualización de información biológica a partir de la literatura cientı́fica en el área de la investigación biomédica (de la Calle et al., 2009; Hirschman et al., 2005; McDonald et al., 2005; Rice et al., 2005; Tamames, 2005; Gonzalez-Diaz et al., 2009). A pesar de que la minerı́a de textos aplicada a datos biológicos es un campo activo de investigación, estas técnicas no han sido utilizadas todavı́a para la creación de métodos y herramientas cuyo objetivo sea la extracción automática de primers y probes a partir de artı́culos cientı́ficos. Esto supone que, en la actualidad, los investigadores normalmente recurren a la revisión de la literatura existente para obtener las secuencias de primers y probes relevantes ante las tareas de detección e identificación de microorganismos concretos, determinación de interacciones huésped-microbio o el diseño de PCR y microarrays diagnósticos. Esta revisión necesaria de la literatura es una tarea laboriosa que requiere de una considerable inversión de tiempo. En la actualidad existen algunos repositorios de secuencias que incluyen primers y/o probes. Si bien se hablará más en detalle de estos repositorios en el capı́tulo 2, baste destacar en este momento que dichos repositorios son mantenidos de forma manual y resultan incompletos e imprecisos. En general, los artı́culos cientı́ficos son publicados en medios fı́sicos y/o digitales. No siempre la versión digital de los artı́culos cientı́ficos en cuestión se encuentra accesible de forma gratuita, y no siempre es posible encontrar una versión HTML. Dado que el formato PDF ofrece muchas ventajas respecto a la presentación de los documentos, este formato es el más utilizado por los investigadores y debe ser considerado como entrada para el sistema a desarrollar. 2 CAPÍTULO 1. INTRODUCCIÓN 1.2 Objetivos El objetivo del presente Trabajo de Fin de Carrera es dar solución a los problemas descritos anteriormente, implementando un sistema capaz de identificar, extraer y anotar primers y probes presentes en la literatura cientı́fica de una forma automatizada, ası́ como de la creación de un ı́ndice que permita la recuperación tanto de documentos asociados a secuencias como de las secuencias existentes en los documentos. A continuación se detallan los objetivos expuestos con un mayor nivel de detalle. 1.2.1 Formato de los Documentos La literatura cientı́fica disponible en formato digital cuenta con diferentes formatos de representación para los artı́culos en función del uso que se espera del mismo. En el caso de la visualización, los principales formatos son HTML para la visualización a través de páginas web y PDF para la descarga y almacenamiento de los documentos por parte de los investigadores. Por el contrario, para el tratamiento automatizado de artı́culos, el formato más usual es XML, ya que este formato permite una representación de la información contenida en el artı́culo con un cierto nivel de estructuración. El sistema deberá aceptar como entrada documentos en estos dos formatos y, para el resto de casos, deberá aceptar también documentos en texto plano, siendo responsabilidad del investigador la extracción del contenido textual de los documentos que se encuentren en cualquier otro formato. 1.2.2 Detección y Anotación de Secuencias Para un documento dado, el objetivo del sistema es la extracción de las secuencias genéticas que se encuentren contenidas en el texto del mismo. Para cada una de las secuencias extraı́das del texto del documento deberá intentarse, además, la anotación automática de la misma. Esta anotación consiste en facilitar, junto con la secuencia, información sobre el nombre del organismo y el nombre del gen relacionados con ella. La rutina efectuada por los investigadores para obtener la información necesaria para anotar las secuencias relacionadas con microorganismos consiste en utilizar la herramienta BLAST (Altschul et al., 1990; National Center for Biotechnology Information, 2009a) para detectar alineamientos entre la secuencia contenida en el artı́culo y una base de datos de secuencias que ha de ser proporcionada. Una vez obtenidos los alineamientos, se accede a la base de datos Nucleotide (Benson et al., 2010; National Center for Biotechnology Information, 2009b) con la entrada que proporciona el alineamiento, obteniendo ası́ el nombre de organismo y de gen. Dado que BLAST recurre a heurı́sticas en su ejecución, los resultados ofrecidos no son 3 PROYECTO FIN DE CARRERA exactos y se muestran acompañados de valores cuya interpretación es un ı́ndice o factor de confianza respecto al resultado generado. Normalmente, se consideran los primeros resultados ofrecidos por la herramienta BLAST, siendo el investigador quien finalmente discrimina entre estos resultados para obtener el más apropiado. 1.2.3 Creación de un Índice de Artı́culos y Secuencias Sin necesidad de disponer de las secuencias anotadas, la simple tarea de identificación de las secuencias dentro de la literatura cientı́fica obliga a los investigadores a revisar numerosos artı́culos para la obtención de primers y probes. Dado que por su incompletud recurrir a los repositorios existentes en la actualidad no ofrece suficiente fiabilidad, se plantea el objetivo de crear un repositorio a partir de una amplia colección de literatura cientı́fica, de forma que se minimice el tiempo necesario en la revisión de artı́culos de forma manual, ayudando ası́ en el proceso de búsqueda de primers y probes. 1.3 Solución Propuesta Extracción de texto Extracción de secuencias Filtrado de secuencias Documentos de entrada Anotación Secuencias anotadas Figura 1.1: Fases del sistema Para la consecución de los objetivos planteados respecto a la detección y anotación de secuencias, se plantea un método automático cuya entrada acepte los formatos de representación de documentos PDF, XML y texto plano, y que permita la generación de un ı́ndice de artı́culos y secuencias. 4 CAPÍTULO 1. INTRODUCCIÓN Este método se ha dividido en cuatro fases o etapas, tal y como se muestra en la figura 1.1. A continuación se detalla en más detalle cada una de estas etapas. Más adelante, se comentará la forma de generar el ı́ndice de artı́culos y secuencias. 1.3.1 Extracción del Texto de los Artı́culos Como ya se ha comentado el sistema debe aceptar los artı́culos cientı́ficos a través de ficheros en formato PDF, XML o texto plano. Para que las siguientes fases del sistema no dependan del formato del fichero de entrada, se propone crear un formato de representación interno para cualquier artı́culo de entrada. Este formato de representación deberá conservar la estructura de secciones del documento de entrada, lo que supone la generación de un árbol de secciones (AS). El árbol de secciones es una estructura de datos que representa tanto la estructura como el contenido del documento de entrada, manteniendo la estructura jerárquica de la información textual que contiene. En el caso de los artı́culos en formato XML el AS se puede obtener a través de la propia estructura del documento de forma sencilla. Por el contrario, en los formatos PDF y texto plano la obtención del AS no es trivial, resultando imposible en el caso del texto plano. Para el formato PDF se ha desarrollado una herramienta perteneciente al sistema que permite la generación de un AS para los artı́culos de entrada. Para la obtención automatizada del árbol de secciones de un artı́culo, el sistema recurre a una plantilla en formato XML que contiene información sobre la maquetación del artı́culo. De esta forma, se puede utilizar una misma plantilla para todos los artı́culos que sigan un mismo esquema de maquetación. Frecuentemente, una misma revista sigue un mismo esquema de maquetación para todos los artı́culos que publica, y en ocasiones este esquema es común a un conjunto de revistas de una misma editorial –e.g. artı́culos de BioMed Central. En la figura 1.2 puede verse un ejemplo de AS para un artı́culo de la revista BMC Virology Journal. Como se puede observar en la figura 1.2 en el AS cada nodo se corresponde con una sección del documento, y las relaciones jerárquicas entre nodos representan subsecciones del documento. De esta forma, las subsecciones de una sección cualquiera dentro del documento quedarán representadas como un conjunto de nodos hijo de la sección padre. Cada nodo está formado por una tupla de la forma < tipo, tı́tulo, texto >, cuyos elementos se corresponden, respectivamente, con el tipo de la sección, su tı́tulo, y el texto que contiene. Las secciones de tipo tabla y figura son tratadas de una forma peculiar en el AS. Dado que éstos elementos no están necesariamente contenidos dentro de las secciones a las que realmente pertenecen en los artı́culos cientı́ficos, y, a 5 PROYECTO FIN DE CARRERA Figura 1.2: Ejemplo de Árbol de Secciones su vez, pueden estar referenciados desde diferentes partes del documento, la ubicación de los nodos correspondientes a estos dos tipos de secciones se sitúa como hijos del nodo raı́z. En relación a la extracción de texto de las tablas, ésta se realiza de una forma particular. Debido a que es frecuente encontrar 6 CAPÍTULO 1. INTRODUCCIÓN secuencias genéticas organizadas en tablas y que estas tablas almacenan la información en celdas, no es suficiente una lectura lineal para garantizar la correcta extracción de las secuencias. Por este motivo, la lectura de las tablas se realiza extrayendo todo el contenido de las celdas y concatenando el contenido de celdas sucesivas en una misma fila introduciendo un delimitador artificial que asegura que de contener secuencias, éstas no se reconocerán dentro de una única secuencia. El nodo raı́z es un nodo artificial que no se corresponde, en realidad, con ninguna sección del documento, pero su existencia permite finalizar la estructura en forma de árbol haciendo que todos las secciones de máximo nivel pertenecientes al documento estén contenidas en él. De esta forma, igual que se puede entender el sub-árbol dependiente de un nodo como la representación de la sección completa asociada a dicho nodo, el nodo raı́z representa todo el documento. De hecho, realizando una búsqueda en profundidad del árbol de secciones es posible recuperar todo el texto de un artı́culo en el mismo orden en que este texto aparece en el documento original. 1.3.2 Reconocimiento de Secuencias En esta fase del proceso, es necesario identificar las cadenas de letras que forman secuencias candidatas. Para la realización de esta tarea, se han estudiado 40 artı́culos seleccionados por un panel de expertos como muestra representativa1 de la diversidad de formatos de representación que se emplean para la publicación de primers y probes. Tanto primers como probes están formados por secuencias de un conjunto de sı́mbolos concreto. En lo sucesivo, se nombrará a este conjunto como Σ, y los sı́mbolos pertenecientes a ete conjunto se encuentran detallados en la Tabla 1.1. Para nombrar a todas las posibles secuencias –no vacı́as– de sı́mbolos de Σ se utilizará, a su vez, el término Σ+ . Es necesario destacar que en los artı́culos, los sı́mbolos de Σ aparecen indiscriminadamente en su representación como letras mayúsculas y minúsculas, por lo que no es posible hacer distinción entre estos dos casos. En cuanto a la representación de primers y probes en la literatura, se han encontrado multitud de posibilidades. Es frecuente encontrar las secuencias delimitadas o introducidas por términos concretos. • Secuencias delimitadas: los delimitadores son generalmente los términos 5’ y 3’. Siempre que uno de los delimitadores indica el 1 Los artı́culos seleccionados no forman parte del conjunto de pruebas y este conjunto de pruebas no se encontraba disponible durante la implementación del sistema. 7 PROYECTO FIN DE CARRERA Sı́mbolo Nucleótidos Permitidos Nucleótidos Complementarios Significado A A T [A]denina B C|G|T V Cualquiera excepto Adenina C C G [C]itosina D A|G|T H Cualquiera excepto Citosina G G C Guanina H A|C|T D Cualquiera excepto Guanina K G|T M [K]eto M A|C K A[M]ino N A|C|G|T N Cualquier nucleótido R A|G Y [P]urina S C|G S Enlaces fuertes T T A [T]inina V A|C|G B Cualquiera excepto Tinina W A|T W Enlaces débiles Y C|T R Pirimidina Tabla 1.1: Tabla correspondiente a los sı́mbolos de Σ comienzo de la secuencia, el otro indicará el final. En ocasiones no aparece el sı́mbolo ’. • Secuencias introducidas: tan sólo aparece el delimitador de comienzo de la secuencia, esto es 5’ o 3’. En ocasiones se prescinde del sı́mbolo ’ y se sustituye por • Secuencias no delimitadas: no utilizan ninguna expresión ni para delimitar ni para introducir la secuencia. De forma independiente de si las secuencias se encuentran delimitadas, no delimitadas o introducidas, es posible encontrar algunos caracteres entre los sı́mbolos de la misma. Estos caracteres son el espacio y el guión. El espacio se encuentra como separador de la secuencia, generalmente en grupos 8 CAPÍTULO 1. INTRODUCCIÓN de un tamaño fijo, que en la mayorı́a de los casos es de tres sı́mbolos por grupo. No obstante, también se utiliza el espacio para separar secuencias largas de forma que éstas puedan ocupar varias lı́neas de texto. Para este último uso también se utiliza el guión. Aunque estos son los casos más generales de uso de los mencionados caracteres, lo cierto es que los casos en los que es posible encontrar tanto espacios como guiones de forma arbitraria en cualquier lugar de la secuencia no suponen un caso marginal y, por lo tanto, esta arbitrariedad debe tenerse en cuenta como caso general de representación, añadiendo a los caracteres mencionados el identificador de fin de lı́nea. Basándose en las representaciones descritas, el método propone la creación de tres reconocedores diferentes. Estos tres reconocedores están orientados a detectar diferentes representaciones de secuencias atendiendo a la seguridad con la que se puede afirmar que cadena perteneciente a Σ+ es realmente un primer o un probe. Los reconocedores y los tipos de secuencia que reconocen son los siguientes: • Reconocedor 1: reconoce secuencias delimitadas por alguno de los siguientes pares de expresiones: 5’ . . . 3’, 3’ . . . 5’, 5 . . . 3, 3 . . . 5 o que comienzan por las expresiones 5’, 5, 3’ o 3. Se permite la aparición de los caracteres de espacio y fin de lı́nea, y pueden ocupar varias lı́neas. • Reconocedor 2: reconoce las secuencias agrupadas en grupos de tres sı́mbolos de Σ separados por espacios, a excepción del último grupo, que tendrá, como máximo, un tamaño de 3 sı́mbolos. Pueden ocupar más de una lı́nea. • Reconocedor 3: reconoce todas las cadenas de Σ+ . Estas cadenas pueden contener los caracteres de espacio y guión además de ocupar varias lı́neas. Los reconocedores están pensados para trabajar de forma conjunta en la detección de secuencias. De esta forma, todas las cadenas que no hayan sido reconocidas por el primer reconocedor pasarán automáticamente al segundo y, en caso de tampoco ser reconocida ninguna cadena, al tercero. Sin embargo, cuando un reconocedor reconoce una cadena como una secuencia candidata, el texto ya leı́do correspondiente a dicha cadena no pasará a los siguientes reconocedores. La razón para este funcionamiento en cascada de los reconocedores se debe a que, sabiendo cual es el reconocedor utilizado se puede tener una estimación inicial de la confianza de que la cadena reconocida pueda ser, efectivamente, un primer o un probe. Como resultado del proceso de reconocimiento, no se genera una única cadena de sı́mbolos, sino una agrupación de cadenas –en lo sucesivo, tokens. Cada token será una cadena perteneciente a Σ+ . La existencia de varios 9 PROYECTO FIN DE CARRERA tokens es el resultado de eliminar los sı́mbolos de espacio y guión de la secuencia reconocida. Es necesario conservar esta separación en tokens para la siguiente etapa. 1.3.3 Filtrado de Secuencias El objetivo de esta fase es el refinamiento de las secuencias, que a la entrada de esta fase se encuentran en la forma de una lista de tokens. Este refinamiento consiste en descartar falsos positivos, depurar secuencias con ruido y dividir secuencias que han sido reconocidas conjuntamente. A continuación se ofrece una explicación más detallada de cada uno de los citados problemas a resolver en esta etapa. Respecto a los falsos positivos detectados, esto se debe a la variedad de sı́mbolos de Σ. Con dichos sı́mbolos, es posible formar palabras en inglés, como por ejemplo standard, abstract o assay. Para poder identificar estas palabras, se ha recurrido a un diccionario de palabras inglesas formada exclusivamente por sı́mbolos de Σ, creada especı́ficamente para este sistema. En lo referente a la incorporación de ruido en las secuencias, esto se debe a que algunas de las palabras incluidas en la lista de términos ingleses formados por sı́mbolos de Σ puede haber sido reconocida de forma conjunta con la secuencia, al principio o al final de la misma, generando ası́ prefijos y/o sufijos no deseados. Además, existen ciertas expresiones, como TAMRA-T que aparecen en ocasiones de forma conjunta con las secuencias y que no son palabras inglesas. Se han detectado los posibles términos que plantean este problema y se han incluido en una lista especı́fica de afijos. De forma similar a lo anteriormente descrito, las palabras o expresiones que pueden aparecer de forma conjunta con las secuencias, pueden encontrarse dentro de una única secuencia candidata. En este caso es necesario dividir la secuencia candidata en dos fragmentos delimitados por dicha palabra o expresión. Un ejemplo de este caso serı́a la secuencia candidata formada por los siguientes tokens: “ACRSTGT”, “and” y “CGRTTN”. El método a implementar trata esta fase utilizando un sistema experto (Harmon et al., 1985), realizando un proceso iterativo de refinamiento recurriendo a una base de reglas que solucionan los problemas descritos, ası́ como al diccionario de palabras y a la lista de afijos. Las reglas especı́ficas pueden consultarse en el Apéndice B. 1.3.4 Anotación de Secuencias En esta última fase se recurre a bases de datos externas con el objetivo de extraer información adicional sobre las secuencias. Estos recursos son BLAST y Entrez Nucleotide. Si bien ambos recursos se encuentran 10 CAPÍTULO 1. INTRODUCCIÓN disponibles a través de internet, se plantea su descarga y uso local por motivos de rendimiento. La información adicional que se pretende recuperar para cada secuencia son el nombre del organismo al que la secuencia pertenece y el nombre del gen en que se encuentra la secuencia. En primer lugar se ejecuta la herramienta BLAST sobre la base de datos de microorganismos descargada en formato FASTA. Esta consulta devuelve una serie de entradas relevantes, de las que se escogen las diez primeras –con mejor puntuación. Para cada una de las diez entradas obtenidas utilizando BLAST se recurre a la base de datos Nucleotide para obtener, si están disponibles, los nombres del organismo y del gen asociados. Una vez obtenidos los posibles nombres de organismo y de gen para cada secuencia, se realiza una búsqueda del nombre de organismo y del gen en el texto. Respecto al nombre de organismo, éste puede aparecer en el texto bajo diferentes nombres –e.g. “Brucella Mellitensis” puede aparecer como “B. Mellitensis”. Además, es necesario considerar resultados parciales –e.g. simplemente “Brucella”. El nombre del gen, sin embargo, aparecerá con una única expresión en el texto y no se permiten resultados parciales. A cada nombre de organismo y a cada gen encontrados en el texto se les asigna un valor de confianza, que será un valor de 0 a 100. El cálculo de este valor depende de la localización en el texto del artı́culo del nombre del gen respecto de la secuencia en cuestión, y de si se trata de un resultado parcial en la búsqueda del término en el texto. En el caso de los genes, se asignará un valor de 80 puntos si el gen se encuentra en el texto, y de 100 puntos si, además, se encuentra en la misma sección que la secuencia. De forma similar, se aplicará este sistema también a los nombres de organismo, salvo que los 80 puntos asignados por aparecer en el texto sólo se otorgarán en caso de que se encuentre un resultado completo en la búsqueda. La función que calcula la puntuación exacta entre 0 y 80 dependiendo de la búsqueda en el texto se detalla en el Apéndice B. 1.3.5 Generación de un Índice de Artı́culos y Secuencias La generación del ı́ndice utiliza técnicas de recuperación de información para relacionar un artı́culo con las secuencias que contiene. De esta forma, introduciendo una consulta en forma de secuencia genética podrán recuperarse los artı́culos relacionados, e introduciendo un artı́culo, se podrán recuperar las secuencias del mismo de forma automática. Además, también se incluirá en el indice el contenido textual del documento, añadiendo ası́ una mayor capacidad de búsquedas. Para generar el ı́ndice se utilizarán las dos primeras fases descritas anteriormente, es decir, la extracción del contenido textual de los documentos y el reconocimiento y posterior refinamiento de las secuencias contenidas en ellos. Para facilitar las tareas de consulta sobre el ı́ndice se 11 PROYECTO FIN DE CARRERA creará un interfaz web. Se permitirá buscar todos los artı́culos relacionados con un conjunto de secuencias, ası́ como se podrán buscar todas las secuencias relacionadas con los artı́culos que, a su vez, sean relevantes para una consulta determinada. Además, se podrá realizar un último tipo de búsqueda similar a este último, en el que además, se limitan las posibles secuencias a las especificadas en la consulta. Para conseguir este tipo de búsquedas se permite dividir la consulta en dos partes, una para secuencias y otra referida al contenido de los artı́culos. En la segunda parte se podrán especificar elementos del contenido textual del documento o campos del mismo, como son el identificador, el tı́tulo o los autores. Todas las consultas pueden ser formuladas utilizando la sintaxis de consultas que se puede encontrar en el Apéndice A. 12 Capı́tulo 2 ESTADO DE LA CUESTIÓN 2.1 Introducción En este capı́tulo se describe el estado de la cuestión actual en relación al Proyecto de Fin de Carrera. En primer lugar se muestran las herramientas y recursos con funcionalidades similares más importantes que existen en la actualidad. A continuación se presentan los fundamentos teóricos relevantes utilizados en el este Trabajo. 2.2 Trabajos Previos Relacionados Durante los últimos años, diversas técnicas como la minerı́a de textos, extracción de información e ingenierı́a del conocimiento se han aplicado con éxito para la extracción, análisis y visualización de información biológica a partir de la literatura cientı́fica sobre investigación biomédica (de la Calle et al., 2009; Hirschman et al., 2005; McDonald et al., 2005; Rice et al., 2005; Tamames, 2005; Gonzalez-Diaz et al., 2009). A pesar de que las aplicaciones estas técnicas sobre fuentes biológicas es un campo de investigación activo, no han sido aplicadas aún para la creación de métodos y herramientas que permitan la extracción de secuencias genéticas como primers y probes de forma automatizada a partir de la literatura. Este trabajo se ha realizado para satisfacer una demanda de los investigadores de ciertas áreas de la Bioinformática. En cuanto a la detección de secuencias en la literatura, no se ha encontrado ninguna herramienta anterior que realice esta tarea en concreto. Hasta la actualidad, la mayorı́a de enfoques orientados al reconocimiento de secuencias genéticas (Hyyro et al., 2005; Tarhio et al., 1997; Cheng et al., 2003; Anvar et al., 2010) se basan en la detección o alineamiento de los sı́mbolos de nucleótidos básicos 13 PROYECTO FIN DE CARRERA –i.e. A, C, G y T –. Algunos sistemas, como Kangaroo (Betel et al., 2002) trabaja sobre el mismo conjunto de sı́mbolos que el presente Proyecto de Fin de Carrera, no obstante, su funcionamiento se basa en detectar patrones sobre secuencias –ya detectadas– utilizando expresiones regulares a partir de una fuente de datos estructurada que almacena dichas secuencias. Dadas las diferencias en cuanto a ls funcionalidad ofrecida y la fuente de información, no es realmente una posibilidad de comparación. Respecto a la creación de un ı́ndice de secuencias del tipo primer y probe, existen algunas alternativas en la actualidad. A continuación se destacan las más importantes. • Molecular Probe Data Base (Campi et al., 1997), disponible a través del “Sequence Retrieval System” (LION bioscience AG, 2003). Este repositirio contiene información sobre oligonucleótidos sintéticos utilizados como primers y probes. • PrimerBank (Spandidos et al., 2010; The Massachusetts General Hospital, 2006), creado para recuperar información sobre primers para humanos y ratones para el análisis de expresiones genéticas mediante PCR y QPCR (VanGuilder et al., 2008). • NCBI Probe Database (National Center for Biotechnology Information, 2009c) es un registro público de reactivos de ácidos nucléicos diseñados para su uso en un amplio rango de aplicaciones en la investigación biomédica. • RTPrimerDB (Pattyn et al., 2003; Center for Medical Genetics, 2002) y probeBase (Loy et al., 2007; University of Vienna. Department of Microbial Ecology, 2003) son bases de datos de acceso gratuito que contienen secuencias de primers y probes validadas empı́ricamente. Todos los recursos de la lista anterior son, efectivamente, repositorios de secuencias genéticas como primers y probes. No obstante, la actualización de estos repositorios se realiza manualmente a través de las colaboraciones de los diferentes investigadores, lo que hace que estos repositorios sean incompletos y costosos de mantener. En último término los investigadores están frecuentemente obligados a recurrir a la literatura para la obtención de estas secuencias. La principal diferencia de estos repositorios respecto al presente Trabajo de Fin de Carrera es, por tanto, que en este último las secuencias son detectadas de forma automática y a partir de la literatura cientı́fica, no requiriendo de la colaboración expresa de los investigadores más allá de la publicación de sus artı́culos cientı́ficos, y permitiendo la detección y mantenimiento de un gran volumen de secuencias a un bajo coste. 14 CAPÍTULO 2. ESTADO DE LA CUESTIÓN 2.3 2.3.1 Fundamentos Teóricos Recuperación de Información La recuperación de información (en lo sucesivo, RI) es un campo que permite obtener documentos –i.e. elementos con un contenido textual– a partir de búsquedas o consultas textuales. En un principio se utilizaban técnicas simples como búsquedas directas y métodos estadı́sticos puros, pero tras la explosión de Internet ha sido un área de intenso estudio dada la necesidad de recuperar páginas web a partir de consultas basadas en palabras, refinándose cada vez más e incorporando nuevas técnicas y algoritmos. Éstas técnicas van desde las orientadas al procesamiento de lenguaje natural a la representación del conocimiento contenido en los documentos mediante ontologı́as. 2.3.1.1 Visión General de un Sistema Clásico de RI Para su funcionamiento, un sistema de RI necesita una colección de documentos sobre los que poder realizar las búsquedas, y una consulta para la que poder ofrecer resultados. Visto como una caja negra, a partir de dicha colección y dicha consulta, el sistema de recuperación de información devolverá un conjunto de documentos pertenecientes a la colección que son relevantes para la consulta. Los elementos tı́picos de un sistema clásico de RI son: • Función de representación: transforma el contenido textual de las consultas y los documentos en una representación interna. Generalmente esta función elimina los elementos textuales que no aportan información ni significado a los documentos. • Índice: los documentos transformados se almacenan en el ı́ndice. El ı́ndice debe de ser capaz de obtener los documentos a partir de los términos contenidos en los mismos de forma eficiente. • Función de comparación: esta función sirve para discernir qué documentos son relevantes a una consulta y, además, permite asignar un valor a dicha relevancia, de forma que sea posible realizar una ordenación de los documentos resultado según su relevancia respecto de la consulta proporcionada. El funcionamiento tı́pico de un sistema de Recuperación de Información consta de dos etapas. La primera etapa consiste en la creación del ı́ndice de términos a partir de la colección de documentos. En esta etapa se almacena ası́ el contenido de los documentos de forma que éstos sean recuperables 15 PROYECTO FIN DE CARRERA Consulta Resultados Función de Representación Función de Representación Función de Comparación Índice Colección de Documentos Figura 2.1: Esquema de un sistema de RI clásico a partir de los términos que contienen, tras eliminar los términos no significativos. La segunda etapa se inicia al ser proporcionada una consulta. En primer lugar, esta consulta se transforma para eliminar de la misma los términos que no aportan información. Entonces, se extraen los documentos relevantes a la consulta realizada del ı́ndice. Debe tenerse en cuenta que la colección inicial de documentos puede ser muy grande –e.g. en el caso de Internet, la gran mayorı́a de páginas web son candidatas a ser indizadas – y potencialmente, el conjunto de documentos que conforman el resultado de la consulta puede, también, ser muy numeroso. Por lo tanto, es necesaria una última fase de ordenación de dichos resultados, si bien esta ordenación suele realizarse, por motivos de eficiencia, de forma conjunta con la extracción de los documentos relevantes. En la figura 2.1 puede observarse el esquema tı́pico de un sistema de RI. 2.3.1.2 Creación del Índice de Documentos El contenido textual de un documento puede ser visto como una sucesión de términos. El objetivo del ı́ndice es almacenar los documentos a través del almacenamiento de los términos contenidos en ellos, manteniendo la relación de pertenencia de términos y documentos. Dado que el objetivo del ı́ndice será obtener documentos a partir de términos, suelen estructurarse como una lista de términos asociando a cada término los documentos en los que éste aparece. Además, es posible utilizar valores estadı́sticos –e.g. la frecuencia con que un término aparece en un documento o en la colección– para asignar pesos a estos términos, tanto de forma exclusiva –i.e. un valor por término–, como relativa a los documentos –i.e. un valor para cada par término-documento. Dado que no todos los términos aportan la misma cantidad de 16 CAPÍTULO 2. ESTADO DE LA CUESTIÓN información sobre el documento, es posible reducir el tamaño del ı́ndice no indizando todos los términos. Algunos términos, como las preposiciones, pueden provocar que se extraigan demasiados documentos del ı́ndice como si fueran relevantes, aumentando innecesariamente el conjunto de documentos resultado. Para detectar qué términos no incluir en el ı́ndice, se suelen utilizar listas de palabras con una alta frecuencia de uso y sin valor en cuanto a la información que aportan al estar contenidas en un documento. Como puede observarse, estas listas son dependientes del idioma, por lo que será necesario conocer de antemano el idioma de cada documento de la colección. También se pueden utilizar medidas como idf (proveniente del inglés “inverse term frequency”) que mide la importancia de un término en la colección, con el objetivo de detectar términos poco significativos y descartarlos para su indización. Por otro lado, para mejorar la concordancia de términos de la consulta respecto a los términos del ı́ndice, es posible reducir los términos a sus lexemas –i.e. proceso conocido como lematización– de forma que se mejora la concordancia y se reduce el tamaño del ı́ndice. 2.3.1.2.1 Estructura del Índice A continuación se indican las estructuras de datos más frecuentemente utilizadas para la creación de los ı́ndices en los sistemas de RI. Como se ha mencionado anteriormente, el ı́ndice debe permitir la obtención de documentos a partir de términos, y dado que los sistemas de RI suelen manejar grandes cantidades de datos, la eficiencia del proceso de extracción de documentos a partir de términos utilizando el ı́ndice tiene un gran impacto en la eficiencia del sistema de RI. Árboles Trie: se trata de una estructura de árbol n-ario en la que cada nodo representa un sı́mbolo de un término, de forma que si un sı́mbolo sucede a otro en el término, entonces el nodo correspondiente al segundo sı́mbolo será hijo del nodo correspondiente al primer sı́mbolo. Asociado a cada nodo final de un término se encontrará almacenada una lista con los identificadores de los documentos que lo contienen. La principal ventaja de esta estructura de datos es que permite realizar las operaciones de inserción, borrado y recuperación en un orden de complejidad dependiente sólo de la longitud del término de entrada. Además, permite realizar con gran eficiencia búsquedas de prefijos y búsquedas aproximadas. Ficheros invertidos: los ficheros invertidos son en realidad, tres estructuras de datos: (1) un diccionario, que contiene todos los términos del ı́ndice, (2) un fichero de listas invertidas, que contiene, para cada término, los documentos en los que este aparece y (3) un fichero de documentos, con 17 PROYECTO FIN DE CARRERA todos los términos de cada documento. Para cada término del diccionario, se asocia la posición en la lista invertida de términos, junto con más información que pueda ser utilizada posteriormente, como diferentes pesos o medidas relativas al término. Nótese que el hecho de almacenar los términos tal y como aparecen en los documentos originales en el fichero de documentos, se puede dotar posteriormente al sistema de RI con más funcionalidades que las descritas hasta el momento, como pueden ser el uso de frases exactas en las consultas, obligando a que dichas frases exactas aparezcan en los documentos resultado con la misma sucesión de términos. 2.3.1.2.2 Enfoques Más Importantes En este apartado se plantean los enfoques más significativos en el campo de la RI. Los enfoques varı́an en cuanto a la representación de los documentos, y su relación respecto a los términos que contienen. Modelo Booleano : (Baeza-Yates et al., 2008; Salton et al., 1986; Rijsbergen et al., 1979) este modelo se basa en representar cada documento como un conjunto de términos, de forma que la Función de Comparación es una función binaria equivalente a la función de pertenencia a un conjunto. El nombre “Booleano” viene dado por la posibilidad de utilizar operadores booleanos sobre los términos de las consultas, de forma que cada consulta es un predicado que utiliza los operadores booleanos sobre el resultado de aplicar la función de pertenencia de la teorı́a de conjuntos sobre cada documento. Como se puede observar, este modelo carece de la posibilidad de ordenar los resultados obtenidos a partir de la consulta, resultando, por lo tanto, poco útil a dı́a de hoy. No obstante, por su simplicidad, este modelo se utilizó con cierta frecuencia en el pasado. Modelo Vectorial : (Salton et al., 1975) en este enfoque, se utilizan todos los términos de la colección como ejes de coordenadas de un espacio vectorial en el que los documentos se representan como vectores. Cada coordenada concreta de un documento se calcula utilizando una relación entre el documento y el término, como la frecuencia de aparición del término en el documento, o el valor idf mencionado anteriormente. De esta forma, es posible calcular la similitud de una consulta respecto de un documento mediante una función distancia sobre el espacio vectorial, representando la consulta a su vez como un vector del modelo. Normalmente, las relaciones entre los términos de la consulta y los términos de la colección utilizan métricas diferentes para el cálculo de las coordenadas, como la frecuencia de aparición de los términos en la colección. Una de las distancias más utilizadas es la utilización del ángulo entre los vectores consulta y documento. Utilizando este modelo, no sólo se pueden determinar qué 18 CAPÍTULO 2. ESTADO DE LA CUESTIÓN documentos son relevantes a una consulta dada, lo que se puede hacer fácilmente fijando un umbral de distancia, sino que se pueden comparar las diferentes distancias para realizar una ordenación del conjunto de documentos resultado. Modelo Probabilı́stico : (Robertson, 1997; Sparck Jones et al., 1997) dada una consulta q existe una probabilidad Pi de que un documento di , perteneciente a la colección D sea relevante para dicha consulta. Ésto supone que existe un conjunto de documentos relevantes para cada consulta, por lo que Pi indicará la probabilidad de que el documento di pertenezca al conjunto de documentos relevantes para la consulta q. Conocer qué documentos son relevantes para cada consulta, o lo que es lo mismo, cuales son los conjuntos de documentos relevantes para cada consulta posible, no es una tarea viable. Sin embargo, el enfoque de este modelo consiste en estimar un conjunto inicial a partir de los términos de la consulta, utilizando técnicas ya mencionadas –e.g. frecuencias de términos o idf – e ir refinándolo progresivamente, mejorando la estimación de las probabilidades de pertenencia de los documentos a los conjuntos asociados a las consultas. 2.3.1.2.3 Evaluación de Sistemas de RI Saber cómo se comporta un sistema de RI es fundamental para poder mejorarlo. Con este objetivo, se utilizan dos medidas fundamentales: • Exhaustividad: esta medida refleja la cantidad de documentos relevantes que se han seleccionado para el conjunto de documentos resultado. Matemáticamente, viene definida por la expresión: recall = |documentos recuperados ∩ documentos relevantes| |documentos relevantes| • Precisión: la precisión mide la calidad de los resultados obtenidos, es decir, cómo de relevantes son los documentos recuperados. Se calcula utilizando la siguiente expresión: precision = |documentos recuperados ∩ documentos relevantes| |documentos recuperados| Estas dos medidas pueden relacionarse entre sı́ mediante una tercera, llamada medida-F, que las relaciona: F =2· precision · recall precision + recall 19 PROYECTO FIN DE CARRERA 2.3.2 Búsqueda en Textos Mediante Autómatas Finitos La búsqueda en textos se refiere a encontrar la ocurrencia de un patrón en un texto. Se pueden distinguir diferentes tipos de búsquedas en función de las caracterı́sticas del patrón, y de la exactitud con la que se considere aceptar una coincidencia del patrón en el texto. El uso de autómatas para esta tarea permite realizar búsquedas tanto exactas como aproximadas de forma sencilla y eficiente(Melichar et al., 2005). El funcionamiento general de estos algoritmos supone la construcción de un autómata para cada secuencia de búsqueda. Una vez construida la máquina de estados finitos, tan sólo se requiere la alimentación de la misma con los términos del texto para que éste detecte las ocurrencias del patrón buscado. Dicho patrón consistirá, en este caso, en un término o secuencia de términos que deberán aparecer en el texto. En el caso de secuencias de términos, se buscará la ocurrencia en el texto de la misma secuencia exacta de términos. Dados un alfabeto de sı́mbolos A, un texto T compuesto por la sucesión de términos –i.e. sucesión ordenada de sı́mbolos de A– t1 , t2 , ..., tn y un patrón P compuesto por los términos p1 , p2 , ..., ps , dependiendo de cómo se defina la equivalencia de los términos ti y lso términos pi podremos distinguir entre los siguientes tipos de búsqueda: • Búsqueda exacta: La búsqueda exacta será satisfactoria cuando se encuentre la secuencia exacta de términos pi que componen P en el texto T . Dicho de otro modo, cuando P sea una subsecuencia de T . El autómata correspondiente a este tipo de búsqueda puede observarse en la figura 2.3 p1 p2 p3 pn Figura 2.2: Autómata para búsqueda exacta • Búsqueda aproximada: La búsqueda aproximada difiere de la búsqueda exacta en que un término ti del texto T se reconocerá como una ocurrencia del término pj del patrón P utilizando una función de distancia. De esta forma, será necesario especificar qué función de distancia se utilizará, ası́ como la distancia máxima hasta la cual se considerará que el término ti es equivalente al término pj . Las funciones distancias más comunes son: – Distancia Hamming o Distancia-R: mide la distancia entre dos términos t1 y t2 de sı́mbolos de un alfabeto A como el mı́nimo 20 CAPÍTULO 2. ESTADO DE LA CUESTIÓN número necesario de sustituciones –i.e. cambiar un sı́mbolo por otro– que hay que realizar sobre t1 para obtener t2 . Puede observarse un ejemplo del autómata generado para realizar búsquedas aproximadas utilizando esta distancia en la figura ?? – Distancia de Levenshtein o Distancia-DIR: esta función calcula la distancia entre t1 y t2 como el mı́nimo número de sustituciones, borrados –i.e. eliminar un sı́mbolo de un término– e inserciones –i.e. introducir un nuevo sı́mbolo en el término– necesarios para obtener t2 a partir de t1 . – Distancia generalizada de Levenshtein o Distancia-DIR T: además de las operaciones permitidas en la distancia de Levenshtein, esta función permite también el uso de la operación trasposición –i.e. intercambiar el orden de dos sı́mbolos consecutivos. p1 A - {p1} p2 p3 A - {p2} pn A - {p3} p2 p3 A - {pn-1} p4 pn Figura 2.3: Autómata para búsqueda aproximada, utilizando una distancia de Hamming de una unidad 21 PROYECTO FIN DE CARRERA 22 Capı́tulo 3 TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS 3.1 UML UML es acrónimo de Unified Modeling Language (Larman, 2002), cuyo significado en español es Lenguaje de Modelado Unificado. Este lenguaje es el más utilizado para la realización del diseño del sofware orientado a objetos, por lo que ha sido elegido para su uso en el presente Proyecto de Fin de Carrera. El lenguaje UML nace de los esfuerzos de la empresa Rational Software Corporation en los años 90 por unificar los diferentes esquemas de modelado orientados a objetos existentes. Los dos esquemas más destacados de aquella época eran el OMT (Object-modeling technique) y el Método Booch, creados por Rumbaugh y Booch respectivamente. Rumbaugh, Booch y Jacobson (creador del método de ingnierı́a de software orientado a objetos) trabajaron conjuntamente en la especificación del lenguaje UML. Tras incorporar la colaboración de empresas externas, UML se convirtió en 1997 en un estándar del OMG (Object Management Group). Una de las principales caracterı́sticas de UML es el Modelado Visual. Éste consiste en la abstracción del sistema mediante una notación especı́fica, principalmente gráfica. De esta forma, se puede plantear el sistema mediante la representación de sus diferentes componentes y la interacción entre los mismos. El modelado visual es a la ingenierı́a del software, por lo tanto, lo que los planos son a la arquitectura. UML es, además, un método formal de modelado, lo que supone una caracterı́stica fundamental desde el punto de vista de la ingenierı́a del software. Utilizando la notación gráfica UML es 23 PROYECTO FIN DE CARRERA posible definir de forma precisa y rigurosa el comportamiento de un sistema software orientado a objetos de forma independiente del lenguaje concreto de programación con el que se vaya a implementar el sistema con posterioridad, además, se pueden realizar verificaciones y validaciones del comportamiento del sistema sobre el diseño UML. 3.1.1 Notación UML Si bien UML es un lenguaje de una gran expresividad y con numerosas particularidades, en esta sección sólo se describirán aquellas herramientas que el lenguaje proporciona y que han sido utilizados en el diseño de este Proyecto de Fin de Carrera. 3.1.1.0.4 Casos de Uso Un caso de uso recoge la funcionalidad ofrecida por el sistema hacia un usuario concreto. Se trata de una técnica muy utilizada para la captura de requisitos, ya que permite definir qué ofrecerá el sistema a cada tipo de usuario. Para continuar con la exposición, son necesarias algunas definiciones: • Actor: entidad externa al sistema que tiene algún tipo de interacción con el mismo. Puede tratarse del rol ejercido por parte de personas –e.g. un usuario o un administrador – o de sistemas o dispositivos –e.g. una cola de impresión o un sistema de validación de tarjetas de crédito. Los actores de un sistema software pueden clasificarse dentro de alguna de las siguientes categorı́as: – Principal: actor cuyos objetivos quedan satisfechos a través del caso de uso. – De apoyo: actor que proporciona servicios al sistema. – Pasivo: actor que sin interactuar directamente con el sistema, se ve afectado por el caso de uso o afecta al mismo. • Escenario: es la secuencia de acciones, desde el punto de vista de la interacción entre el usuario y el sistema, que se lleva a cabo para satisfacer el objetivo del caso de uso. Dependiendo de si se trata de la secuencia de acciones esperada, o de una variante de la misma en función de algún error o evento excepcional, el escenario será nombrado como principal o alternativo, respectivamente. En función del contexto en que se realice el caso de uso, éste puede encontrarse definido bajo tres representaciones diferentes: 24 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS • Breve: se trata de un párrafo que resume el comportamiento normal –i.e. escenario principal– de un caso de uso. • Informal: agrupa varios párrafos escritos en lenguaje informal que describen tanto el escenario principal como los escenarios alternativos de un caso de uso. • Completo: describe detalladamente y de forma estructurada todos los posibles escenarios y actores del caso de uso, junto con otras particularidades del mismo como las precondiciones y postcondiciones. 3.1.1.0.5 Diagrama de Casos de Uso El diagrama de casos de uso es una notación gráfica que refleja todos los actores y casos de uso del sistema, dando ası́ una visión general del mismo desde el punto de vista de las funcionalidades que ofrece y sus dependencias respecto de otros sistemas con los que interactúe. De cara a los conceptos introducidos anteriormente esta notación asocia a los mismos los siguientes elementos gráficos: • Sistema: se representa mediante una caja que contiene los casos de uso. • Caso de uso: se representa mediante una elipse, cuyo contenido es el nombre del caso de uso. • Actor: se representa como una figura humana esquematizada. Debajo de la misma se encuentra el nombre del actor. Es necesario indicar que los casos de uso pueden encontrarse relacionados entre sı́. Las posibles relaciones son: • Inclusión: se utiliza cuando varios casos de uso tienen un comportamiento común, o se quiere simplificar algún caso de uso dividiéndolo en otros casos de uso más pequeños. Se representa mediante la expresión << include >> • Extensión: se utiliza cuando un caso de uso proporciona una funcionalidad adicional sobre otra ya existente. Se representa mediante la expresión << extends >> 25 PROYECTO FIN DE CARRERA Sistema Añadir al carrito Realizar Compra usuario Visa Añadir stock administrador Figura 3.1: Ejemplo de Diagrama de Casos de Uso 3.1.1.0.6 Diagrama de Clases Como ya se ha indicado, UML ha sido diseñado con objeto de proporcionar soporte a las etapas de análisis y diseño en la ingenierı́a del software para el paradigma de orientación a objetos. En este contexto se hace imprescindible la representación de elementos propios de dicho paradigma, como son las clases y objetos. El diagrama de clases del sistema está compuesto por todas las clases que implementan el sistema, relacionadas entre sı́ mediante relaciones. A continuación se detalla la notación gráfica de los citados elementos: Clases La notación gráfica para las clases consiste en una caja separada en tres zonas verticales por dos lı́neas horizontales trasversales. En la zona superior se indica el nombre de la clase, con letra cursiva en caso de tratarse de una clase abstracta. En la zona central se indican los atributos de la clase, uno por lı́nea, bajo el siguiente formato: visibilidad nombre : tipo = valor inicial donde la visibilidad se representa con el sı́mbolo ‘+’ si es privada, el sı́mbolo ‘-’ si es pública y el sı́mbolo ‘#’ si es protegida. En la última zona se indicarán los métodos de la clase. Éstos siguen una sintaxis similar al caso anterior: visibilidad nombre (lista parametros) : tipo devuelto 26 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS En ocasiones, y dependiendo del elemento gráfico concreto en el que se esté incluyendo la representación en notación gráfica de la clase, es posible que no se quiera indicar algunas de las zonas, con el objetivo de facilitar la comprensión gráfica del diagrama. En estos casos se dejará dicha zona en blanco. Objetos Los objetos se representan de forma idéntica a la clase de la que son instancia, con la excepción de que el nombre del objeto se indica delante del nombre de la clase, ambos separados por el sı́mbolo ‘:’. En caso de que se quiera representar una instancia cualquiera de una clase, sin necesidad de asignar un nombre a dicho objeto, no se escribirá ningún nombre para el objeto, quedando por tanto simplemente el nombre de la clase precedido del sı́mbolo ‘:’. Relaciones Las diferentes representaciones gráficas: relaciones tienen las siguientes • Asociación: se representa mediante una lı́nea continua. Opcionalmente se puede etiquetar con el nombre de la relación, la cardinalidad, la dirección de la misma y los roles que desempeñan los elementos relacionados. • Agregación: se representa mediante una lı́nea continua con un rombo de fondo negro en el extremo de la entidad de la que parte la agregación. Opcionalmente se puede indicar la cardinalidad. • Composición: se representa mediante una lı́nea continua con un rombo de fondo blanco en el extremo de la entidad de la que parte la agregación. Opcionalmente se puede indicar la cardinalidad. • Dependencia: se representa mediante una flecha de trazo discontinuo. • Dependencia: se representa mediante una lı́nea continua terminada en un triángulo de fondo blanco en la entidad padre. A continuación se muestra un ejemplo simplificado de diagrama de clases. 27 PROYECTO FIN DE CARRERA Carrito + usuario - realizarCompra() - validar() * * * Producto + categoría + precio + stock incrementarStock(n) ProductoFisico + codigoBarras FachadaVentas 1 + formaPago - realizarPago() Almacen 1 + proveedores + stock - realizarPedido(prod, cant) * Viaje + codigoReserva + fechaSalida + fechaLlegada - contratarSeguro() Evento + codigoReserva + fecha Figura 3.2: Ejemplo de Diagrama de Clases de Diseño 3.1.1.0.7 Diagrama de Interacción entre Objetos En este apartado se describe un tipo concreto de diagrama de interacción entre objetos en forma de diagrama de secuencia. En este diagrama se representan las diferentes operaciones que se realizan dentro del sistema para lograr un objetivo determinado, como puede ser un caso de uso. En este tipo de diagramas se representan los mensajes intercambiados entre los diferentes objetos mediante lı́neas horizontales, mientas que el eje vertical representa el transcurso del tiempo. En este caso los objetos se definen mediante una caja cuyo contenido sigue el siguiente formato: nombre objeto : nombre clase en el caso de que no se quiera indicar el nombre del objeto, o que éste no sea relevante, puede ser omitido. La traza temporal queda indicada mediante una lı́nea discontinua vertical sobre la que se indica el tiempo de vida de los objetos mediante cajas de fondo blanco. Los mensajes entre los diferentes objetos se representan utilizando flechas dirigidas etiquetadas con el nombre y parámetros de la operación. A continuación se muestra un ejemplo de diagrama de interacción entre objetos para una tienda de comercio electrónico simplificada. 28 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS :Usuario :Interfaz :Carrito :Producto añadirACarrito(cant) añadirACarrito(p,cant) validarStock(cant) Figura 3.3: Ejemplo de diagrama de Interacción entre Objetos 3.2 JAVA Java es un lenguaje de programación orientado a objetos (Bobadilla, 2003) que surgió a mediados de la década de los 90 -i.e la primera versión surgió en 1995 - desarrollado por Sun Microsystems, hoy en dı́a empresa subsidiaria de Oracle. Se trata de un lenguaje cuya sintaxis está inspirada en C y C++, que se fundamenta en la orientación a objetos. Su caracterı́stica más destacable es que es posible ejecutar el código en la Máquina Virtual Java (JVM, JAVA Virtual Machine). Existen implementaciones de la JVM para muchas arquitecturas y sistemas operativos, lo que hace que el lenguaje de programación JAVA sea extremadamente portable. Las principales caracterı́sticas de JAVA se detallan a continuación: • Orientación a objetos: la orientación a objetos en JAVA es obligatoria ya que todo elemento está contenido en una clase o interfaz. A pesar de esta restricción, no es complicado utilizar un paradigma imperativo a la hora de programar en JAVA, y permite una gran facilidad a la hora de realizar un desarrollo orientado a objetos. • Independencia de la plataforma: como se ha comentado, el hecho de poderse compilar el código para ser ejecutado en una JVM, permite su portabilidad a cualquier entorno para el cual exista una implementación de dicha máquina virtual. No obstante, JAVA también puede ser compilado para una arquitectura y sistema operativo en concreto, ganando ası́ en eficiencia aunque perdiendo en portabilidad. Uno de los slogans de JAVA para resaltar su flexibilidad respecto a la plataforma de ejecución es write once, run anyware, cuyo significado es escribir una vez, ejecutar en cualquier sitio. • Robustez y fiabilidad: la gran popularidad de JAVA ha sido a la vez causa y consecuencia de su fiabilidad, ya que a lo largo de la 29 PROYECTO FIN DE CARRERA evolución del lenguaje se han incorporado incrementalmente revisiones que incorporaban cambios demandados por los usuarios del lenguaje. • Concurrencia: Java ofrece soporte para programas concurrentes con más de un hilo de ejecución. En combinación con el hecho de que un programa Java puede ser ejecutado sobre diferentes sistemas operativos, hace que se puedan implementar programas concurrentes de forma transparente a las llamadas particulares del sistema operativo, facilitando ası́ dicha implementación. • Distribución: Java permite la comunicación mediante sockets, implementados como objetos en su API, entre diferentes componentes de un mismo sistema. Dichos componentes pueden sincronizar su ejecución fácilmente a través de una red de datos. • Web: Java es muy utilizado como backend de aplicaciones web, gracias a la posibilidad de implementar fácilmente páginas web dinámicas, conocidas como Java Server Pages (JSP) o, directamente, Servlets – i.e. código JAVA que genera como salida código HTML listo para ser presentado por un servidor web. • Seguridad: las caracterı́sticas de JAVA que permiten el desarrollo de sistemas distribuidos y aplicaciones web, junto con la gran popularidad del lenguaje, han requerido un esfuerzo considerable en cuanto a seguridad. Gracias a la constante evolución del lenguaje, Java ofrece un nivel de seguridad confiable. • API: la API básica de Java incorpora una gran variedad de clases jerarquizadas mediante los mecanismos de herencia –i.e. tanto herencia simple como de interfaz– que proporciona el paradigma de programación orientado a objetos. Estas clases ofrecen una gran comodidad a la hora de implementar un sistema, ya que abstraen de la necesidad de crear una enorme variedad de estructuras de datos y mecanismos de comunicación. Dadas las capacidades que ofrece Java, puede verse más como un conjunto de tecnologı́as que como un simple lenguaje de programación. Actualmente, Java es utilizado, entre otros propósitos, para desarrollar aplicaciones para dispositivos móviles, como teléfonos o tablets, creación de aplicaciones web, Applets –i.e programas con interfaz propio embebidos en páginas web– además de las aplicaciones tradicionales que se ejecutan en un entorno local. Además, el hecho de que se pueda utilizar tal variedad de tecnologı́as en un entorno homogéneo permite un ahorro significativo de esfuerzo a la hora de crear sistemas grandes y complejos que requieran del uso de varias de ellas. 30 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS 3.3 PDF Las Siglas PDF son el acrónimo de Portable Document Format (Adobe Systems Incorporated, 2008b, 2009, 2008a), cuyo significado en castellano es Formato de Documento Portable. Se trata de un stándar abierto para el intercambio de documentos, cuya principal caracterı́stica es que proporciona una representación única para los documentos de forma independiente de la plataforma en que éstos se visualicen. PDF fue creado por Adobe en 1993, basándose en PostScript (PS), una tecnologı́a previa desarrollada por la misma compañı́a. En sus comienzos, tuvo dificultades de aceptación debido principalmente a que no ofrecı́a soporte para hiperenlaces y a que el software necesario para generar y visualizar los documentos PDF no era gratuito. A lo largo del tiempo se fueron incorporando nuevas caracterı́sticas y funcionalidades, y se ofreció el visor de forma gratuita. Poco a poco PDF fue ganando popularidad hasta llegar a convertirse en un estándar de facto. En el año 2008, la versión 1.7 de PDF fue adoptada como estándar oficial bajo el nombre ISO 32000-1. Como ya se ha mencionado, la principal caracterı́stica de PDF es su independencia de la plataforma. Este aspecto supone que un mismo documento se visualiza exactamente igual con independencia del sistema operativo, software del visor, y hardware empleados. El resultado es el mismo, además, en la versión digital visualizada que en el formato impreso. Para conseguir esta particularidad, el formato incluye todos los elementos necesarios para la visualización –i.e imágenes tanto vectoriales como en mapa de bits, texto y fuentes no estándares– en el mismo fichero, además de toda la información necesaria para producir la maquetación final basándose en un mapa de coordenadas cartesianas para cada página del documento. Como curiosidad, obsérvese que es posible generar una misma visualización a partir de diferentes maquetaciones –e.g. una palabra puede representarse indicando que dicha palabra se encuentra en una posición, o indicando las posiciones de cada una de sus letras. 3.4 Apache PDFBox Apache PDFBox (The Apache Software Foundation, 2011c) es una librerı́a para Java distribuı́da bajo licencia Apache License 2.0 (The Apache Software Foundation, 2011a) que permite la manipulación de PDFs. Junto con la API para tratar los documentos, se incluyen algunas utilidades de lı́nea de comandos que sirven, además de herramientas, como ejemplos de uso de la librerı́a. Las funcionalidades que ofrece esta librerı́a son: • Extracción de texto 31 PROYECTO FIN DE CARRERA • Unión de documentos • Cifrado y descifrado de documentos • Integración con el motor de búsqueda Lucene • Uso de formularios • creación de documentos • creación de imágenes a partir de páginas de PDF • impresión de documentos 3.5 XML XML proviene del inglés Extensible Markup Language (Bray et al., 2011), cuyo significado es Lenguaje de Marcas Extensible. Se trata de un conjunto de reglas para la codificación de documentos de forma que puedan ser interpretados de forma automática –i.e. por sistemas software. A pesar de que su concepción se orientó a la representación de documentos, su expresividad y flexibilidad lo han llevado a ser utilizado, además, para la representación estructurada de datos, especialmente en los servicios web. Respecto a la sintaxis, las reglas que llevan a un documento XML a estar bien formado son simples y están referidas a la estructura del documento. Al no introducir reglas sobre la semántica de los elementos, se consigue una gran flexibilidad a la hora de representar información. Un documento XML es una sucesión de caracteres y éste documento puede contener la gran mayorı́a de los caracteres Unicode. Existen, no obstante, algunos caracteres especiales, con significado propio, cuyo uso permite generar la estructura del documento. Estos caracteres son los sı́mbolos de “menor que”, “mayor que”, “ampersand”, “comillas simples” y “comillas dobles”. Estos últimos caracteres pueden representarse dentro del documento mediante secuencias especiales que son, respectivamente <, >, &, 0 y ”. Desde un punto de vista léxico-sintáctico, la estructura de los documentos XML debe respetar las siguientes normas: • Las letras minúsculas y las letras mayúsculas representan caracteres diferentes, ası́ como se consideran caracteres pertenecientes al documento el retorno de carro, fin de lı́nea y demás secuencias de control. • El contenido del documento puede ser estructurado mediante etiquetas. Las etiquetas están delimitadas por los caracteres < y > como en < Etiqueta > 32 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS • Las etiquetas pueden contener atributos nombrados, bajo la sintaxis nombre = “valor”. Se pueden utilizar comillas simples en lugar de las comillas dobles. • Todas las etiquetas deben estar cerradas, y su cierre debe encontrarse antes del cierre de cualquier otra etiqueta cuya apertura tenga lugar en un lugar anterior del documento. Se representa el cierre de una etiqueta mediante la sintaxis < /Etiqueta >. Si un elemento no tiene ningún contenido, puede ser representado mediante una única etiqueta de la forma < Etiqueta/ >. • Un documento XML debe comenzar por una cabecera identificativa, que además aporta cierta información sobre el documento, como por ejemplo la codificación de caracteres empleada. Un ejemplo de esta cabecera es <?xml version = ”1.0” encoding = ”U T F − 8”? >. Las reglas anteriormente expuestas hacen que un documento esté bien formado. No obstante, esto no significa que el documento sea válido respecto a una determinada representación de los elementos. Para conseguir este objetivo es posible especificar un DTD (Document Type Definition, o Definición de Tipo de Documento) o XML Schema (Esquema XML). En este documento se especifican las etiquetas permitidas y sus relaciones. 3.5.1 Parsers XML Dado que un documento XML ofrece el acceso estructurado a la información que contiene, es de interés detallar cómo se realiza realmente dicho acceso. Un parser o analizador de un documento XML es una herramienta software que permite la lectura, generación, manipulación y validación de documentos XML. Los analizadores pueden ser agrupados en diferentes categorı́as en función de cómo recorren el documento. • DOM. (W3C) Acrónimo de Document Object Model, cuyo significado es Modelo de Objeto de Documento. Este analizador mantiene una representación del documento en forma de árbol de etiquetas. Su principal ventaja es que ofrece una visión en forma de estructura de datos del contenido del documento y puede resultar útil cuando se requiere acceder a partes muy distantes del documento. Como desventaja, para poder generar el árbol jerárquico es necesario procesar por adelantado todo el documento, lo que puede suponer grandes consumos de memoria en documentos grandes. • SAX. (Megginson, 2011) Este tipo de analizador procesa el documento leyendo la tira de caracteres que lo forma y generando eventos –e.g se ha abierto o cerrado una etiqueta, se ha leı́do contenido, se ha 33 PROYECTO FIN DE CARRERA leı́do un atributo con un nombre y un valor, etc. Capturando dichos eventos es posible procesar el documento sin grandes consumos de memoria, y además no es necesario realizar un gran procesamiento para leer el texto del documento y crear los eventos, por lo que es muy rápido. Es especialmente útil cuando se quieren procesar grandes documentos de forma completa. Como inconveniente de este tipo de analizadores, en ciertas ocasiones la interpretación no es la misma en función de la zona del documento en que se encuentren –e.g. puede quererse tratar de forma diferente el contenido de una etiqueta cuyo nombre sea tı́tulo si se están procesando libros que si se están procesando pelı́culas, información que habrá que almacenar temporalmente desde etiquetas superiores. Este problema puede requerir del mantenimiento de complejas estructuras de datos que, al final, suponen una representación paralela de la estructura del documento. • STAX (Fry et al., 2011) En un intento de aunar las ventajas de DOM y SAX evitando sus desventajas, se creó STAX. El funcionamiento es similar a SAX en cuanto a que se procesa el contenido del documento a partir de la sucesión de caracteres que lo compone, salvo que en el caso de STAX, en lugar de generar siempre los mismos eventos, esta lectura se hace mediante demanda. Ası́, sobre el ejemplo anterior, el procedimiento encargado de leer los tı́tulos de pelı́culas no será el mismo que el encargado de leer los tı́tulos de libros, y se les podrá dar tratamientos diferenciados de forma sencilla, ya que la estructura del documento queda implı́cita en su lectura. Este analizador tiene una eficiencia cercana a la ofrecida por SAX y resulta de una comodidad similar a la de DOM. No obstante, no es recomendable a la hora de tratar con documentos con estructuras muy poco definidas o ambiguas. 3.6 Bases de Datos Relacionales Una base de datos es un sistema sotware diseñado para la organización, el almacenamiento y la recuperación de grandes cantidades de datos de forma sencilla. Desde el punto de vista de la arquitectura de una base de datos, se pueden distinguir tres niveles: • Externo: este nivel define cómo se estructura la información desde un punto de vista externo al sistema. Se pueden ofrecer diferentes formas de ver la información a este nivel. • Conceptual: en este nivel se proporcionan los mecanismos que permiten relacionar las diferentes vistas del nivel externo con el modelo implementado en el nivel interno. Si bien se abstrae de los detalles del 34 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS nivel interno, permite una visión homogénea respecto de las vistas ofrecidas en el nivel externo. • Interno: este nivel define el almacenamiento y procesamiento real de la información a nivel fı́sico. Es en este nivel donde se focalizan los esfuerzos relativos al rendimiento de la base de datos. 3.6.1 El Modelo Relacional El modelo relacional (Codd, 1983) es el modelo predominante en la actualidad y ha sido elegido para el almacenamiento de información en el presente Trabajo de Fin de Carrera. La base de este modelo radica en el almacenamiento tanto de datos como de sus relaciones. Una relación, en este contexto, es una estructura en forma de tabla bidimensional que relaciona diferentes entradas o tuplas de información –i.e. filas de la tabla– con cada uno de los atributos o campos que describen dicha entrada –i.e. columnas de la tabla. El modelo relacional tiene una base teórica basada en la Teorı́a de Conjuntos y la Lógica de Primer Orden. Este fundamento permite garantizar la integridad de los datos almacenados mediante este paradigma. 3.6.2 Modelado Entidad/Relación El modelo Entidad/Relación fue desarrollado por Peter Chen (Chen, 1976). Se trata de una notación gráfica –i.e. diagrama Entidad/Relación, o diagrama E/R– para la representación de los objetos del mundo real y sus interdependencias. Tiene una amplia aceptación y aplicación en la ingenierı́a informática, en concreto, en el diseño de bases de datos relacionales. Los diferentes elementos que son utilizados en este modelo son los siguientes: • Entidad: son los conceptos, clases de objetos o abstracciones que queremos representar. Por ejemplo, una entidad serı́a la entidad “Producto”, mientras que los productos concretos serı́an instancias de dicha entidad. • Relación: crea una asociación entre dos o más entidades. El nombre de la relación aporta un valor semántico a dicha asociación, por lo que los nombres de las relaciones suelen ser formas verbales, como por ejemplo, “usuario compra producto” o “usuario visita producto”, donde las relaciones “compra” y “visita” asocian las entidades “producto” y “usuario”. Al número de entidades que quedan vinculadas mediante una relación se le denomina Grado de la Relación y a las cantidades 35 PROYECTO FIN DE CARRERA máximas y mı́nimas de instancias de cada entidad que se permite que aparezcan en la relación se la denomina Cardinalidad de la Relación • Atributo: son las caracterı́sticas de interés correspondientes tanto a entidades como a relaciones. Las instancias de las entidades y de las relaciones deberán asignar un valor a cada uno de sus atributos. Ejemplos de atributo serı́an, para la entidad Producto, los atributos identificador y precio. En el caso del primero de estos atributos, dado que puede ser utilizado para diferenciar una instancia de otra, lleva el nombre de identificador, mientras que a los atributos que no poseen esta cualidad, como el segundo atributo del ejemplo, se denominan descriptores. Además, para cada atributo se puede definir también el tipo y rango de valores que puede tomar. Respecto a las normas de la notación se incluye un ejemplo de un sencillo diagrama de entidad relación. Como puede observarse, las entidades se representan dentro de Rectángulos, los atriutos dentro de elipses y las relaciones dentro de rombos. Las cardinalidades de la relación se indican junto a las mismas. id nombre Usuario Fecha id Compra Producto Precio N:M contraseña Categoría Figura 3.4: Ejemplo de Diagrama E/R 3.6.3 MySQL MySQL (MySQL AB, 2006) es un Sistema Gestor de Bases de Datos (SGBBDD) relacionales que permite la ejecución de múltiples instancias en diferentes hilos de ejecución, además de ser multiusuario. Pero quizás la caracterı́stica más importante es que se encuentran disponibles versiones con licencia de uso gratuita, estando parte del código bajo la licencia GNU GPL (Free Software Foundation, Inc., 2011). Dada su gran popularidad, y que en numerosas ocasiones se utiliza junto con otras herramientas gratuitas, MySQL forma parte del paquete de productos software conocido como LAMP, nombre formado por las primeras letras de todos los productos que agrupa –i.e Linux, Apache HTTP Server, MySQL y PHP. En el presente 36 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS Trabajo de Fin de Carrera, no obstante, MySQL es el único componente de LAMP utilizado. 3.7 3.7.1 GenBank y BioSQL GenBank GenBank es una base de datos de secuencias genéticas anotadas mantenida por los Institunos Nacionales de Salud (NIH, del inglés National Institutes of Health). Se trata de una base de datos de acceso público que pretende mantener actualizada todas las secuencias que han sido publicadas abiertamente. Si bien existen procedimientos para el envı́o de secuencias, en último término, son los cientı́ficos quienes envı́an las nuevas secuencias, por lo que no existe una homogeneidad absoluta respecto de su contenido. Es posible descargar la base de datos completa ası́ como las actualizaciones a partir de una fecha determinada. No obstante, la base de datos no se encuentra en un formato relacional, lo que puede resultar perjudicial para cierto tipo de necesidades, como es el caso del presente Trabajo de Fin de Carrera. Para solventar a este inconveniente se ha recurrido al uso de BioSQL, descrito en la próxima sub-sección. 3.7.2 BioSQL BioSQL es un modelo relacional que agrupa secuencias, caracterı́sticas, anotaciones, una taxonomı́a y ontologı́as sobre datos genéticos. Fue concebida por Ewan Birney en 2001 como un modelo relacional de GenBank y desde entonces este proyecto ha colaborado con los proyectos BioPerl, BioPython, BioJava y BioRuby, que proporcionan acceso a BioSQL desde los lenguajes de programación que forman sus nombres. 3.8 BLAST BLAST es el acrónimo de Basic Local Alignment Search Tool. Como herramienta, se trata de la implementación del algoritmo que lleva el mismo nombre y que permite la búsqueda de secuencias o subsecuencias de amonoácidos sobre una base de datos o librerı́a de secuencias. Es una herramienta de gran uso en el campo de la bioinformática, ya que a pesar de que los resultados obtenidos mediante su uso son menos precisos que utilizando algoritmos anteriores –e.g. Smith-Waterman– su ejecución es considerablemente más rápida, paliando el problema del alto consumo de recursos en la tarea de búsqueda de alineamientos en secuencias de 37 PROYECTO FIN DE CARRERA aminoácidos. Además, BLAST está pensada para poder ejecutarse en arquitecturas paralelas, reduciendo sustancialmente el tiempo de ejecución. BLAST fue concebido e implementado por Stephen Altschul, Warren Gish, y David Lipman, pertenecientes al National Center for Biotechnology Information (NCBI), y por Webb Miller de la Pennsylvania State University y Gene Myers de la University of Arizona. Dado que BLAST utiliza heurı́sticas, sus resultados no son siempre el mejor alineamiento posible, pero han sido aceptados como suficientemente buenos en la gran mayorı́a de ocasiones. Para mejorar su efectividad, en función de los tipos concretos de búsquedas que se vayan a realizar, es posible modificar el comportamiento del algoritmo ajustando diferentes parámetros. En la actualidad, BLAST no es sólo una herramienta, sino un conjunto de ellas. Las dos más utilizadas son: • blastn: dada una secuencia de ADN, devuelve las secuencias más similares existentes en una base de datos de secuencias genéticas proporcionada por el usuario. • blastp: dada una consulta sobre una proteı́na, se devuelven las secuencias de proteı́nas más similares de la base de datos de proteı́nas que el usuario especifique. 3.9 Servlets y Apache Tomcat En esta sección se agrupan las tecnologı́as de Servlets junto con el contenedor web Apache Tomcat. Esta agrupación se ha realizado debido a que dicho contenedor ha sido utilizado en este Trabajo de Fin de Carrera para alojar los servicios web ofrecidos. 3.9.1 Servlets Un Servlet es un módulo JAVA utilizado en un servidor para extender sus capacidades, siendo ası́ capaz de aprovechar, mediante el Servlet, toda la potencia del lenguaje JAVA y sus posibilidades de comunicación. Los Servlets se utilizan generalmente para la petición de operaciones a través de un interfaz WEB, generando como resultado una página a través de un descriptor de salida donde escriben el código HTML correspondiente a la página resultado. Para la construcción de dicha página respuesta es posible que el Servlet sea autosuficiente o que recurra a otros objetos –i.e. dichos objetos podrı́an ser también Servlets– para satisfacer la petición. En este último modelo es donde encaja el uso de los Servlets en el presente Trabajo de Fin de Carrera, donde los Servlets han sido utilizados como parte del 38 CAPÍTULO 3. TECNOLOGÍAS, LENGUAJES Y ESTÁNDARES EMPLEADOS interfaz web del sistema de búsquedas, actuando como un punto de acceso al sistema. 3.9.2 Apache Tomcat Apache Tomcat, también conocido como Jakarta Tomcat o simplemente Tomcat, es un contenedor web de código libre desarrollado por la Apache Software Fundation. Tomcat implementa los mecanismos necesarios para procesar Servlets de JAVA y Java Server Pages (JSP), además de las peticiones normales de HTTP. 3.10 Lucene Lucene (The Apache Software Foundation, 2011b) es una librerı́a de recuperación de información de código libre para JAVA, respaldada por la Apache Software Fundation y con licencia Apache Software License. Fue creada originalmente por Doug Cutting e incorporada a la Apache Software Foundation en Septiembre de 2001. Se trata de una potente librerı́a que permite incorporar capacidades de búsqueda a cualquier aplicación (Hatcher et al., 2010). A pesar de su aparente simplicidad, Lucene implementa internamente una interpretación del Modelo Espacio-Vectorial (MEV) de una forma extraordinariamente eficiente, lo que la ha llevado a gozar de una gran popularidad. Las caracterı́sticas más destacables de Lucene son: • Indización de alto rendimiento: Lucene es capaz de indexar rápidamente con un bajo consumo de memoria, tanto de forma completa como incremental, reduciendo el tamaño del ı́ndice a escalas de una quinta a una tercera parte del tamaño del texto original. • Algoritmos avanzados de búsqueda: en el paquete estándar de Lucen se encuentran disponibles diversos algoritmos y funcionalidades de búsqueda –e.g. búsqueda ranqueada, soporte para diversos tipos de consultas, búsqueda por fechas, etc – cuya implementación tiene muy en cuenta la eficiencia de los mismos. • Multiplataforma: dado que Lucene ha sido escrito utilizando el lenguaje de programación JAVA, aprovecha las caracterı́sticas multiplataforma de este lenguaje. 39 PROYECTO FIN DE CARRERA 40 Capı́tulo 4 ANÁLISIS DEL SISTEMA 4.1 4.1.1 ESPECIFICACIÓN SOFTWARE DE REQUISITOS Introducción Esta sección recoge la Especificación de Requisitos Software (ERS) del sistema “Sistema para la extracción, anotación y recuperación de secuencias genéticas presentes en la literatura cientı́fica” siguiendo el estándar “IEEE 830-1998 Recommended Practice for Software Requeriments Specifications” (Software Engineering Standards Committee of the IEEE Computer Society) A lo largo del diseño se harán numerosas referencias a los requisitos establecidos en este capı́tulo. Para la correcta identificación de los mismos, los requisitos serán numerados y se utilizará la siguiente expresión para referirse a un requisito determinado cuyo número sea, por ejemplo, N: REQ#N. 4.1.1.1 Propósito Mediante la ERS se establecerá una lista que recogerá, de forma completa y exhaustiva, los requisitos software –i.e. restricciones, funcionalidades y caracterı́sticas que determinan el sistema final– que deberá satisfacer el sistema. Dicha ERS está dirigida a todo aquel que quiera conocer las caracterı́sticas del sistema, resultando especialmente útil a desarrolladores que modifiquen yo amplı́en el mismo. Además, permitirá a los usuarios conocer de forma detallada las funcionalidades del sistema. 4.1.1.2 Ámbito del sistema El sistema “Sistema para la extracción, anotación y recuperación de secuencias genéticas presentes en la literatura cientı́fica” ha sido planteado 41 PROYECTO FIN DE CARRERA por expertos bioinformáticos con el objetivo de facilitar la tarea de extracción y anotación de secuencias genéticas presentes en la literatura cientı́fica. En la actualidad, dichos expertos suelen analizar manualmente la literatura para la extracción de secuencias genéticas como en el caso, por ejemplo, de las secuencias conocidas como cebadores y sondas. Dicha extracción manual conlleva, además, el mantenimiento de los datos extraı́dos de los diferentes artı́culos analizados. El futuro sistema se encargará de la extracción automática de las secuencias genéticas presentes en la literatura, además de su almacenamiento en un ı́ndice que permitirá realizar búsquedas a partir no sólo de información relativa a secuencias genéticas sino también a información propia del documento. 4.1.1.3 Definiciones, acrónimos y abreviaturas Definiciones Término Definición Administrador Actor que realiza las labores de instalación, actualización y mantenimiento del sistema Usuario Actor que usa los servicios ofrecidos por el sistema Artı́culo Documento cientı́fico publicado con carácter divulgativo Secuencia Secuencia genética Ínidce de artı́culos y secuencias Estructura de almacenamiento utilizada por un sistema de recuperación de información que permite la recuperación de documentos formados por artı́culos cientı́ficos y sus secuencias genéticas asociadas Nucleotide Base de datos del NCBI con documentos referidos a secuencias genéticas e información sobre las mismas Lucene API para el desarrollo de sistemas de recuperación de información 42 CAPÍTULO 4. ANÁLISIS DEL SISTEMA Acrónimos Acrónimo Definición API Application Programming Interface ERS Especificación de Requisitos Software IEEE Institute of Electrical and Electronics Engineers BLAST Basic Local Aligment Tool NCBI National Center for Biotecnology Information Abreviaturas Abreviatura Std 4.1.1.4 Definición Stándar Referencias IEEE Recommended Practice for Software Requirements Specifications (IEEE Std. 830-1998). 4.1.1.5 Visión General del Documento ERS Este documento de ERS contiene, además de la introducción a la que esta sección pertenece, dos secciones más: “Descripción General” y “Requisitos Especı́ficos”. El objetivo de la sección “Introducción” es proporcionar una visión general del documento ERS y establecer la estructura del mismo y sus relaciones con el sistema. La sección “Descripción General” proporciona un acercamiento global al sistema, indicándose sus principales funcionalidades, datos que maneja y factores que influyen en el desarrollo. La sección “Requisitos especı́ficos” recoge de forma exhaustiva los requisitos que deberá satisfacer el sistema, tanto funcionales como no funcionales. 4.1.2 Descripción General Esta sección recoge una visión global del sistema, estableciendo ası́ el marco o contexto que ubicará los requisitos expuestos más adelante. Se trata, por tanto, de una aproximación de alto nivel al sistema. 43 PROYECTO FIN DE CARRERA 4.1.2.1 Perspectiva del Producto El sistema “Sistema de Identificación, Extracción y Recuperación de Secuencias Genéticas a partir de la Literatura Cientı́fica” se compone a partir de un conjunto de subsistemas que interactúan entre sı́ y con otras herramientas externas. Para la anotación de secuencias se utilizarán las herramienta externa BLAST, la cual requiere a su vez de bases de datos de secuencias genéticas en un formato especı́fico, y la base de datos Nucleotide en formato relacional. Para la recuperación de secuencias a partir de la literatura y para la consulta del ı́ndice de documentos, sin embargo, no se ha identificado la necesidad de herramientas externas al sistema, si bien para estos últimos casos se utilizará Lucene, que quedará integrado en el sistema al ser utilizado a través de su API. 4.1.2.2 Funciones del producto El sistema a desarrollar tiene por objeto (1)la extracción de secuencias a partir de artı́culos cientı́ficos en varios formatos –i.e. PDF, PubMed Central XML y texto plano– (2) permitir la anotación individual de los mismos, (3) la generación de un ı́ndice masivo para PubMed Central y (4) la realización de consultas sobre dicho ı́ndice. Se trata, por tanto, de un conjunto de subsistemas cuyas funcionalidades especı́ficas quedan detalladas a continuación: Extracción automáticas de secuencias genéticas a partir de artı́culos cientı́ficos Esta funcionalidad será aplicable, en la primera versión del sistema, sólo a aquellos artı́culos que se encuentren en formato PDF de las revistas BioMed Central y Plos, en formato XML de PubMed Central y en texto plano. El sistema deberá analizar el documento proporcionado por el usuario e identificar en él las diferentes secuencias genéticas mencionadas. Además, el sistema deberá identificar, dentro de las diferentes secciones del documento (si el documento está estructurado en secciones o si el formato lo permite), en qué sección o secciones han sido identificadas las secuencias. Anotación automática de las secuencias extraı́das El sistema deberá, para las secuencias genéticas identificadas en un documento, anotar las mismas con los valores correspondientes al organismo u organismos a los que ésta pertenezca. Dada la complejidad de esta funcionalidad, y que la desambiguación de posibilidades deberá recaer en un experto humano, el sistema anotará cada secuencia con diferentes 44 CAPÍTULO 4. ANÁLISIS DEL SISTEMA posibilidades encontradas a las que asignará un valor de confianza. Generación automática de un ı́ndice de documentos de PubMed central que relacione los artı́culos cientı́ficos con las secuencias que contienen El sistema generará un ı́ndice a partir de una colección con todos los documentos de PubMed Central. Además, todos los documentos serán procesados para identificar las secuencias genéticas que contienen y se almacenará la relación entre cada documento indizado con las secuencias detectadas en él. Consulta del ı́ndice de artı́culos y secuencias El sistema permitirá diferentes tipos de consultas sobre el ı́ndice de artı́culos y secuencias: Búsqueda por texto: se recuperarán todos los documentos relacionados con la consulta introducida por el usuario en el sentido clásico de recuperación de información. Además, para cada documento recuperado, se mostrarán las secuencias genéticas identificadas en el mismo. Búsqueda por secuencia: se recuperarán todos los documentos en los que se haya identificado alguna secuencia genética relacionada con la consulta del usuario. Dichas secuencias concretas se mostrarán junto con el documento. Búsqueda por secuencia y texto: se recuperarán todos los documentos relacionados con la consulta textual del usuario y que contengan, además, secuencias relacionadas con la consulta de secuencia realizada. Las secuencias relacionadas con esta última consulta se mostrarán junto con los documentos 4.1.2.3 Caracterı́sticas del usuario De cara al uso del sistema se han distinguido dos tipos de perfiles de usuario: el administrador y los usuarios finales. Administrador La labor del administrador comienza con la instalación y configuración del sistema. Para esta labor deberá facilitar al sistema los parámetros 45 PROYECTO FIN DE CARRERA necesarios para el uso de las herramientas requeridas con las que el sistema interactúa –i.e BLAST, con su base de datos de secuencias asociada, y Nucleotide, en su formato relacional. También es tarea del administrador la recopilación de los artı́culos de PubMed Central con los que el sistema creará el ı́ndice de artı́culos y secuencias. Las tareas de mantenimiento son también responsabilidad del administrador del sistema, esto incluye la actualización de las herramientas y recursos utilizados por el sistema. Debido a las tareas necesarias para el administrador del sistema, es necesario que posea conocimientos sobre las herramientas que deberá utilizar, incluyendo sistemas gestores de bases de datos. Usuario final El usuario final para el que el sistema está concebido son profesionales que traten con artı́culos cientı́ficos prestando interés a las secuencias genéticas contenidas en los mismos. El interfaz de uso del sistema en cuanto a la extracción y anotación de secuencias genéticas requiere que dichos usuarios sean capaces de tratar con ficheros estructurados de datos en formato XML, mientras que el interfaz web para las consultas al ı́ndice de artı́culos y secuencias no requiere ningún conocimiento particular. 4.1.2.4 Restricciones Dependiendo del uso que se quiera dar al sistema se encontrarán más o menos necesidades a la hora de poder interactuar con el mismo. Respecto a la extracción y anotación de secuencias a partir de un artı́culo dado, será necesario disponer de una JVM instalada, ya que el núcleo del sistema se encuentra programado en JAVA. Para la anotación de secuencias será necesario disponer de la herramienta BLAST junto con una base de datos de secuencias para la misma, junto con la base de datos Nucleotide en formato relacional. El administrador también necesitará una JVM para la generación del ı́ndice de artı́culos y secuencias, a pesar que para las consultas realizadas sobre la misma, a través del interfaz web, no será necesario más que un navegador. 4.1.2.5 Suposiciones y dependencias Susposiciones Se supone que una vez establecidos, los requisitos del sistema serán definitivos. Cualquier cambio en los mismos se realizará conforma a un procedimiento controlado y documentado. Se supone que el administrador proporcionará como colección de 46 CAPÍTULO 4. ANÁLISIS DEL SISTEMA artı́culos cientı́ficos todos aquellos que componen PubMed Central, y que actualizará dicha colección periódicamente para mantener ası́ el ı́ndice actualizado. Se supone que la base de datos que se utilizará conjuntamente con la herramienta BLAST será consistente con la base de datos de Nucleotide en formato relacional. Dependencias El sistema es un producto cerrado en cuanto a la implementación se refiere. No obstante, el hecho de que utilice herramientas externas, como BLAST, puede requerir que el sistema deba ser revisado en caso de utilizar futuras versiones de dichas herramientas, con el objeto de garantizar su correcto funcionamiento. Por otro lado, el hecho de que uno de los usos del sistema sea la realización de consultas sobre un ı́ndice de artı́culos cientı́ficos contenidos en PubMed Central requiere que dicho ı́ndice se encuentre actualizado. 4.1.3 Requisitos Especı́ficos En este apartado se identifican los diferentes requisitos funcionales que deberá satisfacer el sistema. Todos los requisitos aquı́ expuestos son esenciales, y permiten la trazabilidad de los mismos durante las diferentes fases del ciclo de vida hasta las pruebas del sistema. 4.1.3.1 Requisitos de Interfaces Externos En este apartado se establecen los requisitos que definen la comunicación que todos los usuarios mantendrán con el sistema. Interfaz de Usuario Req#1: las consultas sobre el ı́ndice de secuencias se realizarán a través de un interfaz web. Req#2: la extracción de secuencias anotadas de un artı́culo se realizará mediante lı́nea de comandos. Req#3: la extracción de secuencias anotadas de un artı́culo se mostrará al usuario mediante un archivo XML. 47 PROYECTO FIN DE CARRERA Req#4: la generación del ı́ndice de artı́culos y secuencias se realizará mediante lı́nea de comandos. Interfaces Hardware Req#5: el sistema deberá funcionar en diferentes plataformas. Interfaces Software Req#6: el sistema deberá funcionar bajo diferentes sistemas operativos. Al menos Windows y Linux. Req#7: el sistema accederá a una base de datos en modelo relacional de Nucleotide. Req#8: BLAST. 4.1.3.1.1 Interfaces de Comunicación Re#q9: HTTP. 4.1.3.2 el sistema utilizará mediante invocación la herramienta el interfaz web del sistema requerirá el uso del protocolo Requisitos Funcionales Esta sección muestra aquellos requisitos que definen el comportamiento del sistema en lo referente a su funcionalidad. Es decir, mediante los siguientes requisitos es posible determinar todas las funcionalidades que el sistema estará comprometido a satisfacer. Para una mejor comprensión de los mismos, los requisitos pertenecientes a esta categorı́a se han dividido en XXX subconjuntos en función de los objetivos del sistema que engloba las funcionalidades que especifican. Recuperación y Anotación de Secuencias Req#10: el sistema permitirá tratar con documentos en formato PDF para artı́culos originales de las revistas BioMed Central y PLOS. Req#11: el sistema permitirá tratar con documentos en el formato XML especı́fico de PubMed Central. Req#12: el sistema permitirá tratar con documentos en texto plano. 48 CAPÍTULO 4. ANÁLISIS DEL SISTEMA Req#13: el sistema permitirá la extracción de las secuencias encontradas en un artı́culo cientı́fico concreto que se encuentre en alguno de los formatos aceptados. Req#14: el sistema permitirá la anotación, además de la ercuperación de secuencias, para un documento concreto. Se procporcionarán los organismos y genes encontrados utilizando BLAST y la base de datos Nucleotide, junto con un valor de confianza. Req#15: en el caso de la anotación de secuencias en documentos cuyo formato sea texto plano, se permitirá una menor fiabilidad de las anotaciones indicadas. Generación y Consulta de un Índice de Artı́culos y Secuencias Req#16: el sistema permitirá la generación de un ı́ndice de artı́culos y secuencias a partir de una colección de documentos en formato XML de PubMed Central. Req#17: el sistema permitirá consultar el ı́ndice mediante secuencias genéticas completas o parciales. Las secuencias se podrán combinar mediante los operadores lógicos AND y OR. Se deberán devolver las secuencias relacionadas con la consulta junto con los identificadores (PMCID) de los artı́culos a los que dichas secuencias pertenecen, y el contexto en el que aparecen las secuencias. Req#18: el sistema permitirá consultar el ı́ndice mediante texto libre. Se devolverán los documentos mediante sus identificadores (PMCID) cuyo contenido esté relacionado con la consulta, además de todas las secuencias genéticas recuperadas a partir de dicho artı́culo, conjuntamente con el contexto en el que aparecen en el texto. Al igual que en el requisito #req 14, se podrán combinar los términos de la consulta mediante los operadores lógicos AND y OR. Req#19: el sistema permitirá consultar el ı́ndice mediante secuencias genéticas parciales o completas y texto libre. Se devolverán todos los documentos relacionados con las secuencias y con el texto indicado. Sólo las secuencias relacionadas con las secuencias de consulta se mostrarán, junto con el contexto en el que aparecen. Cada consulta podrá contener cualquier combinación de términos de búsqueda combinados mediante los operadores AND y OR. 49 PROYECTO FIN DE CARRERA 4.1.3.3 Requisitos de Rendimiento En este apartado se especifican los requisitos cuantificables que determinarán si el funcionamiento del sistema es aceptable, desde el punto de vista del tiempo de ejecución y el consumo de recursos. Req#20: el sistema ejecutará en una máquina de perfil de usuario normal, de gama alta. Req#21: el tiempo que tarde el sistema en la extracción de secuencias a partir de un artı́culo no debe hacer esperar al usuario. Req#22: se permite que la anotación de secuencias tome un tiempo más largo, del orden de minutos. Req#23: se permite que la generación del ı́ndice de secuencias se ejecute en background durante horas. 4.1.3.4 Atributos del sistema Aquı́ se indican las restricciones impuestas por los estándares, plataformas hardware y software, etc. En esta sección se exponen los atributos de calidad del sistema. Debido a los diferentes usos que se pueden dar al sistema y que existen diferentes tipos de usuarios contemplados, será necesario garantizar que sólo los usuarios autorizados tengan acceso a determinadas funcionalidades. Seguridad Todas las bases de datos utilizadas por el sistema sólo deben de poder ser modificadas por el administrador. Para conseguir esta tarea, se han creado usuarios especı́ficos en las mismas con permisos de modificación. Además, el acceso a dichas bases de datos está restringido a la red local. De forma similar, el ı́ndice de artı́culos y secuencias sólo puede ser modificado por el administrador. Dado que el almacenamiento del ı́ndice se realiza sobre el sistema de ficheros del servidor, será necesario iniciar sesión en dicho servidor con un usuario que disponga de permisos para la modificación de los archivos que componen el ı́ndice. 50 CAPÍTULO 4. ANÁLISIS DEL SISTEMA Fiabilidad En cuanto a la fiabilidad del sistema, es posible que falle en las funcionalidades destinadas a la extracción y anotación de secuencias para un artı́culo dado, pero dichos fallos no pueden en ningún caso provocar que se detenga la extracción de secuencias de la colección de artı́culos durante el proceso de generación del ı́ndice de artı́culos y secuencias. Además, ninguna consulta a dicho ı́ndice puede provocar que el sistema deje de servir otras peticiones de consulta. Mantenimiento Además de las tareas de mantenimiento especı́ficas del administrador en lo referente a mantener actualizadas las bases de datos y la colección de artı́culos que componen el ı́ndice de artı́culos y secuencias, el diseño del sistema deberá permitir la fácil modificación del mismo para la inclusión de otras funcionalidades futuras. Portabilidad El sistema deberá ser portable entre máquinas de diferentes plataformas siempre que se encuentre disponible una implementación de la JVM y de la herramienta BLAST. 4.2 CASOS DE USO DEL SISTEMA Mediante los casos de uso se especifican los requisitos funcionales del sistema desde el punto de vista de su uso por parte del usuario final. Se detallan las operaciones que pueden realizar dichos usuarios y la respuesta del sistema para satisfacerlas. En primer lugar se describirán los actores del sistema, para más adelante presentar de forma esquemática sus posibles interacciones con el sistema (casos de uso). Por último, se detallará el comportamiento del sistema para cada uno de los casos de uso presentados. 4.2.1 Actores Además de los actores principales del sistema, que son el administrador y el usuario final, existe un tipo especial de actores, denominados “de apoyo” que a pesar de no ser humanos, proporcionan un servicio al sistema. Estos actores de apoyo serán las herramientas BLAST, Nucleotide y el ı́ndice de Lucene. 51 PROYECTO FIN DE CARRERA 4.2.1.1 Actores Principales Administrador: El administrador será el encargado de instalar, configurar y mantener el sistema. Para la instalación y configuración deberá considerar la correcta instalación del software de apoyo necesario –e.g JRE, servidor web, BLAST, Nucleotide, LUCENE. Respecto a la creación y mantenimiento del ı́ndice de artı́culos, será el responsable de proporcionar los ficheros XML que componen el ı́ndice, ası́ como de su actualización. Usuario Final: Se entiende como usuario final al usuario que obtiene servicios del sistema, ya sea para la recuperación y anotación de secuencias a partir de un documento especı́fico, como para la consulta del ı́ndice de artı́culos y secuencias. 4.2.1.2 Actores de Apoyo BLAST: El servicio proporcionado por la herramienta BLAST sobre la base de datos NT, será la identificación de información relativa a las secuencias proporcionadas. En particular, se espera recuperar, para cada secuencia proporcionada, la posición del alineamiento y el identificador del documento que describe la secuencia genética en la que dicho alineamiento ha sido detectado. Nucleotide: La base de datos Nucleotide, en su formato relacional, permite la obtención de información adicional sobre los alineamientos identificados para las secuencias recuperadas en el contenido textual de los artı́culos. Concretamente, se espera recuperar el nombre del organismo vinculado al contenido genético detectado en todos los casos, y en caso de existir información relativa a genes en la entrada, se obtendrán los nombres de genes vinculados a la región especı́fica en la que se ha detectado un alineamiento. Índice de artı́culos y secuencias: El ı́ndice de artı́culos y secuencias está compuesto por una capa software que permite la gestión de un ı́ndice de Lucene –i.e creación, inserción, modificación y consulta. 4.2.2 Diagrama de Casos de Uso El diagrama de casos de uso recoge de forma gráfica las interacciones entre el sistema y los diferentes actores. Supone una gran herramienta para la comprensión conceptual del funcionamiento global del sistema en lo que a las relaciones con los actores se refiere, quedando ası́ una excelente impresión 52 CAPÍTULO 4. ANÁLISIS DEL SISTEMA conceptual de los lı́mites del sistema. A continuación se presenta el diagrama de casos de uso para el sistema. Sistema Anotar Secuencias de Artículo BLAST <<include>> Extraer Secuencias de Texto <<include>> Administrador Nucleotide Generar Índice Consultar índice por texto y secuencias Consultar índice por texto y secuencias usuario Consultar índice por texto y secuencias Figura 4.1: Diagrama de casos de uso del sistema 53 Índice de artículos y secuencias PROYECTO FIN DE CARRERA 4.2.3 4.2.3.1 Casos de Uso Anotar Secuencias de Artı́culo Objetivo: Dado un artı́culo, obtener las secuencias contenidas en él anotadas mediante valores de confianza con los posibles organismos y genes de los que forma parte. Nivel: Primario. Tipo: Esencial. Actor Principal: Usuario final. Actores Secundarios: BLAST, Nucleotide Precondiciones: – Garantı́as de éxito: Se genera un fichero XML que contiene las secuencias anotadas. Referencias: Req#2, Req#3, Req#4, Req#7, Req#8, Req#10, Req#11, Req#12, Req#13, Req#14, Req#15, Req#21, Req#22 Escenario principal: 1. El usuario invoca al sistema proporcionando un artı́culo cientı́fico, indicando la ruta al fichero donde almacenar los resultados. 2. El sistema identifica las secuencias contenidas en el texto del artı́culo. 3. El sistema muestra por pantalla las secuencias detectadas. 4. El sistema utiliza BLAST para identificar alineamientos respecto a cada secuencia detectada. 5. El sistema obtiene información adicional para los alineamientos utilizando la base de datos Nucleotide en formato relacional. 6. El sistema anota las secuencias detectadas. 7. El sistema genera un documento XML con las secuencias anotadas en la ruta especificada por el usuario. Escenarios alternativos: 1. El formato del archivo proporcionado no es compatible. 1.1. Se muestra un error indicando el problema. 1.2. Se finaliza el caso de uso. 2. No se detecta ninguna secuencia. 54 CAPÍTULO 4. ANÁLISIS DEL SISTEMA 2.1. Se genera un fichero de resultados vacı́o. 2.2. Se finaliza el caso de uso. 3. BLAST no genera ningún resultado 3.1. El fichero de resultados no contendrá anotaciones. 3.2. Se finaliza el caso de uso. 4.2.3.2 Extraer Secuencias del Texto Objetivo: a partir de un texto se extraen las secuencias genéticas contenidas en él. Nivel: Primario. Tipo: Esencial. Actor Principal: – Actores Secundarios: – Precondiciones: – Garantı́as de éxito: Se devuelven las secuencias genéticas recuperadas. Referencias: , Req#21, Req#22 Escenario principal: 1. El sistema recibe un texto. 2. El sistema identifica las secuencias contenidas en el texto. 3. El sistema devuelve todas las secuencias encontradas. Escenarios alternativos: – 4.2.3.3 Generar Índice Objetivo: Se genera un ı́ndice de artı́culos y secuencias que contiene el texto de cada uno de los artı́culos junto con las secuencias contenidas en su texto. Nivel: Primario. Tipo: Esencial. Actor Principal: Administrador. Actores Secundarios: Índice de artı́culos y secuencias Precondiciones: Se ha proporcionado una colección de artı́culos en el formato XML de PubMed Central. Garantı́as de éxito: Se genera el ı́ndice de artı́culos y secuencias. 55 PROYECTO FIN DE CARRERA Referencias: , Req#16, Req#23 Escenario principal: 1. El administrador invoca la herramienta de generación del ı́ndice indicando la ruta al directorio que contiene los artı́culos en formato XML de PubMed Central. 2. El sistema indiza los artı́culos, uno a uno. 3. El sistema finaliza indicando que la operación ha terminado satisfactoriamente. Escenarios alternativos: 2. Un artı́culo no se encuentra en el formato apropiado, o se produce un error durante su lectura. 2.1. El sistema genera una referencia a dicho artı́culo en un fichero de errores, y pasa al siguiente artı́culo. 4.2.3.4 Consultar Índice por Texto Objetivo: Recuperar, para aquellos documentos cuyo contenido textual esté relacionado con la consulta indicada, el identificador del documento, un enlace al documento en PubMed Central, y las secuencias genéticas recuperadas en dicho documento. Nivel: Primario. Tipo: Esencial. Actor Principal: Usuario final. Actores Secundarios: Índice de artı́culos y secuencias Precondiciones: – Garantı́as de éxito: Se devuelven los artı́culos y sus secuencias. Referencias: , Req#18 Escenario principal: 1. El usuario envı́a una consulta al sistema, a través del interfaz web. 2. El sistema realiza la búsqueda para recuperar aquellos documentos relacionados con la consulta, ordenados por relevancia respecto de la consulta en orden decreciente. 3. El sistema extrae del ı́ndice, para cada documento recuperado, las secuencias con tenidas en él y el identificador (PMCID) del documento. 56 CAPÍTULO 4. ANÁLISIS DEL SISTEMA 4. El sistema utilizará el PMCID del documento para generar el enlace a PubMed Central. 5. El sistema muestra los datos. Escenarios alternativos: – 4.2.3.5 Consultar Índice por Secuencias Objetivo: Recuperar los documentos almacenados en el ı́ndice de artı́culos y secuencias para los que se hayan detectado secuencias relacionadas con la consulta especificada por el usuario. Nivel: Primario. Tipo: Esencial. Actor Principal: Usuario final. Actores Secundarios: Índice de artı́culos y secuencias Precondiciones: – Garantı́as de éxito: se devuelven los documentos que contienen alguna secuencia relacionada con la consulta. Además, se mostrarán el enlace a PubMed Central y todas las secuencias contenidas en el documento que hayan provocado que el documento forme parte del conjunto de documentos recuperados. Referencias: Req#17 Escenario principal: 1. El usuario envı́a una consulta a través del interfaz web. 2. El sistema realiza la búsqueda para recuperar aquellos documentos relacionados con la consulta, ordenados por relevancia respecto de la consulta en orden decreciente. Sólo se busca en las secuencias recuperadas a partir del documento. 3. El sistema extrae del ı́ndice, para cada documento recuperado, las secuencias con tenidas en él y el identificador (PMCID) del documento. 4. El sistema utilizará el PMCID del documento para generar el enlace a PubMed Central. 5. El sistema muestra los datos. En el caso de las secuencias genéticas, muestra sólo las que encajan con la consulta. Escenarios alternativos: – 57 PROYECTO FIN DE CARRERA 4.2.3.6 Consultar Índice por Texto y Secuencias Objetivo: Recuperar los documentos almacenados en el ı́ndice de artı́culos y secuencias para los que se hayan detectado secuencias relacionadas con la consulta de secuencias especificada por el usuario, pero sólo para aquellos documentos cuyo contenido textual esté relacionado con la consulta textual. Nivel: Primario. Tipo: Esencial. Actor Principal: Usuario final. Actores Secundarios: Índice de artı́culos y secuencias Precondiciones: – Garantı́as de éxito: Se devuelven los documentos que contienen alguna secuencia relacionada con la consulta de secuencias, y cuyo texto esté relacionado con la consulta textual. Se mostrarán el enlace a PubMed Central y todas las secuencias contenidas en el documento que hayan provocado que el documento forme parte del conjunto recuperado. Referencias: Req#19 Escenario principal: 1. El usuario envı́a dos consultas: para la recuperación de secuencias y otra para la recuperación de texto, a través del interfaz web. 2. El sistema realiza la búsqueda para recuperar aquellos documentos relacionados con la consulta, ordenados por relevancia respecto de la consulta en orden decreciente. 3. El sistema extrae del ı́ndice, para cada documento recuperado, las secuencias con tenidas en él y el identificador (PMCID) del documento. 4. El sistema utilizará el PMCID del documento para generar el enlace a PubMed Central. 5. El sistema muestra los datos. En el caso de las secuencias genéticas, muestra sólo las que encajan con la consulta. Escenarios alternativos: – 4.2.4 Diagramas de Secuencia del Sistema Esta sección presenta los diagramas de secuencia del sistema, asociados a los diferentes casos de uso. Nótese que en estos diagramas, el sistema es visto como una caja negra, de forma que no se detallan las operaciones necesarias para la consecución de los casos de uso desde una perspectiva interna, sino que se muestran las interacciones necesarias entre el sistema y los diferentes actores para la consecución de los diferentes casos de uso. 58 CAPÍTULO 4. ANÁLISIS DEL SISTEMA 4.2.4.1 Anotar Secuencias de Artı́culo :Usuario BLAST :Sistema Nucleotide anotarArtículo(articulo) recuperar secuencias(articulo) detectarAlineamientos(sec) obtenerInformacion(id) [* más secuencias] XML resultados Figura 4.2: Diagrama de secuencia para el caso de uso “Anotar Secuencias de Artı́culo” 4.2.4.2 Generar Índice de Artı́culos y Secuencias :Administrador :Sistema Índice generarIndice(ruta) crearIndice() añadirDocumento(doc) [*más docuemntos] Figura 4.3: Diagrama de secuencia para el caso de uso “Generar Índice de artı́culos y secuencias” 59 PROYECTO FIN DE CARRERA 4.2.4.3 Consultar Índice por Texto :Sistema :Administrador Índice consultarPorTexto(query) buscarTxt(query) lista de documentos obtenerInfoDoc(doc) obtenerSecuencias(doc) [*más documentos] lista de docs y secuencias Figura 4.4: Diagrama de secuencia para el caso de uso “Consultar ı́ndice por texto” 4.2.4.4 Consultar Índice por Secuencias :Administrador :Sistema Índice consultarPorSecuencias(query) buscarSeq(query) lista de documentos obtenerInfoDoc(doc) obtenerSecuencias(doc) [*más documentos] lista de docs y secuencias Figura 4.5: Diagrama de secuencia para el caso de uso “Consultar ı́ndice por secuencias” 60 CAPÍTULO 4. ANÁLISIS DEL SISTEMA 4.2.4.5 Consultar Índice por Secuencias :Administrador Índice :Sistema consultarTxtSeq(query1, query2) buscarTxt(query1) buscarSeq(query2) [*más documentos] lista de documentos obtenerInfoDoc(doc) obtenerSecuencias(doc) lista de docs y secuencias Figura 4.6: Diagrama de secuencia para el caso de uso “Consultar ı́ndice por texto y secuencias” 4.3 Contratos de las Operaciones del Sistema A continuación se detalla la información referente a las operaciones del sistema que aparecen en los diagramas de secuencia. Estas operaciones muestran una visión general del comportamiento interno del sistema para satisfacer los diferentes casos de uso. 4.3.1 Contrato CO1: anotarArticulo Operación: anotarArticulo(articulo) Responsabilidades: El sistema inicia el proceso para la extracción de secuencias y anotación de las mismas a partir de un artı́culo. Precondiciones: Ninguna. PostCondiciones: El sistema creó un fichero XML cuyo contenido son las secuencias anotadas presentes en articulo. Referencias cruzadas: Caso de uso Extraer secuencias de Texto Salidas: un fichero XML con las secuencias anotadas. Excepciones: Si articulo no se encuentra en un formato apropiado, el sistema mostrará un error. 61 PROYECTO FIN DE CARRERA 4.3.2 Contrato CO2: recuperarSecuencias Operación: recuperarSecuencias(articulo) Responsabilidades: El sistema identifica las secuencias genéticas contenidas en el texto de articulo. Precondiciones: Ninguna. PostCondiciones: Se extrajeron las secuencias genéticas contenidas en artı́culo junto con una referencia a las secciones donde fueron identificadas. Referencias cruzadas: Caso de uso Extraer secuencias de Texto Salidas: Una lista con las secuencias extraı́das. Excepciones: Ninguna. 4.3.3 Contrato CO3: detectarAlineamientos Operación: detectarAlineamientos(sec) Responsabilidades: El sistema utiliza la herramienta BLAST para identificar los mejores alineamientos de la secuencia sec con entradas de la base de datos de secuencias. Precondiciones: Ninguna. PostCondiciones: El sistema encontró alineamientos para la secuencia sec. Referencias cruzadas: Caso de uso Extraer secuencias de Texto Salidas: los identificadores de las entradas de la base de datos de secuencias para los que la herramienta BLAST detectó un alineamiento, conjuntamente con la posición dentro de la entrada donde se produjo el alineamiento sec. Excepciones: Ninguna. 4.3.4 Contrato CO4: obtenerInformacion Operación: obtenerInformacion(id, pos) Responsabilidades: El sistema obtiene de la base de datos Nucleotide la información de organismo y genes asociados a un alineamiento producido para un documento, y que está definido por un identificador id y una posición dentro del documento pos Precondiciones: Ninguna. PostCondiciones: El sistema recuperó la información sobre organismo y genes asociada al alineamiento. Referencias cruzadas: Caso de uso Extraer secuencias de Texto 62 CAPÍTULO 4. ANÁLISIS DEL SISTEMA Salidas: El nombre de organismo y una lista con los nombres de los genes. Excepciones: Ninguna. 4.3.5 Contrato CO5: anotarArticulo Operación: anotarArticulo(articulo) Responsabilidades: El sistema inicia el proceso para la extracción de secuencias y anotación de las mismas a partir de un artı́culo. Precondiciones: Ninguna. PostCondiciones: El sistema creó un fichero XML cuyo contenido son las secuencias anotadas presentes en articulo. Referencias cruzadas: Caso de uso Extraer secuencias de Texto Salidas: un fichero XML con las secuencias anotadas. Excepciones: Si articulo no se encuentra en un formato apropiado, el sistema mostrará un error. 4.3.6 Contrato CO6: generarIndice Operación: generarIndice(ruta) Responsabilidades: El sistema genera un ı́ndice de artı́culos y secuencias para todos los artı́culos de PubMed Central. Precondiciones: Se proporciona una ruta a un directorio que contiene todos los artı́culos de PubMed Central. PostCondiciones: Se creó el ı́ndice de artı́culos y secuencias. Referencias cruzadas: Caso de uso Generar Índice Salidas: un fichero XML con las secuencias anotadas. Excepciones: Si articulo no se encuentra en un formato apropiado, el sistema mostrará un error. 4.3.7 Contrato CO6: crearIndice Operación: generarIndice() Responsabilidades: El sistema genera un ı́ndice vacı́o utilizando la API de Lucene. Precondiciones: Ninguna. PostCondiciones: se creó el ı́ndice vacı́o de artı́culos y secuencias. Referencias cruzadas: Caso de uso Generar Índice Salidas: Ninguna. 63 PROYECTO FIN DE CARRERA Excepciones: Ninguna. 4.3.8 Contrato CO7: crearIndice Operación: añadirDocumento(doc) Responsabilidades: El sistema introduce el documento doc en el ı́ndice. Precondiciones: Ninguna. PostCondiciones: se añadió el documento doc al ı́ndice de artı́culos y secuencias junto con las secuencias detectadas en dicho documento. Referencias cruzadas: Caso de uso Generar Índice Salidas: Ninguna. Excepciones: Ninguna. 4.3.9 Contrato CO8: consultarPorTexto Operación: consultarPorTexto(query) Responsabilidades: El sistema realizará una búsqueda utilizando la consulta query en el ı́ndice. Precondiciones: La consulta query es válida según la sintaxis de consultas de Lucene. PostCondiciones: Se recuperó una lista con los documentos relevantes a la consulta, considerando sólo las secuencias contenidas en cada documento, ordenada por relevancia. Referencias cruzadas: Caso de uso Consultar Índice por Texto Salidas: Lista de documentos almacenados en el ı́ndice ordenados por relevancia respecto de la consulta query. Excepciones: Si la consulta query no es válida según la sintaxis de Lucene, se mostrará un error. 4.3.10 Contrato CO8: buscarTxt Operación: buscarTxt(query) Responsabilidades: el sistema busca la consulta query en el contenido textual de los documentos del ı́ndice. Precondiciones: Ninguna. PostCondiciones: Se recuperó una lista con los identificadores de documentos relevantes a la consulta, ordenada por relevancia. Referencias cruzadas: Caso de uso Consultar Índice por Texto 64 CAPÍTULO 4. ANÁLISIS DEL SISTEMA Salidas: Lista de identificadores documentos almacenados en el ı́ndice ordenados por relevancia respecto de la consulta query. Excepciones: Ninguna. 4.3.11 Contrato CO9: obtenerInfoDoc Operación: obtenerInfoDoc(doc) Responsabilidades: El sistema obtiene información sobre el tı́tulo y el identificador de PubMed Central para el documento cuyo identificador dentro del ı́ndice de artı́culos y secuencias es doc. Precondiciones: Ninguna. PostCondiciones: Se recuperaron el tı́tulo y el identificador de PubMed Central del documento identificado como doc dentro del ı́ndice de artı́culos y secuencias. Referencias cruzadas: Casos de uso Consultar Índice por Texto, Consultar Índice por Secuencias y Consultar Índice por Texto y Secuencias Salidas: Tı́tulo e identificador de PubMed Central para el documento cuyo identificador es doc en el ı́ndice de artı́culos y secuencias. Excepciones: Ninguna. 4.3.12 Contrato C10: obtenerSecuencias Operación: obtenerSecuencias(doc) Responsabilidades: El sistema obtiene información sobre las secuencias genéticas asociadas para el documento cuyo identificador dentro del ı́ndice de artı́culos y secuencias es doc. Precondiciones: Ninguna. PostCondiciones: Se recuperaron las secuencias asociadas al documento identificado como doc dentro del ı́ndice de artı́culos y secuencias. Referencias cruzadas: Casos de uso Consultar Índice por Texto, Consultar Índice por Secuencias y Consultar Índice por Texto y Secuencias Salidas: Secuencias extraı́das por el sistema del documento cuyo identificador es doc en el ı́ndice de artı́culos y secuencias. Excepciones: Ninguna. 4.3.13 Contrato C11: consultarPorSecuencia Operación: consultarPorSecuencia(query) Responsabilidades: El sistema realizará una búsqueda utilizando la consulta query en el ı́ndice. 65 PROYECTO FIN DE CARRERA Precondiciones: La consulta query es válida según la sintaxis de consultas de Lucene. PostCondiciones: Se recuperó una lista con los documentos relevantes a la consulta, considerando sólo las secuencias contenidas en cada documento, ordenada por relevancia. Referencias cruzadas: Caso de uso Consultar Índice por Secuencias Salidas: Lista de documentos almacenados en el ı́ndice ordenados por relevancia respecto de la consulta query, conjuntamente con las secuencias genéticas contenidas en dicho documento que hayan provocado que dicho documento fuese recuperado. Excepciones: Si la consulta query no es válida según la sintaxis de Lucene, se mostrará un error. 4.3.14 Contrato C12: consultarTxtSeq Operación: consultarTxtSeq(query1, query2) Responsabilidades: El sistema realizará una búsqueda utilizando la consulta query1 sobre el contenido textual de los documentos y la consulta query2 sobre las secuencias de los socumentos en el ı́ndice. Precondiciones: Las consultas query1 y query2 son válidas según la sintaxis de consultas de Lucene. PostCondiciones: Se recuperó una lista con los documentos relevantes simultáneamente a las consultas query1 y query2, considerando tanto el contenido textual del documento para consulta query1 como las secuencias asociadas a cada documento para la consulta query2, ordenada por relevancia. Referencias cruzadas: Caso de uso Consultar Índice por Texto y Secuencias Salidas: Lista de documentos almacenados en el ı́ndice ordenados por relevancia respecto de la consulta query, conjuntamente con las secuencias genéticas contenidas en dicho documento que hayan provocado que dicho documento fuese recuperado. Excepciones: Si alguna de las consultas query1 o query2 no son válidas según la sintaxis de consultas de Lucene, se mostrará un error. 66 Capı́tulo 5 DISEÑO E IMPLEMENTACIÓN DEL SISTEMA 5.1 Introducción En este capı́tulo se muestra el diseño y la implementación del sistema utilizando los diagramas tı́picos de UML: diagramas de interacción entre objetos y diagramas de clases. Por motivos de simplicidad, y dada la particular estructura del sistema, éste se presentará separado en una serie de módulos intercomunicados entre sı́ para cumplir con los objetivos del sistema. En primer lugar, se discutirá esta estructuración en los diferentes módulos describiendo las responsabilidades de los mismos y los mecanismos de comunicación a utilizar para relacionarlos. Con este propósito se incluirá un “Diagrama de Módulos” que si bien puede no corresponderse exactamente con la notación de UML, se incluye con el objetivo de mejorar la comprensión del sistema. A continuación, se detallará la estructura interna de cada uno de los módulos explicando las clases más relevantes de cada uno. Con el objetivo de facilitar la lectura y comprensión del diseño del sistema, se omitirán algunas clases poco relevantes. 5.2 Módulos del Sistema El diseño del sistema supone los siguientes módulos: • Document: contendrá una representación del documento homogénea de cara al resto del sistema. Esta representación supone una estructura en forma de árbol de secciones que representa un artı́culo cientı́fico. Además, este módulo será el responsable de tratar con las búsquedas de términos sobre el contenido textual del documento para 67 PROYECTO FIN DE CARRERA la identificación de nombres de organismos y genes dados dentro del mismo. • Recognition: permitirá la detección de secuencias a partir de un texto dado. • BLAST: responsable de realizar la búsqueda de alineamientos utilizando secuencias de ácidos nucleicos dadas y la herramienta BLAST sobre la base de datos de secuencias especificada. • NCBI: el módulo NCBI se responsabiliza de recuperar la información detallada contenida en la base de datos “Nucleotide” a partir de las entradas ofrecidas por la herramienta BLAST. • ResultManager: se trata de un módulo de control que permite organizar la información acumulada durante las diferentes fases del proceso de reconocimiento y anotación de secuencias. Este módulo es responsable de capturar los resultados generados durante las diferentes fases y relacionarlos entre sı́ para ofrecer una salida coherente. • Index: el módulo Index engloba las operaciones permitidas –i.e. creación, mantenimiento y consulta– sobre el ı́ndice de artı́culos y secuencias. Document Recognition BLAST NCBI ResultManagement Index Figura 5.1: Módulos del Sistema Como puede observarse en la figura ?? las dos lı́neas de ejecución principales comparten los módulos Document y Recognition. La lı́nea superior ofrece como resultado las secuencias anotadas para un documento de entrada mientras que la lı́nea inferior permite la inclusión de un artı́culo y las secuencias reconocidas en el contenido textual del mismo en el ı́ndice de artı́culos y secuencias. Las consultas sobre dicho ı́ndice, que también son casos de uso del sistema, utilizan exclusivamente el módulo Index. La comunicación entre los módulos se ha realizado utilizando el “Patrón Observador” (Larman, 2002). Utilizando este patrón y aplicándolo a la estructuración en módulos mencionada, cada módulo permitirá, a través de 68 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA una clase que lo representa, que otros módulos se suscriban a ellos. De esta forma, utilizando el mecanismo de subscripción, es posible hacer que los módulos se observen –escuchen– unos a otros en el orden deseado. Si bien algunas combinaciones en esta ordenación carecerı́an de sentido y el sistema no funcionarı́a utilizándolas, este mecanismo permite una mayor flexibilidad ofreciendo varias ventajas, no sólamente sobre el sistema actual sino también sobre posibles evoluciones futuras. A continuación se describen las principales ventajas: • Inclusión de nuevas fases: debido al poco acoplamiento entre los diferentes módulos, se puede colocar una fase intermedia que realice operaciones adicionales sobre los resultados intermedios. Por ejemplo, se podrı́a incorporar una nueva etapa de supervisión humana para filtrar o mejorar dichos resultados intermedios. • Reutilización: si bien existen dependencias entre fases, respetando las restricciones sobre la entrada y salida de cada módulo, éste puede ser reutilizado para otras tareas. Además, esta reutilización se puede dar también sobre varios módulos sucesivos utilizándolos conjuntamente. • Mantenimiento: la división en responsabilidades hace que sea más fácil la localización y solución de posibles problemas de implementación del sistema. • Experimentación: si se desean probar nuevos enfoques para cualquiera de las fases, sólo es necesario implementar este enfoque por separado y realizar los experimentos utilizando la nueva composición. También es posible realizar ejecuciones paralelas utilizando ramificaciones y ası́ poder contrastar resultados. La figura 5.2 muestra un diagrama de secuencia que ilustra cómo se realiza la creación y comunicación de los módulos a partir de un programa principal que, en este caso, se corresponde con el caso de uso relativo a la extracción y anotación de secuencias para un artı́culo dado en formato PDF. Como puede observarse, el programa principal simplemente se encarga de pedir la transformación del fichero de entrada en un objeto de la clase :Document, para después crear y comunicar los diferentes módulos del sistema. Una vez establecida la comunicación sólo será necesario iniciar el proceso para que se lleve a cabo la ejecución. Los módulos irán generando los eventos necesarios, que viajarán entre entre ellos a través de los canales de comunicación establecidos, generándose en último término los resultados deseados. Como puede observarse en la figura (5.2) el concepto de módulo es una abstracción de diseño sobre el modelo orientado a objetos que implementará realmente el sistema. Para lograr esta abstracción, cada módulo contará 69 PROYECTO FIN DE CARRERA :PrimerXtractor doc:Document rm:RecognitionManager rfm:RuleFilteringManager :PDFExtractor bw:BlastWrapper nw:NCBIWrapper rm:ResultManager create(path) readWithTemplates(path) create() doc create() create() create() setDocument(doc) create() create(rm) addListener(rm) addListener(rfm) addListener(bw) addListener(nw) addListener(rm) flush() Figura 5.2: Diagrama de Interacción entre Objetos: establecimiento de la comunicación en PrimerXTractor. con un objeto que desempeña el rol de representante, que son los objetos visibles en el diagrama. Este representante se encargará en el momento de su creación de crear a su vez los componentes –i.e. objetos– internos del módulo necesarios para satisfacer las peticiones entrantes, que llegarán al representante en forma de eventos provenientes de otros módulos. Además, es este mismo objeto el encargado de gestionar las suscripciones que otros módulos realicen sobre su módulo representado. 5.3 Mecanismo de Comunicación Como ya ha sido mencionado, se ha utilizado un patrón observador para realizar la comunicación entre los diferentes módulos. Cada representante es una subclase de la superclase :Sender y, a la vez, implementa el interfaz :Listener. Un objeto :Sender, o emisor, permite que se suscriban a él cualquier número de objetos :Listener, redirigiendo a todos ellos los mensajes o eventos salientes. A continuación se muestra utilizando un diagrama de clases el diseño de este mecanismo utilizando únicamente las clases relevantes para el mismo. A partir del diagrama mostrado en la figura 5.3 puede observarse cómo los representantes de los módulos se relacionan entre sı́ a través de la relación existente entre la superclase :Sender y el interfaz :Listener. También se observan ciertas dependencias directas entre algunas de las clases. Esto se debe a que para la realización de determinadas operaciones simplifica la 70 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA Figura 5.3: Comunicación del sistema: Diagrama de Clases. labor tener acceso directo entre módulos, en concreto, para indicar opciones de configuración y realizar peticiones de operaciones adicionales sobre los resultados generales de los mismos. Son estas dependencias las que hacen que se trate de un sistema global conjunto con ventajas de flexibilidad en lugar de varios sistemas completamente independientes. 5.4 Módulo Document La principal misión de este módulo será permitir una representación homogénea de los diferentes tipos de documentos que podrán ser utilizados como entrada para el sistema. Atendiendo al planteamiento del problema, el sistema deberá aceptar artı́culos cientı́ficos en formatos PDF y XML además de en texto plano. Para los formatos PDF y XML, es necesario conservar la estructuración jerárquica en secciones de los manuscritos. Además, este módulo agrupa las clases necesarias para poder realizar las operaciones necesarias sobre los documentos. A continuación se muestran los diagramas de interacción correspondientes a las operaciones de envı́o del documento y de búsqueda dentro del documento. 5.4.1 Diagramas de interacción entre objetos A continuación se muestra el diagrama de interacción entre objetos para el envı́o de documentos del sistema hacia módulos observadores. Por motivos de simplicidad, se ha omitido el proceso de envı́o de mensajes ya descrito en la sección anterior, de forma que los eventos llegan directamente al 71 PROYECTO FIN DE CARRERA método onEvent del objeto destino. Los eventos mostrados en mayúsculas se corresponden con mensajes de control. :Document flush() :Section :Row w:Word :Listener onEvent( BEGIN DOCUMENT) flush() onEvent( BEGIN SECTION ) onEvent( BEGIN TITLE ) flush() onEvent( BEGIN ROW ) flush() onEvent( w ) [* más palabras] onEvent( END ROW ) [* más filas del título] onEvent( END TITLE ) onEvent( w ) onEvent( BEGIN CONTENT ) flush() onEvent( BEGIN ROW ) flush() onEvent( w ) [* más palabras] onEvent( END ROW ) [* más secciones] [* más filas del contenido] onEvent( END DOCUMENT) Figura 5.4: Diagrama de Interacción entre Objetos: procesamiento de un documento 5.4.2 Diagrama de Clases En esta sección se describen las clases más importantes del módulo Document, presentadas en el diagrama de la figura 5.5. Un documento está formado por una sucesión de secciones, que a su vez pueden contener más secciones, formando una estructura de árbol. Cada sección contiene un tı́tulo y un contenido, ambos formados por lı́neas de texto que, en último término, están compuestas por palabras. Además, se dispone de un sistema de búsqueda basado en autómatas finitos deterministas para permitir realizar búsquedas en el texto contenido en el documento. Por razones de flexibilidad, se ha decidido abstraer las operaciones necesarias del buscador del documento en un interfaz, de forma que el buscador basado en autómatas será una implementación de dicho interfaz. 72 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA Figura 5.5: Diagrama de Clases: módulo Document 5.4.3 Detalle de las clases más significativas En este apartado se incluye la figura 5.6 que muestra las operaciones y atributos de las clases más significativas de este módulo. Como se puede observar, se incluyen los componentes estructurales necesarios en los atributos de las clases para formar la estructura jerárquica del documento explicada anteriormente. Además, Se incluyen operaciones de búsqueda sobre el documento. Más en detalle sobre las operaciones de búsqueda, se permite un modo de búsqueda inmediato y otro aplazado. La motivación de incluir el modo aplazado se debe a motivos de eficiencia, ya que se permitirá realizar un conjunto de búsqueda en una única iteración sobre el contenido textual del documento. 5.5 Módulo Recognition Este es el módulo encargado de la detección de secuencias. Una vez creada la estructura de objetos y establecida la comunicación, el módulo quedará “a la espera” de mensajes –de ahı́ que se nombren frecuentemente a estos mensajes como eventos. De todos los mensajes posibles, el módulo sólo considerará los mensajes que sean palabras para alimentar con ellos los detectores. También se considerarán algunos mensajes de control, como los que indican cambios de sección, ya que no es posible que una secuencia se encuentre contenida entre dos secciones. 73 PROYECTO FIN DE CARRERA Figura 5.6: Detalle de las Clases: módulo Document Respecto a la comunicación, todos los mensajes que lleguen al módulo serán a su vez retransmitidos a los observadores, junto con los mensajes generados por el módulo de reconocimiento, aportando ası́ nuevo contenido al flujo de eventos. A nivel interno, el diseño de este módulo supone dos fases para la detección de secuencias genéticas. En una primera fase se utilizarán una serie de reconocedores en cascada para determinar palabras del texto que forman secuencias genéticas. El uso de varios reconocedores en cascada supondrá que cada reconocedor estará diseñado para reconocer secuencias con diferentes niveles de confianza. El primer reconocedor será siempre el más restrictivo mientras que el último será el más ambiguo, en el sentido de que se tendrá menos seguridad de que la cadena de palabras de entrada reconocida como una secuencia genética será efectivamente una secuencia 74 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA genética. En una segunda etapa se filtrarán las secuencias reconocidas para rechazar aquellas que no sean secuencias genéticas, sino que estén formadas por palabras del lenguaje natural. Además, durante este proceso de filtrado se permitirá la modificación de las secuencias detectadas por los reconocedores de la primera fase, ya que éstas pueden contener ruido o ser la agrupación de varias secuencias. La implementación de esta última fase se realizará mendiante un sistema experto que cuente con una base de reglas heurı́sticas especı́ficas para el filtrado de las secuencias provenientes de los tres recomendadores especı́ficos utilizados en la primera fase. Los reconocedores y las reglas especı́ficas se encuentran detalladas en el Apéndice B Las dos fases internas de este módulo están comunicadas entre sı́ utilizando el mismo patrón que el resto del sistema. Se podrı́a haber dividido este módulo en dos módulos más pequeños, pero dado que esta división es conceptual, se ha decidido mantener ambas fases agrupadas dentro del marco del mismo módulo por coherencia respecto a la funcionalidad. 5.5.1 Diagramas de Interacción entre Objetos A continuación se muestran los diagramas de interacción correspondientes a las dos fases explicadas con anterioridad. Estas dos fases se comunican entre sı́ de forma de forma que el elemento “clean tokenns” que se envı́a a sus objetos suscritos en la figura 5.7 será la entrada “event” de la figura 5.8. Por motivos de simplicidad, las clases correspondientes a los reconocedores concretos y las correspondientes a las reglas concretas que se responsabilizarán, respectivamente, de las tareas de detección y filtrado de las secuencias no aparecen en las figuras. Esto se debe a que dichas clases se han abstraı́do en las respectivas superclases :Recognizer y :Rule. Esta abstracción aporta mayor flexibilidad al sistema ya que se pueden utilizar diferentes conjuntos de reconocedores y reglas para alterar el rendimiento. Para un mayor nivel de detalle sobre los algoritmos de reconocimiento y filtrado, se recomienda la lectura del Apéndice B 5.5.2 Diagramas de Clases A continuación se muestra un diagrama de clases simplificado correspondiente al módulo Recognition. Nótese cómo no existe una relación –acoplamiento– entre las clases correspondientes a las dos fases descritas. Sobre este diseño, como ya ha sido señalado, faltarı́a incluir las subclases correspondientes a los reconocedores y reglas especı́ficas. En el diagrama pueden observarse también clases como :Token, :DetectionEvent y :NucleotideChain. Estas clases sirven para utilizar diferentes representaciones del texto de entrada con el objetivo de aportar 75 PROYECTO FIN DE CARRERA :RecognitionManager t:Token :Recognizer :Listener onEvent(event) [ event = BEGIN SECTION ] resetAll() resetAll() [ event = Word ] create(event) onToken(t) onToken(t) generateSequence() onDetected(tokens) onEvent(clean_tokens) Figura 5.7: Diagrama de Interacción entre Objetos: reconocimiento de secuencias en el módulo Recognizer :RuleFilteringManager onEvent(event) :Rule :Listener [ event = words ] filter(words) processFactBase() addFact(fact) removeFact(fact) [* más hechos ] onEvent(sequence) Figura 5.8: Diagrama de Interacción entre Objetos: filtrado de secuencias en el módulo Recognizer funcionalidades concretas en función de las acciones necesarias a realizar en cada etapa. :Token representa las palabras, sı́mbolos y eventos de control que entran al módulo. Las secuencias detectadas forman una lista de tokens y, tras el filtrado, se genera un objeto de la clase :DetectionEvent que contendrá una secuencia representada en un objeto de la clase :NucleotideChain. 76 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA Figura 5.9: Diagrama de Clases: módulo Recognition 5.5.3 Detalle de las clases más significativas En la siguiente figura se pueden ver las cláses más significativas de este módulo en detalle, mostrando tanto atributos como operaciones. Si bien las clases que gestionan los algoritmos de reconocimiento y filtrado ya han sido explicadas, respecto a las clases que representan las secuencias detectadas debe notarse la diferencia entre :DetectionEvent y :NucleotideChain. La primera contiene información adicional sobre la secuencia detectada, como la sección en que fue detectada o el contexto –texto anterior y posterior a la secuencia– en el que fue detectada, además del texto real –tal y como aparece en el documento– que forma la secuencia. La clase NucleotideChain, por el contrario, contiene información especı́fica de la secuencia permitiendo operaciones sobre ella como la comparación de secuencias. 5.6 Módulo BLAST La responsabilidad de este módulo es la ejecución del programa BLAST sobre las secuencias detectadas en el módulo Recognition. Para ello, este módulo permanece “a la escucha” de secuencias detectadas durante el proceso de envı́o de documentos. Cada secuencia detectada es almacenada temporalmente hasta que llegue el evento de control que indica que se ha finalizado el envı́o del documento, momento en el cual se realiza la ejecución de la herramienta BLAST para obtener alineamientos sobre todas las secuencias detectadas en el documento. La razón por la que se postpone la ejecución de BLAST es que se trata de una herramienta que consume muchos recursos de la máquina y su ejecución no es inmediata, sino que se mide en el orden de minutos 1 . Cada ejecución 1 TM R IntelCore 2 Quad Q6600 a 2.4 GHz con 2GB de memoria RAM 77 PROYECTO FIN DE CARRERA Figura 5.10: Detalle de las Clases: módulo Recognition de la herramienta supone la lectura de la base de datos de secuencias establecida en las opciones de configuración del sistema, por lo que realizar una ejecución por cada secuencia detectada en el momento de recibir dicha secuencia supondrı́a un problema de rendimiento en el sistema inaceptable. Las opciones de configuración del sistema se encuentran detalladas en el Apéndice A Dentro del módulo, y dado que es necesario recurrir a una aplicación externa invocando su ejecución, el sistema debe adaptarse a las caracterı́sticas de esta herramienta. Para ello, se genera un fichero de entrada con las secuencias contenidas en el documento y se obtienen los 78 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA resultados de la ejecución de BLAST a través de un fichero de salida en formato XML. Dicho fichero será parseado y los resultados obtenidos enviados hacia las siguientes fases de ejecución utilizando el mecanismo de comunicación descrito. 5.6.1 Diagramas de Interacción entre Objetos En la figura 5.11 se muestra el diagrama de interacción entre objetos de este módulo. Como puede observarse, la ejecución de la herramienta BLAST, ejecutada a través de un objeto de la clase :BLASTExecution se realiza al recibir el evento de control “END DOCUMENT”. La comunicación con la herramienta BLAST se realiza mediante dos ficheros de texto plano, utilizados para indicar la entrada y salida de la herramienta. La ruta al fichero ejecutable de la herramienta BLAST y la base de datos que utilizará la herramienta depende de la configuración del sistema, mientras que los nombres de los ficheros de entrada y salida se utilizarán añadiendo un sufijo al nombre del fichero que contendrá el documento original. El fichero de salida de la herramienta BLAST se encuentra en formato XML, y la clase responsable de interpretar este fichero es :BLASTResultParser. Un objeto de esta clase recibirá las secuencias de entrada que se proporcionaron a la herramienta y devolverá como resultado una tabla cuya clave serán las propias secuencias de entrada mientras que el valor asociado será una lista de resultados. Cada uno de los resultados que genera BLAST es, en realidad, una entrada para acceder a la base de datos de Nucleotide, donde podrá obtenerse realmente la información necesaria para anotar las secuencias. Este acceso a la información adicional se realizará en la siguiente etapa del proceso, correspondiente al módulo NCBI. 5.6.2 Diagrama de Clases En el diagrama de la figura 5.12 puede observarse la existencia de las clases :BLASTEvent Y :BLASTResult. Estas clases tienen una responsabilidad análoga a las ya mencionadas :DetectionEvent y :NucleotideChain. 5.6.3 Detalle de las Clases más significativas En este apartado se muestra la figura 5.16 con las propiedades y métodos de las clases que conforman este módulo. 79 PROYECTO FIN DE CARRERA :BLASTWrapper onEvent(event) :BLASTExecution :BLASTResultParser :Listener [ event = DetectionEvent ] addSequence(event) [ event = END DOCUMENT ] searchBlast() create(file_in, file_out) run() create(max_results) parseDocument(file_out) getResults() results onEvent(result) [* más resultados ] Figura 5.11: Diagrama de Interacción entre Objetos: módulo BLAST Figura 5.12: Diagrama de Clases: módulo BLAST 5.7 Módulo NCBI Una vez detectadas las secuencias y obtenidos los alineamientos de las secuencias utilizando la herramienta BLAST, es necesario utilizar las entradas de BLAST para poder ası́ acceder a la información contenida en la base de datos de Nucleotide. Para realizar esta tarea, se ha utilizado una versión local de la base de datos de GenBank utilizando BioSQL. No obstante, de cara al diseño y la implementación del sistema, este recurso será considerado únicamente como una base de datos relacional. El objetivo de este módulo es obtener el nombre de organismo de las 80 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA Figura 5.13: Detalle de las Clases: módulo BLAST entradas ofrecidas por la salida de BLAST, ası́ como los nombres de gen correspondientes al alineamiento detectado. Los resultados proporcionados por la herramienta BLAST contienen un identificador de GenBank, que permite recuperar un documento contenido en la base de datos Nucleotide, y una porción de secuencia dentro de ese documento, que queda determinada por los valores superior e inferior que indican la posición en la que se ha producido el alineamiento. El identificador, junto con los valores, son utilizados para recuperar –cuando esté disponible– los nombres de gen. El nombre de organismo tan sólo depende del identificador. 5.7.1 Diagrama de Interacción entre Objetos En el diagrama de interacción de la figura 5.14 puede observarse cómo es el funcionamiento general de este módulo ante la llegada de un evento. El evento se espera que sea un objeto de la clase :BLASTResult y, en caso contrario, al igual que el resto de módulos, simplemente se retransmite. Ante un evento de dicha clase, se procede a la búsqueda inmediata de la información contenida en la base de datos de Nucleotide sobre la entrada especificada por el objeto que contiene el resultado de BLAST. En este caso 81 PROYECTO FIN DE CARRERA no se posponen este tipo de acciones ya que se trata sı́mplemente de un acceso a una base de datos relacional. :NCBIDB onEvent(event) : NCBIQuery : GenBankWrapper r: NCBIResult :Listener [ event = BLASTResult ] search(event) create(event) create() shortQueryDev(gi, inf, sup) data create(data) onEvent(r) Figura 5.14: Diagrama de Interacción entre Objetos: módulo NCBI 5.7.2 Diagrama de Clases Figura 5.15: Diagrama de Clases: módulo NCBI En las explicaciones anteriores, respecto al modelo de comunicación, se habı́a citado la clase :NCBIWrapper como representante del módulo actual. El hecho de que esta clase no se encontrara recogida en la figura 5.14 se debe a 82 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA que la clase :NcbiDB es una subclase de dicho representante. Esta división mediante el mecanismo de herencia se debe a la posibilidad de utilizar otros mecanismos para el acceso a los datos de GenBank. Para poder modificar el sistema en un futuro si fuese necesario, se ha propuesto este modelo de forma que dichos cambios tengan un impacto mı́nimo sobre el sistema en caso de realizarse. 5.7.3 Detalle de las Clases más significativas La clase :NCBIQuery es similar, en cuanto a la información que maneja, a la clase BLASTResult, no obstante, se ha decidido utilizar una clase diferente por motivos de reusabilidad. Respecto a los resultados generados como objetos de la clase :NCBIResult, en esta etapa simplemente contienen la información recuperada por la base de datos Nucleotide, pero más adelante permitirán ayudar en el proceso de búsqueda de los nombres de organismo y nombres de gen en el texto del documento. Figura 5.16: Detalle de las Clases: módulo NCBI 83 PROYECTO FIN DE CARRERA 5.8 Módulo ResultManagement La última fase en el proceso de detección y anotación de secuencias consiste en ordenar los resultados obtenidos parcialmente. Dado que el resto de módulos anteriores han retransmitido todos los eventos de entrada además de incorporar en el flujo de eventos los propios de cada uno de los respectivos módulos, en esta última etapa se cuenta con toda la información necesaria para finalizar la anotación de las secuencias detectadas y ordenar los resultados para generar el fichero XML de salida. 5.8.1 Diagrama de Interacción entre Objetos Como puede observarse en el diagrama de interacción, en este módulo se utiliza el sistema de búsqueda ya mencionado anteriormente al describir la clase :Document. Los resultados de acceder a la base de datos Nucleotide ofrecen, en el mejor de los casos, diferentes alternativas de nombres de organismo y nombre de gen posibles para cada secuencia detectada. Esto se debe a que se eligieron en la fase correspondiente al módulo BLAST los mejores resultados que ofrecı́a dicha herramienta. :ResultManager onEvent(event) : SearchManager : Document [ event = NCBIResult ] addNCBIResult(event) addSearch(event) addDelayedSearchTerm(term) [* más términos ] [ event = END NCBI ] doSearch() doSearch() addResult(r) [* más resultados ] printResults() Figura 5.17: Diagrama ResultManagement de Interacción 84 entre Objetos: módulo CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA Figura 5.18: Diagrama de Clases: módulo ResultManagement 5.8.2 Diagrama de Clases Dado que las mostradas son las clases más relevantes, en este apartado se muestran no sólo las relaciones entre las clases que forman el módulo, sino también sus atributos y métodos. Respecto a la clase :SearchManager, ésta es la responsable de alimentar al buscador del documento con los términos necesarios para cada búsqueda. Como ya se indicó anteriormente, los términos de búsqueda en cuanto a los nombres de organismo deberán generarse para contemplar las formas más usuales de nombrar a un mismo organismo. 5.9 Módulo Index Este es el módulo asociado al subsistema de RI utilizado para las tareas de creación del ı́ndice de artı́culos y secuencias ası́ como su recuperación. Para el diseño de este módulo se cuenta con el apoyo de la librerı́a Lucene, simplificando ası́ las tareas de creación, mantenimiento y consulta del ı́ndice. Desde el punto de vista de las responsabilidades vinculadas a este módulo, éstas son la de crear el ı́ndice y servir los resultados de las consultas relacionadas con el mismo. Para la creación del ı́ndice es necesario procesar todos los documentos con tenidos en PubMed Central. Dado que dichos documentos se encuentran disponibles en formato XML, éste ha sido el formato elegido para esta tarea. Si bien el módulo Index es capaz de realizar su labor sı́mplemente recibiendo los eventos generados por cualquier clase :Docuemnt, se ha elegido el formato XML ya que aporta 85 PROYECTO FIN DE CARRERA más velocidad y precisión en la extracción del contenido textual de los documentos conservando su estructura de secciones jerárquica. En los diagramas mostrados en este capı́tulo, se ha utilizado una única clase, nombrada como :Lucene, para representar el uso de la librerı́a del mismo nombre. Se trata de una simplificación, ya que esta librerı́a ofrece diferentes clases para el acceso a sus múltiples funcionalidades, pero dado que el estudio de Lucene queda fuera el ámbito del presente Trabajo de Fin de Carrera, se ha elegido esta representación con el objetivo de simplificar la lectura y entendimiento de los diagramas. Por otro lado, se utilizará también una segunda clase que representa un documento de Lucene. Para evitar confusiones con la clase :Document del sistema, se nombrará a la clase que representa los documentos de Lucene como :lucene.Document 5.9.1 Diagramas de Interacción entre Objetos A continuación se muestran los diagramas de interacción entre objetos para la creación del ı́ndice de artı́culos y secuencias. Por simplicidad y para facilitar la interpretación de los mismos, el diagrama de interacción se ha dividido en dos partes. La primera parte muestra el procesamiento de los documentos XML extraı́dos de una base de datos para crear añadir los diferentes campos que conformarán el documento de Lucene al ı́ndice. Además, en esta primera parte se establece el mecanismo de comunicación creando las suscripciones necesarias para recibir las secuencias del documento en la propia clase :Indexer. Las operaciones relacionadas con la API de LUCENE se han simplificado al máximo. Por ejemplo, para añadir un campo a un documento de Lucene es necesario crear un objeto para dicho campo y después añadirlo al documento. Una vez más, por simplicidad, se han simplificado este tipo de mensajes entre los objetos del sistema y la librerı́a Lucene. En el caso planteado en el ejmeplo, utilizando un único mensaje –i.e. llamada a método– addField. Como se ha indicado, los diagramas mostrados en esta sección se corresponden exclusivamente con la creación del ı́ndice. Las consultas sobre el ı́ndice no se muestran en diagramas debido a que se realizan directamente sobre el ı́ndice generado, y se componen de consultas normales a dicho ı́ndice utilizando la API provista. Un último aspecto a destacar es que los artı́culos se extraen de una base de datos. Esta base de datos ha sido generada independientemente a partir de la colección de todos los artı́culos disponibles en PubMed Central. Para el tratamiento de todos los manuscritos de forma secuencial se ha decidido utilizar una estrategia basada en el mecanismo de herencia de la programación orientada a objetos. Esta estrategia se explicará más detalladamente con el diagrama de clases de este módulo. 86 CAPÍTULO 5. DISEÑO E IMPLEMENTACIÓN DEL SISTEMA :ChainExecution : FullDatabaseXMLProcessor i : Indexer :lucene.Document Document rm:RecognitionManager createIndex() create() create() addXMLProcessor(i) processFullDB() processXML(id, xml) create() addField(pmcid) addField(journal) addField(title) addField(authors) addField(text) create() create() addListener(rm) addListener(this) [* más documentos ] flush() Figura 5.19: Diagrama de Interacción entre Objetos: creación del ı́ndice en el módulo Index (1/2) :Indexer onEvent(event) : DetectionEvent ld:lucene.Document :Lucene [ event = DetectionEvent ] getDetectedElement() [ event = END DOCUMENT ] addField(sequences) addField(sequences) addDocument(ld) processFullDB() Figura 5.20: Diagrama de Interacción entre Objetos: creación del ı́ndice en el módulo Index (2/2) 5.10 Diagrama de Clases El principal aspecto a destacar del diagrama de clases es el ya citado mecanismo general para el procesamiento secuencial de todos los artı́culos contenidos en la base de datos. Para ello se hace uso de la clase 87 PROYECTO FIN DE CARRERA Figura 5.21: Diagrama de Clases: módulo Index :FullDatabaseXMLProcessor, que obtendrá de la base de datos el contenido del fichero XML y el identificador PMCID de cada uno de los manuscritos e invocará los métodos processXML y finishProcessing de todos los objetos que sigan el interfaz :XMLProcessor que le hayan sido proporcionados. De esta forma, cualquier objeto de una clase que implemente el interfaz :XMLProcessor podrá procesar todos los documentos de la base de datos. En este caso se trata de la clase Indexer, responsable de añadir al ı́ndice de Lucene los documentos y sus secuencias estructurados en los siguientes campos: (1) pmcid, (2) revista, (3) tı́tulo, (4) autores, (5) texto y (6) secuencias. 88 Capı́tulo 6 EVALUACIÓN DEL SISTEMA 6.1 Introducción Este capı́tulo muestra los resultados de las pruebas realizadas para probar el funcionamiento del sistema implementado. Para realizar las pruebas se recurrió a un panel de expertos compuesto por tres biólogos moleculares senior pertenecientes al Instituto de Salud Carlos III. Estos expertos crearon un corpus de documentos para la realización de las pruebas compuesto de 297 artı́culos cientı́ficos publicados en (1) varias revistas de BMC –e.g. Virology Journal, BMC Microbiology o BMC Molecular Biology– y (2) varias revistas pertenecientes a PLoS –e.g. PLoS One, PLoS Negected Tropical Diseases o PLoS Genetics. En total, entre los 297 artı́culos cientı́ficos que conforman el courpus seleccionado para la evaluación del sistema, se encuentran 3999 secuencias genéticas del tipo primer o probe. La selección de los artı́culos fue llevada a cavo por parte de los expertos de forma manual. Los criterios para la selección de los artı́culos fue que éstos contuviesen secuencias genéticas de tipo primers y probes. Se pidió a los expertos que realizaran un análisis de los manuscritos del conjunto de pruebas con objeto de identificar todas las secuencias de ADN válidas contenidas en el texto de los artı́culos. Se les pidió, además, que especificaran cuales de dichas secuencias de ADN se correspondı́a con secuencias del tipo primers o probes. Tras el análisis, los expertos afirmaron que la cantidad de secuencias genéticas no relacionadas con secuencias tipo primer o tipo probe contenidas en los artı́culos seleccionados suponı́a menos del 2% de la cantidad total de secuencias. Por esta razón, se ha supuesto que los artı́culos cientı́ficos que recogen secuencias genéticas primers y probes raramente contienen secuencias de ADN que no pertenezcan a dichos grupos. 89 PROYECTO FIN DE CARRERA 6.2 Evaluación La forma de evaluar el sistema parte del corpus descrito en la introducción de este capı́tulo y de la ayuda de los expertos mencionados. La evaluación ha consistido en utilizar la implementación del sistema para la detección y anotación de las secuencias contenidas en los manuscritos seleccionados, en formato PDF, suministrando para cada manuscrito las secuencias detectadas junto con su contexto –i.e. fragmentos del texto inmediatamente anterior y posterior a la secuencia. Los resultados fueron interpretados y validados manualmente por los expertos. Por un lado, se han medido la precisión y exhaustividad de las secuencias detectadas, atendiendo sólamente al hecho de reconocer correctamente las secuencias genéticas. Sobre las secuencias detectadas, se ha revisado si las anotaciones proporcionadas son correctas. 6.2.1 Detección de Secuencias Del total de secuencias contenidas en el corpus de pruebas –3999– se detectaron correctamente un total de 3830 secuencias. 169 secuencias no fueron detectadas y se reconocieron 79 falsos positivos –i.e. palabra o agrupación de palabras que no constituyen una secuencia genética. Esto supone una exhaustividad –en inglés recall – del 95.77% y una precisión del 97.98%. La medida F, que relaciona precisión y exhaustividad, adquiere un valor de 0.9686. Figura 6.1: Secuencias Detectadas vs Secuencias no Detectadas 90 CAPÍTULO 6. EVALUACIÓN DEL SISTEMA Figura 6.2: Secuencias Detectadas vs Falsos Positivos Para el cálculo de los valores de exhaustividad y precisión se han utilizado las siguientes fórmulas: recall = secuencias correctas total secuencias precision = secuencias correctas secuencias correctas + f alsos positivos El significado de la medida de exhaustividad es la relación entre los documentos recuperados correctamente respecto del total de secuencias que contiene el conjunto de pruebas. Dicho de otro modo, muestra la cantidad de secuencias bien detectadas. Se puede observar esta relación observando la figura 6.1. La precisión mide, por otro lado, la calidad de los resultados obtenidos relacionando las secuencias bien detectadas respecto al total de secuencias detectadas. En otras palabras, la exhaustividad representa cuántas de las secuencias detectadas son realmente secuencias encontradas en los artı́culos. Esta relación queda ilustrada en la figura 6.3 La medida-F muestra la relación entre las medias de precisión y de exhaustividad. F =2· recall · precision = 0.9686 recall + precision 91 PROYECTO FIN DE CARRERA 6.2.2 Anotación de secuencias Para los datos de esta evaluación se han considerado las 3830 secuencias correctamente detectadas, ya que los falsos positivos detectados no produjeron resultados de alineamiento con ninguna secuencia existente al utilizar la herramienta BLAST . En la detección del nombre de organismo al que pertenecen estas secuencias, un total de 2936(76.66%) fueron correctamente anotadas. 168(4.38%) fueron incorrectamente anotadas y 726(18.96%) fueron correctamente no anotadas. La razón de que sea correcta la no anotación de estas últimas 726 secuencias se debe a que se trata de secuencias genéticas de humano(671 secuencias) y de pollo(55 secuencias), mientras que la base de datos utilizada para la detección de alineamientos con las secuencias detectadas sólo contenı́a información de microorganismos. De las 2936 secuencias correctamente anotadas respecto al nombre de organismo, se encontró además información correcta sobre el nombre del gen correspondiente para 1356(46.18%) secuencias. Figura 6.3: Anotación de secuencias 6.3 Rendimiento El proceso de anotación de secuencias requiere del uso de la herramienta externa BLAST, y que esta herramienta consume una gran cantidad de recursos, tanto de memoria como de computación. Si bien no existı́an 92 CAPÍTULO 6. EVALUACIÓN DEL SISTEMA requisitos de rendimiento que necesiten ser evaluados, se ha realizado una métrica de los tiempos miedos de ejecución tanto de la simple detección de secuencias a partir de ficheros en formato PDF como de el proceso completo de anotación, que supone, además del uso de la herramienta BLAST el acceso a la base de datos Nucleotide. Con estas métricas, será posible determinar mejoras de rendimiento en caso de modificación de los algoritmos internos del sistema. La máquina en la que se han ejecutado las pruebas cuenta con las siguientes caracterı́sticas: TM 2 Quad Q6600 a 2.4 GHz R • Procesador: IntelCore • Memoria RAM: 2GB • Sistema Operativo: Windows Vista Business 32 bits Los tiempos de ejecución medios por artı́culo son de 397 milisegundos para la detección de secuencias, de los cuales 322 milisegundos se invirtieron en la extracción de los ficheros PDF y 75 en la anotación de secuencias. La ejecución completa incluyendo la fase de anotación de las secuencias eleva el tiempo de ejecución medio por artı́culo drásticamente hasta los 15 minutos. 93 PROYECTO FIN DE CARRERA 94 Capı́tulo 7 CONCLUSIONES Y LÍNEAS FUTURAS 7.1 Conclusiones El sistema desarrollado en este Proyecto de Fin de Carrera permite la detección y anotación de secuencias genéticas en la literatura cientı́fica para un manuscrito dado, aceptando varios formatos para dicho artı́culo, entre ellos, PDF. Además, se han reutilizado las mismas técnicas de detección de secuencias para crear un ı́ndice con todos los artı́culos de PubMed Central, asociando a cada artı́culo las secuencias genéticas detectadas en él. 7.1.1 Tratamiento de PDF Respecto al tratamiento de documentos PDF, se trata de un formato raramente utilizado como fuente de información en la minerı́a de textos o la extracción de información aplicadas al área de la biomedicina. Normalmente, las herramientas de este área permiten como entrada texto plano o estructurado utilizando lenguajes etiquetados como XML o HTML. Estas restricciones son comprensibles, ya que es posible traducir el documento PDF a dichos formatos utilizando herramientas externas. No obstante, estas herramientas suelen ser caras y en general imprecisas, especialmente cuando se trata de conservar la estructura de secciones y sub-secciones de un documento maquetado en múltiples columnas. En este Trabajo de Fin de Carrera se ha estudiado la posibilidad de utilizar los documentos PDF como una entrada al sistema debido a que, a raı́z del análisis del problema, los expertos consultados propusieron este requisito de forma explı́cita argumentando que este formato es, de facto, la forma de representación de documentos utilizada generalmente por los investigadores. La solución propuesta pasa por la creación de una plantilla para cada 95 PROYECTO FIN DE CARRERA revista o grupo de revistas que compartan una misma maquetación. A pesar de contar con el inconveniente del uso de la plantilla, los resultados respecto a la calidad de la extracción del texto contenido en los documentos son prometedores y, como se comentará en las lı́neas futuras, esta plantilla podrı́a ser creada con facilidad utilizando una herramienta diseñada para tal fin. 7.1.2 Detección de secuencias La etapa principal del sistema es la detección de las secuencias genéticas de tipo primer y probe contenidas en los manuscritos. El principal problema de esta fase han sido la cantidad de sı́mbolos permitidos para la representación de secuencias y la diversidad de formas de representación de las mismas en los artı́culos. El método, además, se apoya en un diccionario de palabras pertenecientes al idioma inglés compuestos por los sı́mbolos de nucleótidos que forman las secuencias a reconocer, ası́ como en una lista de términos técnicos formados también por estos sı́mbolos y que aparecen frecuentemente junto a las secuencias. El uso del diccionario de palabras formadas por sı́mbolos de nucleótidos y la lista de términos especı́ficos supone una forma flexible de ampliación del sistema en caso de resultar necesario ampliar dichos conjuntos. Esto se debe a que dichos conjuntos se tratan como recursos externos al algoritmo de filtrado de secuencias. Dado que la creación de un algoritmo de detección que contemplara todas las formas de representación posibles resultaba extraordinariamente complicado, se recurrió al enfoque actual dividiendo el proceso en dos fases, la primera centrada en la detección de cadenas de sı́mbolos candidatas a ser una secuencia, y una última fase de refinamiento de las cadenas seleccionadas por la fase anterior. Este enfoque permite una gran flexibilidad a la hora de experimentar diferentes reconocedores y heurı́sticas de filtrado. El método de detección de secuencias presenta unos altos valores de precisión (97.98%) y exhaustividad (95.77%). Estos altos valores son la clave del buen funcionamiento del sistema, ya que la etapa de detección es la etapa en la que se basan tanto la anotación de secuencias como la generación del ı́ndice de artı́culos y secuencias. 7.1.3 Anotación de Secuencias El objetivo de esta etapa es el de anotar las secuencias detectadas con posibles nombres de organismo y de gen, adiganando un valor de confianza a cada anotación. Se trata de una etapa muy delicada del sistema en la que ha sido requerido un gran esfuerzo en cuanto a adaptar el sistema para poder acceder de la forma más eficiente posible a las bases de datos requeridas. 96 CAPÍTULO 7. CONCLUSIONES Y LÍNEAS FUTURAS Por ejemplo, debido a motivos de rendimiento, se prefirió trabajar con una copia local de la base de datos Nucleotide, en lugar de utilizar los servicios web ofrecidos por el NCBI, dado que se requieren del orden de cientos de consultas a dicha base de datos por cada artı́culo procesado y los tiempos de ejecución utilizando servicios web resultaban inaceptables. Esta fase supone, además, el uso de la herramienta BLAST, lo que obliga a una alta inversión de recursos de computación. Es necesario destacar que, incluso tras las optimizaciones de rendimiento realizadas, la ejecución de esta etapa eleva el tiempo de ejecución medio por artı́culo a 15 minutos. Los resultados obtenidos en las pruebas del sistema muestran que se ha podido anotar correctamente las secuencias con el nombre del organismo en un 83.29% de los casos. En el 15.45% de las ocasiones esta anotación era simplemente imposible ya que las secuencias a anotar no pertenecı́an a microorganismos, y las bases de datos utilizadas contenı́an información exclusivamente de este tipo de organismos. Por lo tanto, se puede afirmar que el método ha encontrado satisfactoriamente el nombre de organismo de las secuencias en un alto porcentaje de las ocasiones. Respecto a los nombres de gen, tan sólo se han podido encontrar en un 44.32% de las ocasiones en las que se identificó el nombre de organismo. El hecho de que este porcentaje de anotación con nombres de genes sea bajo se debe, según los expertos, a que la información que se pretende recuperar puede no estar contenida en las bases de datos e, incluso, no ser conocida todavı́a. 7.1.4 Generación de un Índice de Artı́culos y Secuencias Utilizando las etapas ya descritas, se han reutilizado la etapa de extracción del contenido textual de los documentos y la etapa de detección de secuencias para asociar a cada artı́culo las secuencias contenidas en él. En el momento de la creación del ı́ndice, la cantidad de artı́culos descargables de PubMedCentral era de 176672. Dado que se disponı́a de una versión de cada artı́culo en formato XML, se ha utilizado este formato de representación dado que reduce los tiempos de ejecución respecto al tratamiento de artı́culos en PDF. El uso de la librerı́a Lucene ha permitido que tanto la creación del ı́ndice como las consultas sobre el mismo se realicen de forma eficiente y rápida. A pesar de ello, dada la gran cantidad de artı́culos, la creación del ı́ndice supuso un tiempo de ejecución de, aproximadamente, 10 horas. No obstante, las consultas al ı́ndice permiten realizar búsquedas en tiempo real a través de la interfaz web del sistema. 97 PROYECTO FIN DE CARRERA 7.2 Lı́neas Futuras A pesar de que el sistema es completamente funcional y se ha probado que ofrece unos resultados muy prometedores, durante el desarrollo del mismo se ha tomado nota de ideas que pueden mejorar la funcionalidad ofrecida, tanto a nivel de mejora de los resultados como de rendimiento. Además, algunos de los componentes del sistema, como ya se ha visto, son fácilmente exportables para su uso en otros ámbitos, como es el caso de la extracción estructurada del contenido de los artı́culos cientı́ficos en formato PDF. A continuación se exponen las principales lı́neas de mejora del sistema y sus componentes ofreciendo una estimación de la dificultad que suponen y, en ocasiones, ideas concretas de aplicación. 7.2.1 Extracción Estructurada de Ficheros PDF El principal inconveniente del método desarrollado en este Trabajo de Fin de Carrera es la necesidad de utilizar una plantilla para cada conjunto de documentos que compartan una maquetación. Si bien este enfoque ha funcionado bien, la generación de las plantillas se ha realizado de forma manual inspeccionando la estructura interna de los documentos, y esta labor, si bien no es especialmente complicada, queda fuera del ámbito de cuestiones de las que deberı́a responsabilizarse un investigador del área de la biomedicina. Por lo tanto, y tomando como base el sistema actual, es necesario proveer a dichos investigadores con las plantillas necesarias para poder extraer el contenido de artı́culos en formato PDF. Como posibles soluciones a este problema se plantean dos alternativas: 7.2.1.1 Crear una herramienta de generación de plantillas Dificultad: media esta herramienta facilitarı́a la generación de las plantillas hasta un punto tal que el usuario esperado del sistema no tuviese problemas a la hora de generar sus propias plantillas para la extracción de artı́culos con una maquetación para la cual no dispusiera de una plantilla. Esta herramienta permitirı́a visualizar un documento PDF y a través de una guı́a programada podrı́a especificar de forma gráfica sobre el documento las diferentes secciones del mismo. De esta forma la herramienta serı́a capaz de obtener la información necesaria del documento para asignar los parámetros necesarios sobre el formato del texto y su maquetación generando una plantilla especı́fica. 98 CAPÍTULO 7. CONCLUSIONES Y LÍNEAS FUTURAS 7.2.1.2 Eliminar la necesidad de uso de plantillas Dificultad: muy alta el método propuesto para llevar a cabo esta complicada labor, a grandes rasgos, consiste en combinar técnicas gráficas con conocimiento lingüı́stico y de estructura del documento. En una primera etapa, serı́a necesario detectar las secciones de texto contiguas de forma gráfica utilizando para ello las coordenadas de los elementos textuales dentro del documento. Una vez identificadas las zonas, serı́a necesario ordenarlas entre sı́ utilizando información relativa a la estructura del documento, utilizando heurı́sticas como, por ejemplo, la conservación del tipo de letra. Considerando que este tipo de heurı́sticas podrı́a no ser suficiente para determinar la ordenación de las agrupaciones de texto, podrı́a resultar interesante utilizar técnicas de análisis del lenguaje natural para introducir ası́ nuevas reglas que promuevan que la continuación del texto forme oraciones correctas. 7.2.2 7.2.2.1 Detección de Secuencias Adaptar el sistema para reconocer otro tipo de secuencias Dificultad: media-alta Los resultados obtenidos para el caso de esta etapa del sistema dejan poco margen de mejora. No obstante, la detección de secuencias se ha desarrollado especı́ficamente para la detección de primers y probes. Dado que este tipo de secuencias son cadenas de nucleótidos, su aplicación directa a otros tipos de secuencias, como por ejemplo las proteı́nas, supondrı́a la adaptación del alfabeto de sı́mbolos, los reconocedores y las heurı́sticas de filtrado, pero podrı́a conservarse el funcionamiento planteado separando la detección en una fase de reconocimiento y otra de filtrado. La dificultad real de esta adaptación dependerá de las caracterı́sticas concretas de las secuencias para las que se quiera realizar. Incluir una funcionalidad social para que la comunidad de usuarios reporte falsos positivos Dificultad: baja Respecto al sistema actual, una posible mejora serı́a permitir que los usuarios del ı́ndice de artı́culos y secuencias a través del interfaz web puedan reportar las secuencias detectadas que en realidad no son secuencias genéticas – i.e. falsos positivos. De esta forma, además de purgar las secuencias ya detectadas, se puede generar una lista negra de secuencias que no deberı́an reconocerse en lo sucesivo, mejorando ası́ el funcionamiento de la etapa de 99 PROYECTO FIN DE CARRERA detección. Este enfoque, no obstante, requerirı́a de supervisión humana para evitar posibles abusos del sistema de reporte de falsos positivos. 7.2.3 Anotación de Secuencias Los dos problemas principales encontrados relativos a esta etapa son que las bases de datos utilizadas sólo contenı́an información de microorganismos y que esta etapa consume una gran cantidad de recursos de computación, aumentando drásticamente el tiempo de computación. 7.2.3.1 Utilizar bases de datos más completas Dificultad: baja Para solucionar el primero de los problemas planteados, serı́a necesario incorporar al sistema bases de datos más completas. La dificultad de esta incorporación es relativamente baja, no obstante, es necesario considerar que aumentar el tamaño de las bases de datos supone aumentar también el tiempo de ejecución, especialmente al utilizar la herramienta BLAST. 7.2.3.2 Utilizar supercomputadores Dificultad: media Respecto al problema de tiempo de ejecución, un posible enfoque, de dificultad media, aunque coste considerable, serı́a recurrir a su ejecución en supercomputadores. A menor coste se podrı́a plantear la construcción de un servicio responsable de esta etapa de la ejecución recurriendo a la computación distribuı́da. 7.2.4 7.2.4.1 Creación y Mantenimiento del ı́ndice de Artı́culos y Secuencias Automatizar el proceso de obtención de artı́culos Dificultad: media-baja En esta primera implementación, se ha generado el ı́ndice desde cero a partir de los documentos descargados de PubMed Central. Para la mantenibilidad del sistema, serı́a necesario incorporar la funcionalidad de indizado incremental sobre los nuevos artı́culos que se encuentren progresivamente disponibles a través de PubMed Central. Una posible solución, de baja dificultad, serı́a la descarga de actualizaciones periódicas de los nuevos 100 CAPÍTULO 7. CONCLUSIONES Y LÍNEAS FUTURAS artı́culos para su inclusión en el ı́ndice, y con una dificultad intermedia, podrı́a realizarse este proceso de forma completamente automática. 7.3 Publicaciones Derivadas de Este Trabajo A raı́z de este Trabajo de Fin de Carrera, se han publicado dos artı́culos cientı́ficos en las revistas BMC Bioinformatics y Bioinformatics. El primero presenta el método expuesto en este Trabajo de Fin de Carrera para el procesamiento de artı́culos en formato PDF, ası́ como la identificación, extracción y anotación de las secuencias genéticas. En el segundo, se presenta la aplicación PubDNA Finder, que puede ser consultada en la URL http://servet.dia.fi.upm.es:8080/pubdnafinder. Esta aplicación web es un interfaz de consulta al ı́ndice de artı́culos y secuencias que ha sido generado en la implementación de este trabajo. A continuación se ofrecen más detalles sobre los artı́culos y la importancia de las revistas en que han sido publicados. Los artı́culos completos pueden consultarse en el apéndice C. 7.3.1 A method for automatically extracting infectious disease-related primers and probes from the literature • Autores: Miguel Garcı́a-Remesal, Alejandro Cuevas, Victoria LópezAlonso, Guillermo López-Campos, Guillermo de la Calle, Diana de la Iglesia, David Pérez-Rey, José Crespo, Fernando Martı́n-Sánchez y Vı́ctor Maojo. • Revista: BMC Bioinformatics 2010, 11:410 • Factor de Impacto: 3,428 (2009) • Ranking: Cuarta (de ventinueve) en el área de “Mathematical and Computational Biology”. Primer cuartil. 7.3.2 PubDNA Finder: a web database linking full-text articles to sequences of nucleic acids • Atutores: Miguel Garcı́a-Remesal, Alejandro Cuevas, David PérezRey, Luis Martı́n, Alberto Anguita, Diana de la Iglesia, Guillermo de la Calle, José Crespo y Vı́ctor Maojo. • Revista: Bioinformatics 2010, 26(21)2801-2802 • Factor de Impacto: 4,926 (2009) 101 PROYECTO FIN DE CARRERA • Ranking: Segunda (de ventinueve) en el área de “Mathematical and Computational Biology”. Primer cuartil y primer decil. 102 REFERENCIAS Adobe Systems Incorporated . Adobe Supplement to ISO 32000, BaseVersion 1.7, ExtensionLevel 3. Adobe Systems Incorporated, 2008. Adobe Systems Incorporated . Document Management – Portable Document Format – Part 1: PDF 1.7. Adobe Systems Incorporated, 1 edition, 2008. Adobe Systems Incorporated . Document Management – Portable Document Format – Part 1: PDF 1.7. Adobe Systems Incorporated, 2009. Altschul S. F, Gish W, Miller W, Myers E. W,, Lipman D. J. Basic local alignment search tool. Journal of Molecular Biology 1990, 215(3):403–410. Anvar S. Y, ’t Hoen P. A,, Tucker A. The identification of informative genes from multiple datasets with increasing complexity. BMC bioinformatics 2010, 11:32. Baeza-Yates R, Ribeiro-Neto B. Modern Information Retrieval. AddisonWesley Publishing Company, 2008. Benson D. A, Karsch-Mizrachi I, Lipman D. J, Ostell J,, Sayers E. W. Genbank. Nucleic acids research 2010, 38(Database issue):D46–51. Betel D, Hogue C. W. Kangaroo–a pattern-matching program for biological sequences. BMC bioinformatics 2002, 3:20. Bobadilla J. JAVA a través de ejemplos. RAMA, 2003. Bravo L. T, Procop G. W. Recent advances in diagnostic microbiology. Seminars in hematology 2009, 46(3):248–258. Bray T, Paoli J, Sperberg-McQueen , Maler E,, Yergeau F. Extensible markup language (xml) 1.0 (fifth edition), 2011. URL http://www.w3. org/TR/xml/. Campi M. G, Castoldi M, Romano P, Thuroff E, Manniello M. A, Iannotta B, Rondanina G, Ruzzon T,, Santi L. Molecular probe data base (mpdb). Nucleic acids research 1997, 25(1):92–95. 103 PROYECTO FIN DE CARRERA Center for Medical Genetics . Rtprimerdb, 2002. URL http://medgen. ugent.be/rtprimerdb/. Cheng L.-L, Cheung D. W,, Yiu S.-M. Approximate string matching in dna sequences. Database Systems for Advanced Applications, International Conference on 2003, 0:303. Codd E. F. A relational model of data for large shared data banks. Commun. ACM 1983, 26:64–69. de la Calle G, Garcia-Remesal M, Chiesa S, de la Iglesia D,, Maojo V. Biri: a new approach for automatically discovering and indexing available public bioinformatics resources from the literature. BMC bioinformatics 2009, 10:320. Enright M. C, Spratt B. G. Multilocus sequence typing. microbiology 1999, 7(12):482–487. Trends in Free Software Foundation, Inc. . Gnu general public license, 2011. URL http://www.gnu.org/licenses/gpl.html. Fry C, Slominski A. The streaming api for xml (stax), 2011. URL http: //stax.codehaus.org/Home. Gonzalez-Diaz H, Perez-Montoto L. G, Duardo-Sanchez A, Paniagua E, Vazquez-Prieto S, Vilas R, Dea-Ayuela M. A, Bolas-Fernandez F, Munteanu C. R, Dorado J, Costas J,, Ubeira F. M. Generalized lattice graphs for 2d-visualization of biological information. Journal of theoretical biology 2009, 261(1):136–147. Harmon P, King D. Expert systems : artificial intelligence in business. John Wiley and Sons, 1985. Hatcher E, Gospodnetic O,, McCandless M. Lucene in Action, Second Edition: Covers Apache Lucene 3.0. Manning Publications Co., 2010. Hirschman L, Yeh A, Blaschke C,, Valencia A. Overview of biocreative: critical assessment of information extraction for biology. BMC bioinformatics 2005, 6 Suppl 1:S1. Huang Y. C, Chang C. F, Chan C. H, Yeh T. J, Chang Y. C, Chen C. C,, Kao C. Y. Integrated minimum-set primers and unique probe design algorithms for differential detection on symptom-related pathogens. Bioinformatics (Oxford, England) 2005, 21(24):4330–4337. Hyyro H, Juhola M,, Vihinen M. On exact string matching of unique oligonucleotides. Computers in biology and medicine 2005, 35(2):173–181. 104 REFERENCIAS Larman C. UML y Patrones. Una introducción al análisis y diseño orientado a objetos y al proceso unificado. Prentice Hall, 2002. Li F, Stormo G. D. Selection of optimal dna oligos for gene expression arrays. Bioinformatics (Oxford, England) 2001, 17(11):1067–1076. LION bioscience AG . Sequence retrieval system, 2003. URL http://srs. ebi.ac.uk/. Loy A, Maixner F, Wagner M,, Horn M. probebase–an online resource for rrna-targeted oligonucleotide probes: new features 2007. Nucleic acids research 2007, 35(Database issue):D800–4. McDonald R, Pereira F. Identifying gene and protein mentions in text using conditional random fields. BMC bioinformatics 2005, 6 Suppl 1:S6. Megginson D. The sax project, 2011. URL http://www.saxproject.org/. Melichar B, Antos J, Holub J, Polcar T,, Voracek M. TEXT SEARCHING ALGORITHMS. 2005. Miller M. B, Tang Y. W. Basic concepts of microarrays and potential applications in clinical microbiology. Clinical microbiology reviews 2009, 22(4):611–633. Mothershed E. A, Whitney A. M. Nucleic acid-based methods for the detection of bacterial pathogens: present and future considerations for the clinical laboratory. Clinica chimica acta; international journal of clinical chemistry 2006, 363(1-2):206–220. MySQL AB . MySQL Administrator’s Guide and Language Reference (2nd Edition). MySQL Press, 2006. National Center for Biotechnology Information . Blast, 2009. URL http: //blast.ncbi.nlm.nih.gov/Blast.cgi. National Center for Biotechnology Information . Entrez nucleotide, 2009. URL http://www.ncbi.nlm.nih.gov/nuccore. National Center for Biotechnology Information . The ncbi probe database, reagents for functional genomics, 2009. URL http://www.ncbi.nlm.nih. gov/sites/entrez?db=probe. Pabbaraju K, Tokaryk K. L, Wong S,, Fox J. D. Comparison of the luminex xtag respiratory viral panel with in-house nucleic acid amplification tests for diagnosis of respiratory virus infections. Journal of clinical microbiology 2008, 46(9):3056–3062. 105 PROYECTO FIN DE CARRERA Pattyn F, Speleman F, Paepe A. D,, Vandesompele J. Rtprimerdb: the real-time pcr primer and probe database. Nucleic acids research 2003, 31 (1):122–123. Ratcliff R. M, Chang G, Kok T,, Sloots T. P. Molecular diagnosis of medical viruses. Current Issues in Molecular Biology 2007, 9(2):87–102. Rice S. B, Nenadic G,, Stapley B. J. Mining protein function from text using term-based support vector machines. BMC bioinformatics 2005, 6 Suppl 1:S22. Rijsbergen , Van C. J. Information Retrieval. Butterworth-Heinemann, 1979. Robertson S. E. The probability ranking principle in IR. Morgan Kaufmann Publishers Inc., 1997. Salton G, Wong A,, Yang C. S. A vector space model for automatic indexing. Commun. ACM 1975, 18:613–620. Salton G, McGill M. J. Introduction to Modern Information Retrieval. McGraw-Hill, Inc., 1986. Software Engineering Standards Committee of the IEEE Computer Society . IEEE Recommended Practice for Software Requirements Specifications (IEEE Standard 830-1998). Spandidos A, Wang X, Wang H,, Seed B. Primerbank: a resource of human and mouse pcr primer pairs for gene expression detection and quantification. Nucleic acids research 2010, 38(Database issue):D792–9. Sparck Jones K, Willett P. Readings in information retrieval. Morgan Kaufmann Publishers Inc., 1997. Tamames J. Text detective: a rule-based system for gene annotation in biomedical texts. BMC bioinformatics 2005, 6 Suppl 1:S10. Tarhio J, Peltola N. String matching in the dna alphabet. Software: Practice and Experience 1997, 27(7):851–861. The Apache Software Foundation . Apache license, version 2.0, 2011. URL http://www.apache.org/licenses/LICENSE-2.0.html. The Apache Software Foundation . Apache lucene, 2011. URL http:// lucene.apache.org/java/docs/index.html. The Apache Software Foundation . Pdfbox, 2011. URL http://pdfbox. apache.org/. 106 REFERENCIAS The Massachusetts General Hospital . Primerbank, 2006. URL http:// pga.mgh.harvard.edu/primerbank/. University of Vienna. Department of Microbial Ecology . probebase, 2003. URL http://www.microbial-ecology.net/probebase/. VanGuilder H. D, Vrana K. E,, Freeman W. M. Twenty-five years of quantitative pcr for gene expression analysis. BioTechniques 2008, 44 (5):619–626. W3C . Document object model (dom). URL http://www.w3.org/DOM/. Woo P. C, Lau S. K, Teng J. L, Tse H,, Yuen K. Y. Then and now: use of 16s rdna gene sequencing for bacterial identification and discovery of novel bacteria in clinical microbiology laboratories. Clinical microbiology and infection : the official publication of the European Society of Clinical Microbiology and Infectious Diseases 2008, 14(10):908–934. 107 PROYECTO FIN DE CARRERA 108 Apéndice A INSTALACIÓN DEL SISTEMA, MANUAL DE USUARIO Y EJEMPLOS DE USO A.1 Instalación del Sistema En esta sección se detallan los pasos para la correcta instalación y configuración del sistema para la detección y anotación de secuencias. En primer lugar se indicarán los prerrequisitos necesarios para la instalación. Después, se podrán encontrar indicaciones sobre cómo obtener e instalar las herramientas y bases de datos externas necesarias para la correcta ejecución del sistema y, por último, se ofrece una guı́a de configuración inicial del sistema. A.1.1 Paso 1: Prerrequisitos Java Runtime Environment v1.6 o superior: desde http://www.mysql.com/ MySQL Community Server v5.x: http://www.mysql.com se puede descargar se puede descargar desde ActivePerl Community Edition v5.8.8 o superior: descargar desde http://www.activestate.com/activeperl/ 109 se puede PROYECTO FIN DE CARRERA A.1.2 Paso 2: BLAST BLAST: se puede ftp://ftp.ncbi.nlm.nih.gov/blast/executables/ obtener desde Base de Datos NT en formato BLAST: se puede descargar desde el ftp ftp://ftp.ncbi.nlm.nih.gov/blast/db/. Es ncesesario descargar todos los archivos con nombrado nt.*.tar.gz. Una vez descargados, extraer todos los ficheros en un directorio, por ejemplo, d:/blastdb/nt. En lo sucesivo se llamará a este directorio %BLASTDB% A.1.3 Paso 3: GenBank Cambios en la configuración de MySQL: • En la pestaña “InnoDB Parameters” – BufferPoolSize: 500 M – Thread concurrency: 10 • En la pestaña “Advanced Networking” – Max Packet Size: 20 M • En la pestaña “Advanzed” – Table Cache: 1520 Crear una nueva base de datos en MySQL con el nombre deseado: por ejemplo, biosql Descargar BioSQL: se puede descargar desde la página web http://www.biosql.org/wiki/Main Page. Descargar y descomprimir. En lo sucesivo se nombrará el directorio donde se haya descomprimido como %BioSQL%. Crear la estructura de la base de datos: esta operación se realiza ejecutando el script biosqldb-mysql.sql. El comando para su ejecución es: mysql -u root biosql < biosqldb-mysql.sql Descargar e instalar BioPerl de paquetes de ActivePerl : para ello se puede utilizar el gestor 110 APÉNDICE A. INSTALACIÓN DEL SISTEMA, MANUAL DE USUARIO Y EJEMPLOS DE USO Descargar e instalar el módulo de conexión de MySQL para Perl : para ello se puede utilizar el gestor de paquetes de ActivePerl Cargar la taxonomı́a del NCBI en la base de datos : mediante la ejecución del script load ncbi taxonomy.pl, contenido en la distribución de BioPerl. Descargar los ficheros de GenBank : estos ficheros se encuentran accesibles en el sitio ftp://ftp.ncbi.nih.gov/genbank/. Sólo han de descargarse los ficheros cuyo nombrado se corresponda con el esquema gbDIVX.seq.gz, donde X puede ser cualquier número y DIV una de las siguientes divisiones: Acc, Aut, Bct, Con, Env, Est, Gss, Htc, Htg, Inv, Pat, Phg, Pln, Pri, Rod, Sts, Syn, Tsa, Una, Vrl o Vrt. Poblar la base de datos : mediante la ejecución del script load seqdatabase.pl contenido en la distribución de BioPerl. Utilizar el siguiente comando: perl load seqdatabase.pl -dbname biosql -dbuser root -driver mysql -lookup -safe -format genbank fich1 fich2 fich3... donde fich1, fich2, fich3 están referidos a los ficheros descargados en el paso anterior. A.1.4 Paso 4: instalar y configurar PrimerXTractor PrimerXTractor es el nombre dado al subsistema para la detección y anotación de secuencias en artı́culos cientı́ficos. Para su instalación, es necesario descomprimir el contenido del paquete. Tras la descompresión, quedará la siguiente estructura de archivos: • test/ • primerXtractor.jar -¿ executable jar • bmc.xml • plos.xml • dictionary.txt • list.txt • System.properties • README.txt 111 PROYECTO FIN DE CARRERA Editando el contenido del fichero System.properties se configurará el sistema. • GenBank Database: este campo especifica la URL a la base de datos MySQL que contiene los datos de GenBank. • GenBank Database user: nombre de usuario de la base de datos. • GenBank Database password: contraseña del usuario en la base de datos. • Blast Binary Path: BLAST. ruta al archivo ejecutable de la herramienta • Blast Database: ruta a la base de datos en formato BLAST (%BLASTDB%). A.2 A.2.1 Ejecución del Sistema Detección y extracción de secuencias El jar contenido en el paquete de PrimerXTractor es ejecutable, la sintaxis de ejecución es: textttjava -jar primerXtractor.jar -i inputDocument -o resultPath [-t template] [-reuseBR] [-reuseGR] A continuación se explica el comportamiento según los argumentos suministrados: • inputDocument: ruta al artı́culo a procesar • resultPath: ruta donde se desea dejar el fichero XML con los resultados • template: indica la ruta a la plantilla a utilizar para procesar archivos PDF. Sólo es necesario si la entrada es un archivo PDF. • reseBR: (opcional) indica al sistema que guarde los resultados parciales de BLAST para ejecuciones futuras. • reuseGR: (opcional) indica al sistema que guarde los resultados parciales de la base de datos de GenBank para ejecuciones futuras. A.2.2 Generación del Índice de Artı́culos y Secuencias El sistema cuenta con que los ficheros XML correspondientes a la colección sobre la que se quiere generar el ı́ndice se encuentran en una base de 112 APÉNDICE A. INSTALACIÓN DEL SISTEMA, MANUAL DE USUARIO Y EJEMPLOS DE USO datos. Para generar esta base de datos se puede utilizar el jar ejecutable DBPopulator. Una vez creada la base de datos el ı́ndice de articulos y secuencias a partir de la base de datos simplemente es necesario ejecutar ej jar ejecutable SequenceExtractor. El ı́ndice cuenta con varios campos que pueden ser consultados utilizando la sintaxis mencionada. Estos campos son: • pmcid: identificador de PubMed Central • title: tı́tulo • authors: autores • text: texto del documento. búsqueda de texto libre. Este es el campo por defecto en la • sequences: secuencias. Este es el único campo permitido en la búsqueda de secuencias, está establecido por defecto y se ha desabilitado la búsqueda por otros campos en estas consultas. A.3 A.3.1 Ejemplos de Uso Detección y Anotación PrimerXTractor de Secuencias usando En el directorio test/ que puede observarse tras descomprimir el paquete de PrimerXTractor, pueden encontrarse varios artı́culos en formatos PDF y XML junto con resultados parciales ya generados. Para ejecutar los siguientes ejemplos se debe abrir una consola y cambiar al directorio que contiene el fichero primerXTractor.jar. Ejemplo 1: Extracción y anotación de secuencias desde un artı́culo en formato PDF para la revista Virology Journal del grupo BMC java -jar primerXtractor.jar -i test/bmcTest1.pdf -o results01.xml -t bmc.xml -reuseBR -reuseGR Ejemplo 2: Extracción y anotación de secuencias desde un artı́culo en formato PDF para la revista BMC Microbiology java -jar primerXtractor.jar -i test/bmcTest2.pdf -o results02.xml -t bmc.xml -reuseBR -reuseGR 113 PROYECTO FIN DE CARRERA Ejemplo 3: Extracción y anotación de secuencias desde un artı́culo en formato PDF para la revista PLoS One java -jar primerXtractor.jar -i test/plosTest1.pdf -o results03.xml -t plos.xml -reuseBR -reuseGR Ejemplo 4: Extracción y anotación de secuencias desde un artı́culo en formato PDF para la revista PLoS Genetics java -jar primerXtractor.jar -i test/plosTest2.pdf -o results04.xml -t plos.xml -reuseBR -reuseGR Ejemplos 5, 6, 7 y 8: Extracción y anotación de secuencias desde un artı́culo en formato XML para los mismos artı́culos que los anteriores cuatro ejemplos java -jar primerXtractor.jar -i test/bmcTest1.xml -o results05.xml -reuseBR -reuseGR java -jar primerXtractor.jar -i test/bmcTest2.xml -o results06.xml -reuseBR -reuseGR java -jar primerXtractor.jar -i test/plosTest1.xml -o results07.xml -reuseBR -reuseGR java -jar primerXtractor.jar -i test/plosTest2.xml -o results08.xml -reuseBR -reuseGR Ejemplos 9 y 10: Extracción y anotación de secuencias de dos artı́culos en texto plano java -jar primerXtractor.jar -i test/bmcTest2.txt -o results09.xml -reuseBR -reuseGR java -jar primerXtractor.jar -i test/plosTest1.txt -o results10.xml -reuseBR -reuseGR A.3.2 Ejemplo de uso de PubDNA Finder: interfaz web para el ı́ndice de artı́culos y secuencias PubDNAFinder es el interfaz web generado para las consultas sobre el ı́ndice de los artı́culos de PubMed Central generado utilizando este sistema. Se encuentra disponible en http://servet.dia.fi.upm.es:8080/pubdnafinder/. Respecto a la realización de consultas sobre el ı́ndice utilizando el interfaz web, en la siguiente sección se detalla un ejemplo de uso de consultas. Para la realización de estas consultas se pueden utilizar los elementos de la sintaxis de consultas de Lucene, que pueden encontrarse en la siguiente url: http://lucene.apache.org/java/2 4 0/queryparsersyntax.html. 114 APÉNDICE A. INSTALACIÓN DEL SISTEMA, MANUAL DE USUARIO Y EJEMPLOS DE USO Figura A.1: Interfaz web PubDNAFinder Los elementos de la figura A.1 se detallan a continuación: 1. En este campo se introducirán las secuencias, una por lı́nea, para las que se desea realizar la búsqueda. El selector de operador indicará si deben aparecer alguna de las secuencias o todas ellas en el mismo artı́culos. 2. En este campo se introducirá el texto libre para el que se desea realizar la busqueda. 115 PROYECTO FIN DE CARRERA 3. El botón de enviar comienza la búsqueda sobre el ı́ndice. El botón clear fields deja los campos en blando y el botón Restablecer devuelve el estado de las cajas de texto a su estado original en el que se encontraran al cargar la página. 4. En esta zona se encuentran los resultados. En función de si se rellenan ambas cajas de texto para artı́culos y para texto, las búsquedas tendrán comportamientos diferentes. En el caso de introducir sólo secuencias, el sistema recuperará todos los manuscritos que las contengan, indicando las secuencias relevantes a la consulta en el área de resultados. Si sólo se proporciona texto, el sistema devolverá todos los artı́culos relevantes a la consulta textual e indicará todas las secencias que éstos contentan. En el caso de incluir información sobre secuencias y también texto a la hora de realizar la búsqueda, se recuperarán sólo los artı́culos relevantes al texto y a las secuencias simultáneamente, mostrando en los resultados sólamente las secuencias relevantes. 116 Apéndice B DETALLES DEL SISTEMA Por simplicidad, y para permitir una mejor comprensión global del funcionamiento y desarrollo del sistema, se han omitido ciertos detalles en el planteamiento de los mismos a lo largo de este Trabajo de Fin de Carrera, remitiendo al lector a consultar este Anexo. B.1 B.1.1 Detección y Filtrado de Secuencias Reconocedores A continuación se muestran una serie de ejemplos de reconocimiento de secuencias, indicando, para cada una de ellas, el identificador de PubMed (PMID) del artı́culo en que aparece, el reconocedor con que ha sido reconocida la secuencia, el texto del artı́culo en el que aparece y la lista de tokens generada. Más adelante puede observarse la figura B.1 con los autómatas finitos asociados a cada uno de los diferentes reconocedores. B.1.1.1 Ejemplos de Reconocimiento de Secuencias Ejemplo 1 • Reconocedor: 1 • PMID: 19781080 • Texto: ...primers AA247 (5’-TGCCATTGCCAAAGAGAC-3’) and pLQ510-rp1... • Lista de Tokens: {“TGCCATTGCCAAAGAGAC”} Ejemplo 2 • Reconocedor: 1 117 PROYECTO FIN DE CARRERA • PMID: 19664269 • Texto: ...mecA gene, mecAR (5’-TTACTCATGCCATACATAAATGGATA- \n GACG-3’) and mecAF... • Lista de Tokens: “GACG”} {“TTACTCATGCCATACATAAATGGATA”, Ejemplo 3 • Reconocedor: 2 • PMID: 19799780 • Texto: B-globin outside R @ CTC AAG TTC TCA GGA TCC A @ 1st round PCR primer for Human Beta globin DNA • Lista de Tokens: {“CTC”, “AAG”, “TTC”, “TCA”, “GGA”, “TCC”, “A”} Ejemplo 4 • Reconocedor: 2 • PMID: 18847469 • Texto: btherm @ GAT GTG CCG GGC TCC TGC ATG @ This study • Lista de Tokens: {“GAT”, “GTG”, “CCG”, “GGC”, “TCC”, “TGC”, “ATG”} Ejemplo 5 • Reconocedor: 3 • PMID: 19737401 • Texto: ..and 3’ AAGCT TGGTA CCTCA CTGCA \n GCAGA GCGCT GAGGC CCAGC AGCAC. The resulting PCR... • Lista de Tokens: {“AAGCT”, “TGGTA”, “CCTCA”, “CTGCA”, “GCAGA”, “GCGCT”, “GAGGC”, “CCAGC”, “AGCAC”} 118 APÉNDICE B. DETALLES DEL SISTEMA Ejemplo 6 • Reconocedor: 3 • PMID: 19149882 • Texto: 1 @ XAC0340 @ 432 @ gATACCCCATATgAATgCgAT • Lista de Tokens: {“gATACCCCATATgAATgCgAT”} Figura B.1: Reconocimiento de Secuencias: Reconocedores B.1.2 Reglas de Filtrado A continuación se muestran las reglas de filtrado en formato matemático y explicadas en lenguaje natural. 119 PROYECTO FIN DE CARRERA Regla 1: X long(sj ) < Lmin −→ borrar(s) sj ∈s SI la suma de las longitudes –i.e. número de sı́mbolos– de todos los tokens sj de la secuencia s es menor que Lmin , ENTONCES borrar s. Regla 2: ∃i|i = af ijo en cola(s) −→ borrar(s) ∧ insertar(s0 ) s0 = s1 , ..., si−1 SI se encuentra un elemento de la lista de afijos problemáticos al final de la cadena s, ENTONCES se elimina s de la base de hechos Y se inserta una nueva secuencia, s0 , resultado de eliminar el afijo problemático. Regla 3: ∃i|i = af ijo en cabeza(s) −→ borrar(s) ∧ insertar(s0 ) s0 = si+1 , ..., sn SI se encuentra un elemento de la lista de afijos problemáticos al comienzo de la cadena s, ENTONCES se elimina s de la base de hechos Y se inserta una nueva secuencia, s0 , resultado de eliminar el afijo problemático. Regla 4: ∧sj ∈s −→ borrar(s) SI todos los tokens de sj de s son palabras del diccionario de términos ingleses pertenecientes a Σ+ , ENTONCES se elimina s de la base de hechos. Regla 5: ∃i, j|(i, j) = af ijo en secuencia(s) −→ borrar(s)∧insertar(s0 )∧insertar(s00 ) s0 = s1 , ..., si−1 s00 = sj+1 , ..., sn SI se encuentra un elemento de la lista de afijos problemáticos dentro de la cadena s, ENTONCES se elimina s de la base de hechos Y se insertan dos nuevas secuencias, s0 y s00 , correspondientes a las secuencias anterior y posterior al afijo. 120 APÉNDICE B. DETALLES DEL SISTEMA Regla 6: in dictionary(s1 ) ∧ long(s1 ) ≥ 3 −→ eliminar(s) ∧ insertar(s0 ) s0 = s2 , ..., sn SI el primer token de s es una palabra del diccionario de términos ingleses pertenecientes a Σ+ Y dicho token tiene una longitud mayor o igual a 3, ENTONCES se elimina s de la base de hechos Y se inserta una nueva secuencia, s0 , resultado de eliminar el primer token de s. Regla 7: in dictionary(sn ) ∧ long(sn ) ≥ 3 −→ eliminar(s) ∧ insertar(s0 ) s0 = s1 , ..., sn−1 SI el último token de s es una palabra del diccionario de términos ingleses pertenecientes a Σ+ Y dicho token tiene una longitud mayor o igual a 3, ENTONCES se elimina s de la base de hechos Y se inserta una nueva secuencia, s0 , resultado de eliminar el último token de s. Regla 8: tam(s) ≥ 2 −→ concatenar(s) SI s está compuesta por más de un token, ENTONCES concatenar todos los tokens de s para generar una única secuencia. B.2 B.2.1 Anotación de Secuencias Cálculo del Valor de Confianza de Nombres de Organismo y Gen El valor de confianza para organismos y genes se calcula dependiendo de la similitud del término o términos encontrados en el texto respecto a la cadena buscada. En el caso de los genes, simplemente se podrá distinguir entre si se encuentra en el texto o no, mientras que en el caso de los nombres de organismo, esta similitud dependerá del número de palabras que conforman el nombre del organismo encontradas en el texto. Además, este valor dependerá, a su vez, de la coocurrencia de la aparición de la secuencia genética y el nombre de organismo o gen en la misma sección. El cálculo de la similitud del término encontrado respecto del texto buscado viene dado por la siguiente expresión: 121 PROYECTO FIN DE CARRERA 0 P CSL (l) = 40 + L−1 j=L−l 80 si 40 2j l=0 si 1 ≤ l ≤ L si l=L donde • L es la longitud, en número de palabras, del nombre del organismo • l es la máxima longitud –i.e. número de palabras consecutivas– del texto que encajan con el nombre buscado La fórmula mostrada está diseñada para otorgar valores más altos, con un máximo de 80, cuanto mayor sea el número de palabras encontradas para un nombre de organismo. Además, tiene en cuenta que cuanto más largo es un nombre de organismo, entendiendo la longitud como número de palabras, más especı́fico es este organismo, y, por tanto, una aparición de este nombre más generalista debe ser menos penalizada. A continuación se muestra una gráfica para ilustrar este hecho, mostrando 9 instancias de la función CS para nueve longitudes de nombre de organismo, desde 2 hasta diez palabras. Figura B.2: Cálculo del Valor de Confianza: Función CS 122 Apéndice C ARTÍCULOS PUBLICADOS 123