Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros Informáticos Grado en Matemáticas e Informática Trabajo Fin de Grado Extracción automática de relaciones qualia para la ontología OntoETAP Autor: Vicente Sixto Cárdenas Montalbán Tutor(a): Igor Boguslavsky Madrid, Junio - 2022 Este Trabajo Fin de Grado se ha depositado en la ETSI Informáticos de la Universidad Politécnica de Madrid para su defensa. Trabajo Fin de Grado Grado en Matemáticas e Informática Título: Extracción automática de relaciones qualia para la ontología Onto- ETAP Junio - 2022 Autor: Vicente Sixto Cárdenas Montalbán Tutor: Igor Boguslavsky Departamento de Inteligencia Artificial ETSI Informáticos Universidad Politécnica de Madrid Resumen Los sistemas modernos que tratan con lenguaje natural buscan igualar la ca- pacidad de “comunicación” y “entendimiento” de un ser humano. Sin embargo, el ser humano es capaz de entender los mensajes gracias al conocimiento del entorno que los rodea. El sistema de traducción ETAP-3 usa una ontología OntoETAP para guardar la información sobre las palabras. Este trabajo consiste en la extracción automáti- ca de información, en concreto, relaciones qualia, para su implementación sobre OntoETAP. La teoría del Lexicón Generativo define una estructura de qualia tal que cada concepto tiene cuatro roles qualia: formal, constitutivo, télico y agentivo. Estos definen la taxonomía del concepto, sus partes constituyentes, su papel u objetivo como entidad y la razón que le dió origen. Además, se analizan los distintos recursos ontológicos existentes y se escoge la ontología SUMO para extraer información de esta. Se explica el lenguaje SUO- KIF usado en SUMO y los distintos métodos que permiten hallar las relaciones qualia a extraer. Posteriormente, se diseña en Python la aplicación que, mediante web scraping, extrae las relaciones objetivo haciendo uso de las librerías Scrapy y RegEx. La aplicación también traduce la información extraída a reglas para la ontología OntoETAP usando el lenguaje Etalog. Por último, se analizan los resultados obtenidos y su precisión, concluyendo los posibles beneficios y mejoras. i Abstract Modern systems that process natural language seek to match human abilities of “communicating” and “understanding”. However, the human being is able to understand messages thanks to their knowledge over surrounding enviroment. The ETAP-3 translation system uses the OntoETAP ontology in order to store information related to the word. This project consists in automatically extracting information, in particular, qualia relations, for the OntoETAP ontology. The Generative Lexicon theory defines the qualia structure so every concept has four roles: formal, constitutive, telic and agentive. These denote the concept’s taxonomy , its constitutive parts, their role or objective as an entity and the reason why it exists. Furthermore, the many ontological resources are analyzed and SUMO ontology is chosen as the ontology to extract information from. The SUO-KIF language used in SUMO and its existing relations, from which qualia relations are extrac- ted, are explained. Afterwards, an application is designed in Python which, via web scraping methods, it extracts the desired relations making use of the Scrapy and RegEx libraries. The application also translates the extracted información into rules for the On- toETAP ontology in Etalog language. Finally, the results obtained and the precision of these results are analysed, to conclude the possible benefits and improvements of the application. iii Tabla de contenidos 1. Introducción 1 2. Estructura de qualia 3 3. Ontología 7 3.1. Top-level ontology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2. ETAP-3 y la ontología OntoETAP . . . . . . . . . . . . . . . . . . . . . 10 3.3. Estudio de ontologías existentes . . . . . . . . . . . . . . . . . . . . . 11 3.3.1. DOLCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3.2. BFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3.3. gist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3.4. SUMO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4. SUO-KIF 15 5. Metodología 19 6. Desarrollo 29 6.1. Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.2. Modelo de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.3. Inicialización del web crawler . . . . . . . . . . . . . . . . . . . . . . 31 6.4. Extracción de las relaciones qualia apropiadas. . . . . . . . . . . . . 33 6.5. Traducción de las relaciones SUO-KIF a Etalog. . . . . . . . . . . . . 40 7. Análisis de resultados y conclusiones 53 7.1. Resultados de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . 53 7.2. Análisis de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . 70 7.3. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 8. Análisis de impacto 73 Bibliografía 75 Anexos 79 v Capítulo 1 Introducción Desde hace doscientos años, el mundo ha entrado en un proceso de globaliza- ción constante, la información se transmite en abundancia y en muchos idio- mas. A día de hoy gozamos de una básica traducción automática que permite esclarecer con grandes dificultades el mensaje, pero este sueño de conseguir una completa traducción automática se remonta a tiempos muy anteriores con Descartes o Leibniz. La traducción es una actividad muy antigua y reconocida, distintos lingüistas analizan los idiomas y los traductores permiten transforma el lenguaje escrito en una lengua a otra, sin embargo, con la aparición del pri- mer ordenador, se dió el primer paso para automatizar medianto un ordenador este costoso proceso. Warren Weaver, un reconocido criptógrafo, dió uno de los primeros pasos para introducir la traducción mecanizada. Durante muchos años, se lograrían numerosos avances en la traducción au- tomática mediante teorías lingüísticas, pero ninguna sería fructuosa, se desa- rrollaron diccionarios computacionales y proyectos importantes como ELIZA o SHRDLU, este último se caracterizaba por entender lenguaje sencillo y objetivo como figuras cúbicas de colores pero resultaba bastante limitado al no poder en- tender palabras fuera del entorno. Este movimiento resultó en lo que se conoce a día de hoy como lingüística computacional. La lingüística computacional no es fácil de definir, se puede decir que es una disciplina de la lingüística aplicada o una disciplina informática con bases lin- güísticas. Está claro que esta disciplina involucra a partes iguales las áreas de la lingüística y la informática y, a pesar de su origen, involucra más campos de estudio que la traducción automática. Uno de los objetivos más importan- tes es lograr el procesamiento automático de lenguaje natural mediante teorías lingüística de la representación de la información, en otras palabras, se desea poder saber la información del mensaje procesandolo por un ordenador de forma automatizada. A pesar de los continuos avances en nuestra época como sistemas de traducción online o la extracción de información de textos importantes que utilizan, inclu- so, buscadores importantes como Google, estas herramientas están lejos de ser perfectas, existen muchos problemas como la ambigüedad y la inexactitud. 1 A partir de un párrafo simple de 30 palabras, se pueden encontrar más de 30.000 combinaciones, cada una siendo frases distintas. Un ejemplo fácil de ver es el siguiente: (1.1) El coche de modelo clásico azul claro. Es fácil comprender que dicho “coche” (1.1) es “azul claro” y “de modelo clási- co”. Sin embargo, para un ordenador esto no es evidente, existiendo múltiples posibles interpretaciones. (1.2) a. Coche de modelo clásico, coche azul claro b. Coche de modelo clásico, coche azul, coche claro c. Coche de modelo, coche clásico, coche azul, coche claro d. Coche de modelo azul, coche clásico claro e. Cochede modelo claro, coche clásico azul f. Coche de modelo azul, coche clásico, coche claro [. . . ] Siete palabras son suficientes para que un ordenador no sepa como interpretar una frase como ocurre en (1.2), aunque sea evidente que algunas de estas posi- bilidades son carentes de sentido, un ser humano no tiene dudas pero un orde- nador sí. Existen diversas teorías del lenguaje y la psicolingüística que intentan explicar como la mente humana consigue interpretar el mensaje sin ambigüeda- des, utilizamos nuestras experiencias y conocimiento adquirido para establecer relaciones y contexto en palabras. En (1.3), se pueden observar distintas oracio- nes donde existe información implícita de cada oración entre paréntesis. (1.3) a. Sergio terminó su bebida. (terminar de beber) b. Escribió el novelista con presteza. (escribir “con presteza”) c. Comimos pan reciente. (pan recien horneado) Para recolectar toda la información contextual entre palabras y conceptos, se usan ontologías que guardan relaciones Qualia entre palabras. Las ontologías son numerosas, dedicadas a determinados ámbitos y muy extensas, existe tanta información que es difícil detallar todas las palabras del mundo que nos rodea de forma correcta y adecuada. La finalidad de este trabajo es aplicar técnicas modernas de extracción de relaciones Qualia, a partir de recursos ontológicos existentes, para la ontología ETAP, analizando las teorías lingüísticas, los recur- sos disponibles y las distintas metodologías de extracción de datos. 2 Capítulo 2 Estructura de qualia La lingüística computacional ha avanzado hasta tal punto que es capaz de ana- lizar la lexicología con grandes bases de datos léxicas y numerosos estudios de la semántica léxica, los cuales permiten entender el significado de las palabras. Aun así, no es suficiente con tener esta información, algunas oraciones tienen la misma estructura pero su significado es completamente diferente. (2.1) a. Juan se fue a Barcelona. b. Juan se fue a un restaurante. En (2.1.a), recibimos la información de que Juan viajó a Barcelona, mientras que en (2.1.b), podemos inferir que Juan comió en un restaurante. No solo el mensaje es completamente distinto, en cada oración se puede extraer informa- ción adicional mediante el conocimiento de la hipotética situación, en (2.1.a), sabemos que se hizo la acción de viajar, en (2.1.b), entendemos que se hizo la acción de comer. Esto se debe, en concreto, a la información que sabemos de las palabras “Barcelona” y “restaurante” puesto que “Barcelona” es un lugar turís- tico o residencial y “restaurante” es un lugar donde se pide comida para comer in situ. El texto contiene información oculta en su contexto, que hay que analizar para poder realizar una correcta interpretación, además, hace falta una buena re- presentación de este contexto. Para dar solución a este problema, Pustejovsky (1991) propuso la teoría del Lexicón Generativo[1, 2] donde expone el término “estructura de qualia”, el cual agrupa cuatro aspectos del significado de una palabra. Quale, o Qualia en plural, proviene del Latín y significa “las propiedades sub- jetivas intrínsecas a un objeto”. En la filosofía, las qualia caracterizan nuestra concepción subjetiva de los sentimientos o ideas que evocan los objeto. Inspira- do por Aristóteles, Pustejovsky se sirve de cuatro roles o relaciones qualia para completar la estructura de qualia de una palabra, por ejemplo, una relación qualia de “perro” es “ladrar” puesto que interpretamos que los perros realizan la acción de ladrar, en concreto, este rol o relación recibe el nombre de “Télico”. Los cuatros roles de una estructura de qualia son los siguientes: 3 Constitutivo: define los elementos constituyentes o partes del objeto. Un ejemplo obvio es “coche”, su rol qualia constitutivo sería motor, puerta, chasis, etc, ya que el coche esta formado por estas piezas. Sin embargo, no solo incluye los elementos constituyentes, para “planta”, su relacion qualia constitutiva sería raiz, tallo, hoja, flor, fruto, puesto que cada planta esta dividida en estas partes. Formal: define la categoría intrínseca o información taxonómica de la pa- labra que lo constituye dentro de un dominio superior heredando sus pro- piedades físicas. Otra forma de visualizar este concepto es la relación x es y, por ejemplo, primate es mamífero, de esta forma, podemos decir que la relacion qualia formal de “primate” sería “mamífero”, además, “primate” hereda todas las propiedades físicas de “mamífero”. Télico: define el objetivo o función. Por ejemplo, relacionado con (2.b), “res- taurante” tiene la función de ser el lugar donde se prepara y se come la comida por lo que su relacion télica es “comer_en”. Agentivo: define la información que dió origen al objeto. Entre sus posibles valores pueden ser su creador, el evento que lo creó o incluso la razón de su existencia, por ejemplo, el evento que originó una casa es la construcción por lo que el rol qualia agentivo de “casa” sería “construir”. Una representación de la estructura qualia de la palabra violinista sería la si- guiente y unos ejemplos de oraciones: (2.2) violinista Formal: humano Télico: tocar Agentivo: habilidad (2.3) a. “Ella era una gran violinista” (Agentivo(violinista) = habilidad) b. “El violinista impresionó al público” (Télico(violinista) = tocar) El agentivo de violinista permite entender que, en (2.3.a), se elogia la habilidad de la violinista, por otro lado, en (2.3.b), el télico de violinista ofrece información sobre la acción del violinista ante el público, el cual es tocar un instrumento. Sin embargo, nosotros sabemos evidentemente que un violinista toca un violín y no existe esta información en la estructura de qualia. Para solucionar este problema, definimos las relaciones n-arias, en concreto,definimos tocar(x,y) el cual significa "x toca el instrumento", el resultado de añadir relaciones n-arias sería el siguiente: (2.4) violinista Formal: humano Télico: tocar(humano,violin) Agentivo: habilidad(tocar(humano,violin)) 4 Estructura de qualia De hecho, este no es el único caso en el cual hace falta hacer una incisión para expandir la información que debe representar una estructura de qualia, sin embargo, para el fin de este trabajo, es decir, la extracción de relaciones qualia, solo se analizará el anterior caso en detalle. A continuación, se expondrá dos ejemplos ilustrativos de estructuras de qualias: (2.5) a. “Los bomberos han estado muy ocupados debido al último incendio” (Télico(bombero) = extinguir(incendios)) b. “No dudes en llamar a los bomberos si te caes a un pozo” (Télico(bombero) = rescatar(humano)) • bombero Formal: humano Télico: extinguir(incendios), rescatar(humano), etc (2.6) a. “Estas tijeras escolares son muy malas” (Télico(tijeras escolares) = cor- tar) b. “Por favor, coger las tijeras escolares por los mangos” (Constitutivo(tijeras escolares) = mango) • tijeras escolares Formal: herramienta escolar Constitutivo: hojas, eje, mango, tope Télico: cortar Cabe destacar que el proceso seguido para definir las estructuras de qualias anteriormente ha sido desde el punto de vista lingüístico, desde la filosofía, no es tan fácil definir un concepto, el problema es muy debatible si se empieza a cuestionar cómo se define el fin de un objeto o que partes sí constituyen a una entidad. En general, es muy difícil definir qué relaciones son correctas debido a que las personas pueden diferir en ciertos aspectos debido a su distinto conoci- miento, cultura o ideas preconcebidas y subjetivas. 5 Capítulo 3 Ontología El origen de la ontología, como muchas otras ramas de la ciencia, nace de la Antigua Grecia. Así, una ontología en el sentido filosófico es la explicación siste- mática de la existencia como es percibida por los humanos. Sin embargo, existe una gran controversia en su definición, y, heredado de su carácter filosófico, existe un amplio debate sobre la aplicación informática de la ontología. Una definición desde el punto tecnológico podríaser el siguiente, una ontología es la representación de toda información estructurada de un campo específico en un modelo informático. Evidentemente, esta afirmación es vaga y simple, pero es útil para concebir una primera sencilla definición del concepto. A la hora de representar un concepto existen dos problemas, entidades depen- dientes de la mente y “términos generales”. Las relaciones qualia definidas pre- viamente en el capítulo 2, permiten delimitar las propiedades subjetivas de las entidades físicas, sin embargo, ¿qué ocurre con las propiedades de entidades subjetivas como el concepto de “Unicornio”? La realidad es que no existe ni definición formal ni presencia física del concepto “Unicornio”, es decir, se trata de un concepto donde cada persona puede tener una definición distinta. Este efecto no solo ocurre para objetos no existentes en nuestra realidad, de la misma forma, cualquier objeto está sujeto a la malinter- pretación de su concepto por la persona que esté definiendola, dando lugar a distintas representaciones de la misma idea. Por otro lado, filósofos debaten constantemente si verdaderamente existe una definición universal y objetiva del concepto de “términos generales”, llamado universalismo, y, aún existiendo, no se sabe cómo ha de ser representada. Es- te debate involucra al estudio de la metafísica, así, la tarea de representar el conocimiento se vuelve ardua. Una buena ontología busca representar información de un dominio de una for- ma estructurada tal que esta sea capaz de alcanzar la cantidad y precisión ob- jetivo de la información. Si tuvieramos la palabra “bolsa de plástico”, su imple- mentación en la ontología tendría dos formas, un plástico que forma una bolsa, o una bolsa que tiene plástico como material. Resultaría lógico pensar que se 7 trata de una bolsa que tiene plástico como material, puesto que el término es “bolsa de plástico” y no “plástico bolsa”, entonces, esta definición representaría la palabra “bolsa de plástico” en la ontología por decisión propia de la persona que así lo haya decidido. Nótese que la información de la ontología dependerá plenamente de la informa- ción que se busque representar, generalmente esta información y estudio de la metafísica la realiza un experto en el dominio. Obviamente, las ontologías no son iguales entre si, ni en los objetivos ni en el modelo informático de implementación. A continuación, se mostrará algunos ejemplos de tipos ontología sin entrar en detalle puesto que cada ontología puede ser muy diferente dependiendo de cómo busca representar la información. En bastante común que, en el ámbito de las matemáticas, las afirmaciones sobre el conocimiento se expresen mediante lógica predicativa de primer o superiores órdenes, como ocurre con la siguiente afirmación “Todas las personas tienen un amigo”. ∀x(Person(x) =⇒ ∃y(Person(y) ∧ isFriend(x, y))) (3.1) Sin embargo, la misma afirmación, definiciones y relaciones se pueden imple- mentar mediante lenguajes de programación lógica como es PROLOG o Lógica Descriptiva. Person � ∃isFriend.Person (3.2) El experto en el dominio decide el lenguaje de implementación a usar, por ejem- plo, si se toma la decisión de implementar un conocimiento verbalizado como en (3.1), se opta por lógica predicativa de primer orden. Sin embargo, si se prefiere un conocimiento más digerido y fácil de interpretar como en (3.2), se opta por Lógica Descriptiva. El lenguaje más usado actualmente en ontologías es Web Ontology Laguage OWL, el cual requiere conocimiento de su implementación mediante el formato RDF/XML que permite un rápido procesado de fichero tipo texto donde se guar- da la información del término de la ontología. El siguiente código es un ejemplo muy corto del lenguaje OWL. <owl:Class rdf:ID="VintageYear/> <owl:DatatypeProperty rdf:ID= 2earValue» <rdfs:domain rdf:resource="#VintageYear/> <rdfs:range rdf:resource="&xsd;positiveInteger/> </owl:DatatypeProperty> </owl:Class> Para una visualización más sencilla, se utiliza la herramienta de entorno de desarrollo ontológico (ODE) como Protégé, creado por la Universidad de Stanford, para acceder, manejar y desarrollar ontologías sencillamente. 8 Ontología Figura 3.1: Imagen de la aplicación Protégé con la ontología gist abierta 3.1. Top-level ontology Una ontología superior (Upper Ontology), ontología de nivel superior (Top-level ontology) u ontología básica (foundational ontology) es un diseño de ontología que busca representar con amplitud toda la información existente en la realidad incluyendo conceptos abstractos como “proceso” y “objeto físico”. Este tipo de ontologías son muy útiles para extraer cualquier tipo de información genérica pero también son ambiciosas y complicadas, por lo que no existen muchas. Las ontologías de nivel superior tienen dos características principales: taxono- mía de clases y relaciones. La taxonomía de clases se define como la clasificación jerárquica de los concep- tos en subclases de otros conceptos. Es evidente reconocer que una manzana es una fruta, es decir, “manzana” es subclase de “fruta”, además, “fruta” es un subclase de “objeto físico”. Esto son universalismos relacionados generando re- laciones taxonómicas entre sí, sin embargo, es común distinguir entre un objeto único y su universalismo. El lenguaje OWL hace diferencia entre clase e ins- tancia, una instancia es un objeto único definido de dicha clase, por ende, no es lo mismo la manzana que compras en un supermercado que el universalis- mo “manzana” ya que la manzana de supermercado puede estar podrida pero eso no significa que todas las manzanas estén podridas. Las ontologías de nivel superior buscan poder jerarquizar desde objetos intangibles a incluso acciones temporales de forma sistemática. Como se ha podido observar, los objetos tienen relaciones taxonómicas, en con- creto, las ontologías buscan representar todas las relaciones existentes entre conceptos. En cualquier ontología existente, tenemos relaciones dependientes del dominio, como puede ser “inversión” con “dinero” en el dominio de merca- do de acciones, pero resulta que “inversión” está relacionado con “dinero” en el dominio de empresas. Algunas relaciones son independientes del dominio y 9 3.2. ETAP-3 y la ontología OntoETAP son representadas en ontologías de nivel superior, algunas de estas relaciones son relaciones qualia como “x es una parte de y” la cual solo encontraríamos en ontologías de nivel superior u ontologías muy específicas cuyo dominio puede incluir esta relación. Es importante mencionar que los objetos tienen atributos, por ejemplo, en ge- neral, los plátanos son de color amarillo, es decir, plátano tiene un atributo tipo color el cual es amarillo. Sin embargo, existen plátanos que son rojos u otros co- lores, además, otras ontologías pueden decidir que los colores pueden ser texto simple, números hexadecimales o más. Algunas ontologías como DOLCE defi- nen “Color” como una clase que, a su vez, es subclase de “Cualidad física” y el color amarillo se definiría como instancia de la clase “Color”. El campo de desarrollo objetivo de este trabajo es la lingüística computacio- nal y el análisis de todo lenguaje natural. En el lenguaje coloquial y formal, se usan términos y conceptos de cualquier dominio en las oraciones, por ende, es primordial poder extraer información de las relaciones entre conceptos indepen- dientes del dominio, por lo que estas ontologías de nivel superior son de suma importancia para extraer información. 3.2. ETAP-3 y la ontología OntoETAP ETAP-3 es un sistema de traducción creado por una institución académica que busca emular la capacidad lingüística de un ser humano para “entender” y “ha- blar”. Además, se trata de un sistema multifuncional con funciones importantes como las siguientes: Traducción máquina Comunicación multilengua mediante interlengua Parafrasear manteniendo el significado original Interfaz de lenguaje natural a bases de datos Para lograr estas funciones, se sirve de diccionarios completosde cada idioma y una gramática comprensible. El proceso de análisis de oraciones se divide en etapas que transforman el texto en una estructura normalizada completo de significado. Una opción de ETAP-3 es SemETAP, la cual se encarga de analizar el carácter semántico de la oración mediante la estructura sintáctica de una frase SyntS en dos niveles, BSemS interpreta el texto mediante información la ontología Onto- ETAP y EnSemS realiza una serie de inferencias sobre BSemS. Otras implementaciones como Cimiano tienen dominios específicos que deben inicializarse con anterioridad, SemETAP busca una implementación de inferen- cias con recursos ontológicos muy expresivos e independientes de dominio. La ontología de ETAP, OntoETAP, usa formato RDF y el lenguaje Etalog, suficien- temente expresivo para realizar inferencias sobre este y poder realizar consultas SPARQL. Además, más de 200 mil entidades proceden de DBpedia. 10 Ontología 3.3. Estudio de ontologías existentes La lista de ontologías existentes es demasiado larga, existen ontologías de mu- chos dominios diferentes y con numerosas implementaciones. Por ejemplo, se- gún el repositorio web de ontologías de dominio biomédico BioPortal, existen más de 950 ontologías totales con numerosos fines, más de 14 millones de obje- tos de estudio y alrededor de 36 mil propiedades, obviamente contando posibles redundancias. Además, cada uno puede tener una implementación distinta o un estándar asociado. Objetivamente, la mayor parte de los estudios sobre recursos ontológicos se re- ducen a dominios concretos y búsquedas muy específicas, pues suelen ser ob- jetivo de extracción de información para máquinas de inferencias o inteligencia artificial en campos concretos, como puede ser el estudio de enfermades relacio- nadas o recolección de información en la biomedicina. Para el objetivo de este trabajo, siendo esta la extracción de relaciones qualia sin ninguna selección de dominio en concreto, se va a reducir la búsqueda de ontologías a un dominio muy reducido puesto que no es realista catalogar +10.000 ontologías con un nivel de detalle elevado. Principalmente, las ontologías de este estudio van a ser ontologías públicas de nivel superior, estas ofrecen mucha información relevante y estructurada, ade- más, suelen ser proyectos públicos, colaborativos y moderablemente estandari- zados lo cual implica un reducido y adecuado número de recursos ontológicos accesibles para la extracción automática de relaciones qualia. A pesar de esta simple delimitación del conjunto total de ontologías a investigar, la realidad es que el número de buenas ontologías existentes es muy reducido. Como se ha podido apreciar en este capítulo, las ontologías de nivel superior son proyectos costosos y únicos, generalmente, la investigación de los recursos accesibles resulta en la selección de una sola ontología, debido a ontologías privadas, ontologías muy pequeñas y ontologías no útiles para los fines este trabajo. A continuación, se procederá a detallar los aspectos más importantes de distin- tas ontologías existentes y su grado de utilidad en la extracción de relaciones qualia como resultado de la investigación realizada. 3.3.1. DOLCE También conocido como Descriptive Ontology for Linguistic and Cognitive En- gineering (DOLCE), se caracteriza por su sesgo cognitivo, es decir, busca repre- sentar las categorías ontológicas bajo el lenguaje natural y el sentido común humano. Además, no hace uso de universales únicamente, se utilizan particu- lares, los cuales son entidades sin instancias. Esto reduce el gran problema de metafísica inherente al diseñar ontologías. Una característica especial asociada a DOLCE es la existencia de variabilidad temporal. Un ejemplo es una jarrón de arcilla, con el paso del tiempo, el jarrón puede sufrir cambios radicales en su forma, topología y aperiencia, mientras que 11 3.3. Estudio de ontologías existentes la cantidad de arcilla es invariante con el tiempo. Por lo tanto, son propiedades diferentes pero coexisten en el jarrón de arcilla. DOLCE es un modelo único, permite la distinción entre objetos abstractos y físicos, dependencias espaciales, endurants y perdurants, las cuales definen en- tidades existentes en cualquier momento o solo en ciertos espacios de tiempo respectivamente. También existe la diferencia entre cualidad y calidad, o en in- glés, quality y quality. Si se habla del color de una rosa, esta es la cualidad de dicha rosa, si se habla del estado del color dado de la rosa, pasa a ser una calidad. Figura 3.2: Imagen de la jerarquía taxonómica DOLCE-lite A pesar de tener propiedades relacionadas con el término quale, no afecta al ámbito de relaciones qualia, por lo que no tiene ningún beneficio en este aspecto. Por otro lado, realiza distinciones en las entidades dependiendo de su estado temporal, característica que la ontología OntoETAP no tiene y puede llegar a dificultar la implementación. Sin embargo, el problema más importante de DOLCE es su implementación ac- tual, DOLCE tiene como objetivo ser un modelo aplicable para nuevas ontologías, por esto, no se trata de una ontología grande ni útil en sus pocas implementa- ciones en OWL como DOLCE-lite o DOLCE+DnS Ultralight. 3.3.2. BFO Desarrollado en el instituto IFOMIS en Leipzig, Basic Formal Ontology (BFO) es una ontología de nivel superior que busca dar solución al problema del punto de vista de la realidad 3-dimensional y 4-dimensional mediante una ontología Snap de elementos estáticos y Span de eventos temporales. En comparación a DOLCE, BFO trabaja con particulares y englosa un número de universales reconocidos por BFO y denominados nominales. BFO distingue entre endurants y perdurants, la ontología Snap registra todos los endurants, los cuales sirven para delimitar los aspectos estáticos temporalmente en la realidad, y la ontología Span registra los perdurants, sucesos, eventos y entidades que tienen partes temporales. La ventaja subyacente de tener las dos ontologías separadas es la relación de distintos elementos estáticos en Snap tal que todos estos corresponden a los distintos espacios temporales de un elemento de Span. En su versión 1, se trataba de una ontología compuesta únicamente de taxo- nomías, por ello, se sirve de una ontología de relaciones y propiedades llamada 12 Ontología Figura 3.3: Relaciones temporales entre SNAP y SPAN Relation Ontology (RO). Existen distintas extensiones de RO donde se propo- nen distintas mejoras y consideraciones. Una vez más, la implementación de la ontología no la convierte en un buen candidato de extracción de información. 3.3.3. gist gist es una ontología de nivel superior minimalista creada por Semantic Arts. gist tiene como objetivo servir como base para sistemas de información en empresas que cubren el mayor número de conceptos ontológicos típicos de negocios con la menor cantidad de ambiguedades. Figura 3.4: Ejemplo de la ontología gist Entre sus muchas características, destaca la desambigüedad, su robusted y su fácil comprensión. En cambio, gist es una ontología OWL-RDF bastante pequeña (alrededor de 140 clases y 130 propiedades) con conceptos muy concretos que cualquier persona puede coincidir. A pesar de la utilidad de gist, sus relaciones qualia podrían extraerse manual- mente uno por uno sin errores con un margen temporal de días. gist no es una ontología útil para realizar extracción automática de relaciones qualia, todas sus relaciones se podrían extraer manualmente sin ningúna desventaja a una extracción automática. 13 3.3. Estudio de ontologías existentes 3.3.4. SUMO Como se ha visto previamente en este capítulo, una ontología de nivel superior requiere conocimientos de filosofía e informática, además, las interpretaciones e implementaciones son varias. Sin embargo, ante la falta de consenso por ex- pertos de distintos campos, se propuso un estándar público, colaborativo y li- bre para ontologías grandes de nivel superior llamado Standard Upper Ontology (SUO). SUO estandariza los “términosgenerales” y sus definiciones y sirve co- mo base para nuevas ontologías permitiendo la interoperabilidad entre sistemas ontológicos que sigan el estándar SUO. La ontología de nivel superior Suggested Upper Merged Ontology (SUMO) fue creada en Teknowledge Corporation derivada de SUO. SUMO se creó uniendo distintas ontologias públicamente accesibles y todavía sigue siendo un proyecto colaborativo y en progreso. La implementación del conocimiento de SUMO se realiza mediante una versión de Knowledge Interchange Format (KIF) llamada SUO-KIF, la cual busca la rapidez y simplificación del formato KIF. A día de hoy, SUMO tiene más de 25 mil términos (mapeados de WordNet) y 80 axiomas, la ontología es accesible tanto de forma online por portales web o su descarga como base de datos relacional por github. El portal web Sigma (accesible desde https://sigma.ontologyportal.org:8443/sigma/KBs.jsp) tiene un motor de búsqueda integrado mediante WordNet[3], donde se puede esribir cualquier palabra del inglés, y el motor de búsqueda ofrece el resultado buscado como página web de fácil acceso y visualización. Figura 3.5: Entrada de “Table” en el portal web Sigma de la ontología SUMO En contraposición a ontologías con un punto de vista 4-dimensional, SUMO adopta una orientación 3-dimensional al diferenciar entre objetos (Object) y pro- cesos (Process) como términos diferentes. No solo SUMO no tiene desventajas, además, tiene una enorme cantidad de beneficios para la extracción de información, como una fácil representación de la información y concordancia en términos con la ontología OntoETAP. 14 Capítulo 4 SUO-KIF Una vez elegido SUMO como ontología objetivo de extracción, es necesario en- tender cómo se escriben las relaciones en su lenguaje SUO-KIF. Esta sección tiene como objetivo enseñar la mínima información necesaria para extracción relaciones qualia, es decir, no se busca la comprehensión de los beneficios de este lenguaje o su funcionamiento detallado como lenguaje sino poder entender las relaciones y afirmaciones descritas mediante SUO-KIF. SUO-KIF no es lenguaje de programación lógica como Prolog o una simple base de datos relacional, está diseñado para ser un lenguaje de primer orden el cual permite alcanzar una buena representación expresiva de la información sin lle- gar a la complejidad de mayores órdenes. Diferente a cualquier otro lenguaje, hay cuatro categorías de constantes, la cuales solo se diferencian semántica- mente. Para los siguiente ejemplos de relaciones en SUO-KIF: (4.1) “(instance Germany Country)” “(GovernmentFn Germany)” (4.2) Constantes de objetos =⇒ Germany o Country Constantes de funciones =⇒ GovernmentFn Constantes de relaciones =⇒ instance Constantes lógicas =⇒ True ó False Una constante de objeto define entidades y clases en SUO-KIF, en la primera frase de (4.1), se está inicializando la clase “Country” (País) con el nombre “Ger- many” (Alemania). Mientras tanto, en la segunda frase de (4.1), una función define a cada valor un objeto asignado, de esta manera, si “Germany” es el ob- jeto que denota “Alemania” y “GovernmentFn” es una función que devuelve el gobierno de algo, “(GovernmentFn Germany)” devuelve una constante de objeto la cual es la entidad del gobierno de Alemania. 15 De forma análoga a constantes de objetos y funciones, una constante lógica es True ó False, es decir, verdadero o falso, y una relación denota a una serie de constantes de objetos tal que devuelve otra constante lógica. A pesar de su ex- traña definición, esta constante se usa para denotar relaciones entre términos, sin embargo, dentro de operadores lógicos, estas devuelven True si se verifica la relación. Las relaciones más básicas son instance y subclass, por ejemplo, “(instance The82ndAirbone MilitaryUnit)” se traduce a “La 82ª División Aero- transportada es una unidad militar” y “(subclass Person Animal)” se traduce a “La persona es un tipo/subclase de animal”. SUO-KIF implementa los distintos operadores lógicos de lógica primer orden que trabajan con constantes lógicas y relaciones: not, or, and, =>, <=>, exists y forall. Las siguientes tablas sirven de ilustración para ver el comportamiento de los operadores. A (not A) T F F T A B (or A B) (and A B) (=> A B) (<=> A B) T T T T T T T F T F F F F T T F T T F F F F T F Las variables de SUO-KIF comienzan con ? o @ precedido de cualquier letra y dígito. Si empieza por @, se trata de una sequencia de variables, aunque no se entrará en detalle cómo se maneja todas las variables de la sequencia. Las variables pueden tomar cualquier valor de objeto pero, semejante a lenguajes lógicos de primer orden, se puede limitar el conjunto de valores que abarca con los operadores exists y forall. El operador exists limita la existencia de al menos un valor de la variable por el cual se cumplen las condiciones lógicas que la involucran, devolviendo True si se cumple esto o False si no es el caso. El operador forall, en cambio, exige el cumplimiento de todas las condiciones lógicas que la involucran para todo valor de variable posible de su conjunto, devolviendo True si se cumple o False si no es el caso. Por último, una afirmación es un conjunto de constantes, variables y operado- res tal que caracterizan una propiedad o valor de un elemento. Para marcar el inicio de una relación, función u operador, se abre paréntesis y la última cons- tante o variable cierra el paréntesis, permitiendo encadenación de afirmaciones e incluso permitiendo alcanzar órdenes superiores. Un ejemplo de afirmación: “A todos los granjeros les gusta el tractor” 1 (forall (?F ?T) 2 (=> 3 (and 4 (instance ?F Farmer) 5 (instance ?T Tractor)) 6 (likes ?F ?T))) 16 SUO-KIF La definición formal de la anterior afirmación es la siguiente: “Para todo ?F y ?T, si ?F es un granjero y ?T es un tractor, entonces ?F le gusta ?T”. Sin embargo, si una variable no está cuantificada por alguno de los operadores exists o forall, su cuantificación dependerá del uso de la variable, si ocurre en una query, se supone la existencia de un operador exists sobre la variable, en otro caso se supone la existencia de un operador forall que obliga a la variable a cumplir la afirmación para todo posible valor. En el siguiente caso se puede observar como se puede omitir el operador forall debido a la cuantificación obligatoria mencionada previamente. “Todo el mundo tiene un amigo” 1 (exists ?SOMEONE 2 (friends ?SOMEONE ?X)) Donde la afirmación completa equivalente es: 1 (forall ?X 2 (exists ?SOMEONE 3 (friends ?SOMEONE ?X))) La definición formal de la afirmación es la siguiente: “(Para todo ?X,) existe ?SO- MEONE tal que ?X es amigo de ?SOMEONE”. Las afirmaciones de la ontología SUMO suelen tener dos formas, relaciones di- rectas e implicaciones, a continuación, se va mostrar distintos ejemplos de afir- maciones en SUO-KIF pertenecientes a SUMO: “Los caninos ladran” 1 (=> 2 (instance ?B Barking) 3 (exists (?D) 4 (and 5 (instance ?D Canine) 6 (agent ?B ?D)))) “Si ocurre una sequía en cualquier lugar, entonces no ocurren lluvias mien- tras haya sequía en la región de dicho lugar” 1 (=> 2 (and 3 (instance ?DRYSPELL Drought) 4 (eventLocated ?DRYSPELL ?AREA)) 5 (not 6 (exists (?RAIN ?PLACE) 7 (and 8 (instance ?RAIN Raining) 9 (instance ?PLACE Region) 17 10 (eventLocated ?RAIN ?PLACE) 11 (overlapsSpatially ?PLACE ?AREA) 12 (overlapsTemporally ?RAIN ?DRYSPELL))))) “Las organizaciones que proveen equipamiento y recursos para la gardine- ría o construcción tienen un miembro que vende objetos los cuales son o recursos de construcción o recursos de agricultutra” 1 (=> 2 (and 3 (instance ?ORG Organization) 4 (attribute ?ORG BuildingMaterialAndGardenEquipmentAndSuppliesDealers)) 5 (exists (?EV ?MEM) 6 (and 7 (member ?MEM ?ORG) 8 (agent ?MEM ?EV) 9 (exists (?THING) 10 (and 11 (instance ?EV Selling) 12 (instance ?THING Object) 13 (or 14 (capability Constructing resource ?THING) 15 (capability Agriculture resource ?THING)) 16 (patient ?EV ?THING)))))) “El gato domético es un animal doméstico”1 (subclass DomesticCat DomesticAnimal) “El cepillo o peine tiene la función de servir de instrumento para quitar algo ó modificar la superficie de algo” 1 (=> 2 (instance ?B BrushOrComb) 3 (hasPurpose ?B 4 (exists (?S) 5 (and 6 (or 7 (instance ?S Removing) 8 (instance ?S SurfaceChange)) 9 (instrument ?S ?B))))) 18 Capítulo 5 Metodología Antes de empezar el desarrollo de la aplicación, hace falta evaluar la metodología a aplicar para extraer la información de relaciones qualia. Como se ha podido observar en el capítulo anterior, SUO-KIF es un lenguaje muy expresivo y sus relaciones no son directas. Para extraer relaciones qualia a partir de la informa- ción de SUMO, hace falta catalogar y decidir cuales relaciones deben ser extraí- das y cuales no aportan información y hace falta ver cómo SUMO representa las relaciones qualia. Sea el término “Automóvil” (Automobile) perteneciente a SUMO, Automobile es una entrada de SUMO muy completa respecto al número de relaciones por lo que es un buen ejemplo para analizar. La primera regla de Automobile es su documentación. La documentación de cada término de SUMO nos ofrece un poco de información al respecto mediante lenguaje natural. Cada documentación sigue la siguiente estructura. 1 (documentation Elemento Idioma "Texto de la documentacion") Para el caso de Automobile, su documentación sería la siguiente. 1 (documentation Automobile EnglishLanguage "Automobile is a subclass of SelfPoweredRoadVehicles including passenger cars, family vans, light trucks, and sport utility vehicles. In general, this class covers four-wheeled passenger road vehicles.") Donde se obtiene un texto que define ligeramente Automobile, este texto men- ciona algunas subclases de Automobile, pero lo más importante es “Automobile is a subclass of SelfPoweredRoadVehicles[...]” donde se expone que Automobile es subclase de SelfPoweredRoadVehicle, es decir, (5.1) Automobile Formal: SelfPoweredVehicle 19 De hecho, esto no solo ocurre con relaciones de subclase, a continuación se va a mostrar una serie de ejemplos donde se puede obtener distintas relaciones qualia a partir de la documentación. (5.2) Documentación del término “Carta” (Letter): 1 (documentation Letter EnglishLanguage "A brief message which is intended to be mailed to a person or Organization.") Letter Télico: be mailed to a Person or Organization (5.3) Documentación del término “Bolsa/Bolso” (Bag): 1 (documentation Bag EnglishLanguage "A Pliable Container with the purpose of Transfer of Object.") Bag Télico: Transfer of Object (5.4) Documentación del término “Mesa” (Table): 1 (documentation Table EnglishLanguage "A piece of Furniture with four legs and a flat top. It is used either for eating, paperwork or meetings.") Table Constitutivo: four legs and a flat top (5.5) Documentación del término “Artefacto” (Artifact): 1 (documentation Artifact EnglishLanguage "An Object that is the product of a Making.") Artifact Agentivo: Making Cada documentación denota propiedades qualia importantes mediante palabras específicas como se puede observar en (5.1-5) con las palabras subclass, inten- ded, purpose, with y product. Sin embargo, el análisis de lenguaje natural es mucho más complicado, identificar las entidades relacionadas con el término re- quiere un análisis sintáctico. A veces incluso, algunas palabras no existen como términos en la ontología, en (5.4), aparece el término “flat top” pero no existe ni flat top ni top en ninguna forma variante dentro de las ontologías, por esta razón, la documentación se añadirá como texto plano pues su análisis es dema- siado complejo debido a redundancias y lenguaje natural (esta decisión se debe 20 Metodología a la interoperabilidad y la posibilidad de hacer un programa flexible que extraiga relaciones qualia independientemente del lenguaje de la ontología final). Avanzando en las entrada de Automobile, aparecen las relaciones externalImage, termFormat, industryProductType y subclass. externalImage simplemen- te es un link a una imagen de dicho término y termFormat es una traduc- ción del término en distintos idiomas, por lo que ambos resultan irrelevantes. industryProductType, en cambio, define el tipo de industrias de origen tal que 1 (industryProductType AutomobileManufacturing Automobile) define al automóvil como un producto originario de industrias de fabricación de automóviles. Existe un detalle importante de esta relación, el automóvil es originario de una fabricación, es decir, el rol agentivo de Automobile debería ser AutomobileManufacturing. Sin embargo, en SUMO, estas entidades son atributos de organizaciones y no eventos, es decir, según SUMO, el rol agentivo de automóvil no es el tipo de una industria AutomobileManufacturing, sino el evento de fabricar objetos Manufacture. Por esta razón, esta relación no tendrá ningún valor en la extracción de relaciones qualia. La relación subclass es bastante directa, siempre define el rol formal de su primer argumento. 1 (subclass Automobile PassengerVehicle) 2 (subclass Automobile PhysicalSystem) 3 (subclass Automobile SelfPoweredRoadVehicle) (5.6) Automobile Formal: SelfPoweredVehicle, PhysicalSystem, PassengerVehicle Agentivo: Manufacturing Como se puede observar en (5.1) y (5.6), SelfPoweredVehicle ya estaba descu- bierto gracias a su documentación, en general, la documentación ofrece menos información respecto a subclases en comparación con estas relaciones. El resto de relaciones de subclases de Automobile no son relevantes para las qualia de Automobile. Al final de estas relaciones/afirmaciones básicas sin implicaciones lógicas, apa- recen dos términos, typicalPart y typicallyContainsPart. En concreto, typicalPart es una relación complicada por la siguiente razón: 1 (typicalPart AutoSuspensionSystem Automobile) Esta relación implica que la suspensión es usualmente una parte del coche. Aunque parezca contradictorio, typicalPart no siempre define un rol qualia de un término. Si bien typicalPart nos dice que un automóvil tiene una suspen- sión, rol constitutivo, realmente esta relación no tiene por qué ser válida para todas las entidades. Sea el siguiente ejemplo inventado para un edificio. 21 1 (typicalPart Bedroom Building) Esta relación nos dice que un dormitorio es usualmente una parte de un edificio, lo cual es completamente cierto, pero un edificio no tiene por qué tener un dor- mitorio, de hecho, una gran parte de edificios no tiene dormitorio. typicalPart no debería definir generalmente un rol qualia bajo esta definición, sin embargo, en SUMO, muchos términos tienen sus partes definidas de esta forma, como es el caso del tracto gastrointestinal que está formado por el esófago, intestino, boca, recto y estómago: 1 (typicalPart Esophagus GastroIntestinalTract) 2 (typicalPart Intestine GastroIntestinalTract) 3 (typicalPart Mouth GastroIntestinalTract) 4 (typicalPart Rectum GastroIntestinalTract) 5 (typicalPart Stomach GastroIntestinalTract) La entrada del término relacionado a tracto gastrointestinal solo tiene estas re- glas (y su documentación) que mencionan sus partes constituyentes. Por esta razón, se ha obtado incluir a typicalPart como definición de rol constitutivo a pesar de que esto no debería ser así. El caso de typicallyContainsPart es trivial, sí forma rol constitutivo. Un caso no mencionado en Automobile es la relación initialPart. 1 (initialPart Hair Animal) Según la definición de initialPart, esta relación implica que para cada “pelo” que exista, este pertenece a un animal, aunque este animal luego en otro tiempo pueda perder este pelo. Esto define un rol constitutivo si no se tiene en cuenta el factor temporal. Avanzando en la entrada de Automobile una vez más, se puede ver todas las afirmaciones de implicación donde Automobile pertenece como antecedente o consecuente. Estas implicaciones pueden llegar a ser complejas y variantes en muchos aspec- tos fundamentales. Se ha observado como se comportan las distintas relaciones qualia pertenecientes a estasafirmaciones de implicación. Frente al alto grado de error al intentar localizar las relaciones qualia, se ha priorizado encontrar el conjunto completo de relaciones qualia con falsos positivos a encontrar solo un porcentaje de todas las relaciones qualia sin capacidad de error. Como resulta- do, se ha optado por seguir un método sencillo para poder localizar todas las relaciones qualia aunque esto implique extraer relaciones que no pertenezcan al qualia del término. De todas las afirmaciones existentes, podemos encontrar las siguientes relacio- nes qualia de rol constitutivo. 22 Metodología (5.7) Concepto = Automobile 1 (=> 2 (and 3 (instance ?C Clutch) 4 (instance ?A Automobile) 5 (instance ?E Engine) 6 (instance ?G Gearbox) 7 (instance ?GEAR Gear) 8 (part ?GEAR ?G) 9 (part ?G ?A) 10 (part ?C ?A) 11 (part ?E ?A) 12 (instance ?M Motion) 13 (patient ?M ?E) 14 (attribute ?C DeviceOff)) 15 (exists (?M2) 16 (and 17 (instance ?M2 Motion) 18 (patient ?M2 ?G) 19 (causes ?M ?M2)))) (5.8) 1 (=> 2 (and 3 (instance ?ECS EngineCoolingSystem) 4 (instance ?E Engine) 5 (instance ?A Automobile) 6 (part ?ECS ?A) 7 (part ?E ?A)) 8 (hasPurpose ?ECS 9 (exists (?C) 10 (and 11 (instance ?C Cooling) 12 (instrument ?C ?ECS) 13 (patient ?C ?E))))) (5.9) 1 (=> 2 (instance ?A Automobile) 3 (equipmentCount ?A Axle 2)) (5.10) 1 (=> 2 (instance ?A Automobile) 3 (equipmentCount ?A VehicleWheel 4)) En (5.7) y (5.8), podemos encontrar las relaciones part la cual denota que un objeto es parte de otro, aun así, en situaciones normales, esto no es suficiente para denotar relación qualia de rol constitutivo pero, en general, si que ofrece 23 información sobre relaciones qualia posibles. En (5.7), se tiene que el motor (Engine) es parte del automóvil (Automobile) y el motor verdaderamente toma un rol constitutivo en la estructura de qualia de automóvil. Por otro lado, las relaciones (5.9) y (5.10) dicen que un automóvil tiene 2 ejes y 4 ruedas, entonces, equipmentCount es importante porque siempre son relación qualia. Cabe destacar que estas relaciones ofrecen información sobre el funcionamiento de las componentes, aunque pueda no ser relevante desde el punto de vista de la estructura de qualia, Etalog es un lenguaje que puede usar parte de esta información completa, este punto de vista se tratará en el capítulo de traducción de las reglas. Para finalizar la búsqueda de qualias con rol constitutivo, existe una relación que no existe en la entrada de Automobile, para ello, se muestra la siguiente afirmación de “Edificio” (Building) que define una habitación como parte de un edificio. Concepto = Building 1 (=> 2 (instance ?ROOM Room) 3 (exists (?BUILD) 4 (and 5 (instance ?BUILD Building) 6 (properPart ?ROOM ?BUILD)))) Anteriormente en (5.8), se ha podido ver la relación hasPurpose, aunque no estaba relacionada con el término Automobile, esta relación define el rol télico de un objeto. A continuación se va a ver unos cuantos ejemplos de hasPurpose. (5.11) Concepto = Seat 1 (=> 2 (instance ?SEAT Seat) 3 (hasPurpose ?SEAT 4 (exists (?PERSON) 5 (and 6 (instance ?PERSON Human) 7 (located ?PERSON ?SEAT) 8 (attribute ?PERSON Sitting))))) Seat Télico: Human Sitting Asiento sirve para que un Humano se coloque en el asiento y pase a estar sentado. (5.12) Concepto = Bag 1 (=> 2 (instance ?BAG Bag) 24 Metodología 3 (hasPurpose ?BAG 4 (exists (?T ?OBJ) 5 (and 6 (instance ?T Transfer) 7 (instance ?OBJ Object) 8 (contains ?BAG ?OBJ) 9 (instrument ?T ?BAG) 10 (patient ?T ?OBJ))))) Bag Télico: Transfer contained Object Bolsa/Bolso sirve para transferir un objeto contenido. (5.13) Concepto = Hammer 1 (=> 2 (instance ?H Hammer) 3 (hasPurpose ?H 4 (exists (?I ?N) 5 (and 6 (instance ?I Impelling) 7 (instrument ?I ?H) 8 (patient ?I ?N) 9 (instance ?N Nail))))) Hammer Télico: Impelling Nail Martillo sirve para Impulsarse y el Clavo es afectado por el impulso. “Martillo sirve para clavar Clavos” (5.14) Concepto = Device 1 (=> 2 (instance ?DEVICE Device) 3 (exists (?PROC) 4 (hasPurpose ?DEVICE 5 (exists (?INST) 6 (and 7 (instance ?INST ?PROC) 8 (instrument ?INST ?DEVICE)))))) Device Télico: Instrument Dispositivo es instrumento para algo. En (5.11-14), se puede observar que el rol télico de cada entidad no es tan inme- diato, hasPurpose funciona de tal manera que define una serie de relaciones que 25 se deben cumplir. Esto se debe a que SUO-KIF, al fin y al cabo, es un lenguaje de primer orden que permite definir funciones que no pertenecen directamente a la ontología o permite expandir información al respecto. Esto es un problema para definir una estructura qualia pero, para el lenguaje Etalog, se puede conseguir reglas equivalentes. En (5.12-14), se puede ver la existencia de la relación instrument, este denota la entidad de servir para realizar un evento, sin embargo, es otro claro caso de una relación que no aporta información fiable sobre el rol télico como se puede ver en los siguientes dos ejemplos. (5.15) Concepto = Mouth 1 (=> 2 (and 3 (instance ?BITE Biting) 4 (agent ?BITE ?ANIMAL)) 5 (exists (?MOUTH) 6 (and 7 (instance ?MOUTH Mouth) 8 (part ?MOUTH ?ANIMAL) 9 (instrument ?BITE ?MOUTH)))) Mouth Télico: Biting (5.16) Concepto = Face 1 (=> 2 (and 3 (instance ?EXPRESS FacialExpression) 4 (agent ?EXPRESS ?AGENT)) 5 (exists (?FACE) 6 (and 7 (part ?FACE ?AGENT) 8 (instance ?FACE Face) 9 (instrument ?EXPRESS ?FACE)))) Face Télico: FacialExpression En (5.15), el rol télico de la boca es morder, aunque esta afirmación pueda ser debatible, no sería incorrecto en cierto grado. En cambio, en (5.16), el rol téli- co de la cara es hacer expresiones faciales, sin embargo, la cara no tiene una función definida, a pesar de ser nuestro medio para mostrar emociones, esta se trata únicamente de una parte visual de la anatomía de un ser vivo pues forma la apariencia. Aun así, se ha tomado en cuenta para la extracción de relaciones qualia al igual que otras relaciones debatibles de este capítulo. Para finalizar la extracción del rol télico, existen dos relaciones útiles las cuales 26 Metodología son capability y hasSkill. Si bien sufren del mismo problema que instrument, se ha podido hallar un factor clave que marca el verdadero rol télico de la enti- dad. Véase con los siguientes ejemplos. (5.17) Concepto = Intestine 1 (=> 2 (instance ?I Intestine) 3 (capability Digesting instrument ?I)) Intestine Télico: Digesting (5.18) Concepto = Writer 1 (=> 2 (attribute ?PERSON Writer) 3 (hasSkill Writing ?PERSON)) Writer Télico: Writing Ambas relaciones son muy directas, en (5.17), se define al intestino como el instrumento para digestión, nótese la importancia de instrument para esta re- lación puesto que si un objeto tiene la capacidad de hacer algo, en general, este tiene el rol télico si es el instrumento por el cual se puede hacer dicha acción. En (5.18), solo los seres vivos tienen habilidades y si un individuo tiene una habili- dad, en general, esta es su función como individuo. Así, finalizando la extracción de los roles télicos de una entidad. Para finalizar, queda el rol agentivo, este es mucho más sencillo y directo. Des- graciadamente, existen muy pocas entidades en SUMO que tienen definidas su razón de nacimiento u origen, la única relación directa encontrada se puede ver en los dos siguientes ejemplos. (5.19) Concepto = Text o Document 1 (=> 2 (and 3 (attribute ?X Writer) 4 (or 5 (instance ?TEXT Text) 6 (instance ?TEXT Document)) 7 (instance ?WRITE Writing) 8 (agent ?WRITE ?X) 9 (result ?WRITE ?TEXT)) 10 (authors ?X ?TEXT)) Document 27 Agentivo: Writing Text Agentivo: Writing (5.20) Concept = Text 1 (=> 2 (instance ?W WrittenCommunication) 3 (exists (?T ?C ?S) 4 (and 5 (result ?W ?T) 6 (instance ?T Text) 7 (part ?C ?T) 8 (instance ?C Character) 9 (instance ?S Script) 10 (member ?C ?S)))) Text Télico: Writing, WrittenCommunication Aquí se puede observar la existencia de la relación result donde un texto es resultado de la escritura o la comunicación escrita. Esta relacióndice que un objeto es resultado de un evento y, evidentemente, esto define el rol agentivo de la entidad con un alto grado de confianza. Nótese en (5.19) que aparece authors, esta relación define el creador de una entidad, el cual forma parte del rol agentivo de una entidad. Solo existen dos únicas entidades en SUMO que definen su autor gracias a esta relación, texto y programa electoral. La importancia de este capítulo ha sido delimitar cómo se va a realizar la extrac- ción de relaciones qualia, pues esta no depende de la implementación escogida. De igual forma, se puede argumentar que la traducción al lenguaje Etalog no depende de la implementación, sin embargo, Etalog es un lenguaje que admite ampliar la definición de ciertas reglas, expandiendolas más allá de la estructura de qualia por lo que la traducción depende de cómo se diseña la aplicación y cómo se guarda la información extraida. 28 Capítulo 6 Desarrollo La varias implementaciones de la información en la ontología SUMO son ideales para la extracción de datos. Sin embargo, SUMO es inusual respecto al resto de ontologías, no está originalmente implementado en OWL y tiene un portal web de acceso a la información contenida de SUMO mediante términos. Por esta razón, existen dos métodos de extracción de datos sobre SUMO. El primer método consiste en realizar queries sobre la ontología SUMO mediante sus ficheros KIF, un fichero RDF o una traducción al formato OWL. Este método no es tan directo como parece, existen varias formas de lograr realizar queries, comúnmente mediante SPARQL, para encontrar nodos de la base de datos pero SUMO no guarda una relación directa entre distintos nodos, haría falta, además, localizar todas las relaciones donde estos nodos participan expresados en el lenguaje SUO-KIF. El segundo método es más inusual aunque igual de efectivo y más sencillo, web scraping. El portal web de SUMO tiene implementado un buscador mediante la ontología WordNet que ofrece directamente todas las relaciones asociadas al término buscado. El programa consistiría en acceder a la página correspondien- te mediante un web scraper, extraer las relaciones asociadas y realizar parsing para hallar las relaciones qualia más adecuadas. Respecto al primer método, existe un trabajo extenso de la universidad de Colo- rado en Boulder de extracción automática de relaciones qualia sobre SUMO para la ontología REO cuya aplicación implementa su propio método de extracción de términos y relaciones asociadas[4]. Este trabajo, en cambio, se va a orientar so- bre la extracción de relaciones qualia mediante web scraping sobre el portal web de SUMO. Web scraping es una técnica muy común para extraer información de sitios web que consiste en establecer una conexión automática con la página para extraer información automáticamente a partir de su HTML o para simular las acciones de un usuario en la página web. El inconveniente que tiene es su aspecto ético, los métodos de web scraping pueden saturar el servidor debido al aumento de tráfico e, incluso, los servidores web pueden tener mecanismos para detectar y bloquear el acceso de web scrapers. El portal web de SUMO no tiene una 29 6.1. Python política en contra de web scraping, por lo que este método de extracción de datos es perfectamente ético siempre y cuando la ejecución de la aplicación no tenga efectos negativos sobre la página web. 6.1. Python Python es un lenguaje de programación de alto nivel con gran legibilidad que destaca por su gran comunidad de librerías y frameworks. Python destaca sobre otros lenguajes gracias a estas librerias que permiten el uso de Python para cualquier tipo de aplicación como la extracción de datos mediante web scraping y será el lenguaje escogido para el desarrollo de la aplicación. Existen varias librerías dedicadas únicamente para aplicaciones de web scra- ping, existen librerías de web scraping via HTTP o navegador web como Sele- nium, librerías de web scraping via web crawlers como Scrapy y librerías para parsing de ficheros HTML y XML como Beautiful Soup. Selenium es una librería principalmente usada para el testeo de aplicaciones web, por esta razón, otros lenguajes de programación para tests como Java con JUnit son más utilizados para Selenium, además, el tiempo de ejecución de un navegador es demasiado alto e innecesario para este trabajo. Scrapy, por otro lado, es la librería perfecta a usar en la extracción automática de datos. Aunque no ofrece la capacidad de interacción con la página, Scrapy permite obtener toda la información de la página como fichero HTML o como objetos tipo response con cada elemento HTML. Posteriormente, la información extraida pasaría por un parser. Existen distintas librerías para parsing como Beautiful Soup que nos permite trabajar sobre ficheros html, sin embargo, la extracción a extraer son solo ele- mentos simples de la página, por lo que Scrapy es suficiente para extraer la información deseada. Aun así, la información contenida ha de ser modificada y analizada por lo que es necesario hacer uso de la librería RegEx que trabaja con expresiones regulares para analizar con detalle la sintaxis de cada relación. En conclusión, la aplicación de extracción automática se va a realizar con Python y las librerías Scrapy y RegEx únicamente. 6.2. Modelo de la aplicación El modelo de la aplicación toma un papel fundamental en la organización de la aplicación. Desde el comienzo del desarrollo de la aplicación, se ha dividido el proceso de extracción por web scraping en varias fases simples y secuenciales. Paso 1. Inicialización del web crawler sobre un término dado. Paso 2. Extracción de las relaciones qualia apropiadas. Paso 3. Traducción de las relaciones SUO-KIF a Etalog. 30 Desarrollo La decisión de fases secuenciales se debe a que Scrapy funciona mediante web crawlers, lo cuales son procesos concurrentes que extraen la distinta informa- ción deseada. Para evitar cualquier posible colapso de página web tras la eje- cución de la aplicación, se va a seguir un proceso lineal, es decir, la aplicación esperará a que finalize cada web crawler antes de ejecutar el siguiente. Además, se ha considerado importante definir los objetivos o outputs de la apli- cación los cuales son la extracción de relaciones qualia procedentes de un tér- mino proporcionado por el usuario, guardarlas en fichero de texto y, posterior- mente, traducirlas. Esta forma de operar permite hacer peticiones de extracción de relaciones qualia sobre un término, lo cual es extremadamente útil para que una aplicación externa pueda generar o actualizar las relaciones de un elemento de la ontología. Aparte, se ha decidido no elegir un formato especial para guardar las relaciones como puede ser bases de datos como MongoDB o formato RDF, KIF u OWL. Las relaciones estarán escritas en Etalog, las cuales no necesitarán de un formato dedicado para guardar la información. 6.3. Inicialización del web crawler Un web crawler de Scrapy es especial, se trata de una clase Spider de Python que genera peticiones sobre una url y ejecuta una función proporcionada, ade- más, devuelven respuestas las cuales son objetos que proporcionan información sobre la petición finalizada y nada más. Los web crawlers se ejecutan mediante una función de línea de comandos y funcionan mediante un reactor que no es reiniciable, es decir, para realizar una nueva extracción sobre una nueva página, se ha de realizar fork del proceso o ejecutar nuevamente la aplicación. Para sortear esta dificultad, se ha creado un fichero aparte main.py que ejecuta el crawler de Scrapy mediante las siguientes líneas de código. 1 from scrapy.crawler import CrawlerProcess 2 import extrAuto.spiders.qualia_spider as qspider 3 4 process = CrawlerProcess() 5 process.crawl(qspider.QualiaSpider, start_url=str(sys.argv[1])) 6 process.start() Primero se importa CrawlerProcess y luego el Spider qualia_spider de qualia_spider.py que Scrapy va a usar para extraer información. Se inicializa un proceso y se proporciona elSpider a usar junto al argumento del término a proporcionar. Finalmente, process.start() espera a que finalizen los crawlers antes de proseguir con el código, permitiendo controlar cuando han terminado los crawlers. Cabe destacar que no soluciona del todo el problema del reactor de Scrapy, para extraer de un nuevo término, se ha de ejecutar main.py nueva- mente, de ahi la importancia se conocer cuando terminan los crawlers. Mientras tanto, se crea una carpeta llamada “extrAuto”, todos los archivos de configuración del web crawler los cuales no se han modificado y el fichero qualia_spider.py define la clase de Python de la siguiente forma. 31 6.3. Inicialización del web crawler 1 class QualiaSpider(scrapy.Spider): 2 name = "qualia" 3 4 def __init__(self, *args, **kwargs): 5 super(QualiaSpider, self).__init__(*args, **kwargs) 6 7 self.start_urls = [’https://sigma.ontologyportal.org:8443/sigma /Browse.jsp?flang=SUO-KIF&lang=EnglishLanguage&kb=SUMO&term =’+kwargs.get(’start_url’)] 8 9 def start_requests(self): 10 yield scrapy.Request(url=self.start_urls[0], callback=self. parse) Todo Spider debe ser identificado con un name único y debe tener la función start_requests(). El argumento proporcionado se registra en la función __init__ donde guarda la url de la página del término a extraer relaciones qualia. start_request() inicia una petición con la url inicial tal que ejecuta la función dedicada al parsing que se llama parse. Sin embargo, surge un problema con el web crawler, como ya se ha explicado an- tes, son procesos concurrentes que extraen información al mismo tiempo por lo que si cada uno intentara modificar el mismo fichero, pueden destruir o desor- ganizar el contenido dentro de este. Para combatir este problema, normalmente, se dedica un proceso concurrente aparte que crea una cola de peticiones para modificar el fichero y añade cada petición de forma secuencial, aun así, la pro- babilidad de desorganización es bastante alta puesto que las peticiones pueden modificar distintas partes del fichero a la vez. La solución escogida es más simple, aunque consume un poco más de memoria, se ha decidido usar un diccionario como variable global donde se guardan listas con las reglas escogidas. Como se accede a un diccionario, y posteriormente se modifica una lista, se ha usado una implementación mediante candados que bloquean la variable global para un uso síncrono entre hilos. Las primeras líneas de los imports y variables globales en el fichero qualia_spider.py, son las siguientes: 1 import scrapy 2 import re 3 import threading 4 5 C = ’constitutive’ 6 F = ’formal’ 7 T = ’telic’ 8 A = ’agentive’ 9 10 qualias = {’term’ : "", ’constitutive’ : list(), ’formal’ : list(), ’ telic’ : list(), ’agentive’ : list()} 11 32 Desarrollo 12 lock = threading.Lock() Se ha decidido utilizar acortamientos para cada rol de la estructura de qualia para su facilitar la comprensión y reducir cualquier error al escribir por parte del programador. 6.4. Extracción de las relaciones qualia apropiadas. En esta sección, se detallará el funcionamiento de la función parse para extraer relaciones qualia. Cuando Scrapy establece conexión con el servidor remoto, genera un objeto lla- mado response el cual es el encargado de extraer información de la página. Las aplicaciones de web scraping hacen uso de dos selectores que permiten localizar elementos HTML: XPath y CSS. CSS es un lenguaje para aplicar estilos sobre HTML, la aplicación hace uso úni- camente del selector CSS para saber cómo verdaderamente se escribe el término de la entrada, el cual se encuentra en el texto procedente del título y, poste- riormente, se guarda el término en el diccionario en caso de que no existiera antes. 1 if not qualias[’term’]: 2 qualias[’term’] = response.css("title::text").get().split() [0] Por otro lado, para hallar el resto de elementos, se usa XPath por razones de comodidad. XPath usa las etiquetas de los elementos HTML y sus atributos para crear una “dirección”. Por ejemplo, el siguiente selector encuentra todos los hiperenlaces. 1 $x(’//a’) Si se desea coger el nodo padre del elemento cuando el padre tiene la etiqueta “p”, se toma el siguiente XPath. 1 $x(’//p/a’) En caso de no especificar la etiqueta de algún elemento, se utiliza un asterisco. En el siguiente ejemplo, se coge cualquier nodo padre de un hiperenlace sin importar su categoría. 1 $x(’//*/a’) Sin embargo, XPath tiene una función clave para la extracción de información, como bien se ha visto en el capítulo 5, se busca relaciones con un nombre en es- pecífico, una sola palabra clave. Sea el caso donde se busca todas las relaciones 33 6.4. Extracción de las relaciones qualia apropiadas. subclass, se utiliza la función “contains(text(),’keyword’)” donde keyword es la palabra clave que se busca. 1 $x("//a[contains(text(),’subclass’)]") Este XPath devuelve todas los hiperenlaces donde aparece subclass, es im- portante buscar hiperenlaces porque el portal web de SUMO guarda todas las entradas y relaciones referenciadas como hiperenlaces en vez de texto plano. En la entrada del término Automobile, sea el siguiente código (implementación del selector XPath mediante el objeto response en Python) y las entradas extraí- das. 1 print(["".join(re.split(’<[^<>]*>’,incidences.get())) in incidences from response.xpath("//a[contains(text(),’subclass’)]/..")]) Salida del print: 1 [’(subclass Automobile PassengerVehicle)’, 2 ’Automobile is a subclass of passenger vehicle’, 3 ’(subclass Automobile PhysicalSystem)’, 4 ’Automobile is a subclass of physical system’, 5 ’(subclass Automobile SelfPoweredRoadVehicle)’, 6 ’Automobile is a subclass of self powered road vehicle’, 7 ’(subclass ChevroletAutomobile Automobile)’, 8 ’ChevroletAutomobile is a subclass of automobile’, 9 ’(subclass CommodoreAutomobile Automobile)’, 10 ’CommodoreAutomobile is a subclass of automobile’, 11 ’(subclass Corvette Automobile)’, 12 ’Corvette is a subclass of automobile’, 13 ’(subclass FordAutomobile Automobile)’, 14 ’Ford car is a subclass of automobile’, 15 ’(subclass HoldenToranaAutomobile Automobile)’, 16 ’Holden Torana is a subclass of automobile’, 17 ’(subclass MiniCooper Automobile)’, 18 ’Mini cooper is a subclass of automobile’, 19 ’(subclass Taxicab Automobile)’, 20 ’Taxicab is a subclass of automobile’] Como se puede observar, se obtiene la relación y su traducción en lenguaje natural. Es irrelevante la traducción a lenguaje natural para este trabajo por que solo se necesita coger las relaciones SUO-KIF, es decir, los elementos impares. Además, las relaciones de subclases de automóvil tampoco son relevantes para la estructura de qualia de Automobile. Aquí participa la librería RegEx, las relaciones buscadas tienen una estructura sintática a seguir, por lo que mediante expresiones regulares, se puede verificar si una relación tiene la sintaxis buscada. 34 Desarrollo 1 for incidences in response.xpath("//a[contains(text(),’subclass’)]/..") : 2 text = "".join(re.split(’<[^<>]*>’,incidences.get())) 3 var1 = re.search(’\(instance\ (\?\w+)\ ’+qualias[’term’]+’\)’, text) 4 varTerm = qualias[’term’] if not var1 else ’(?:\\’+var1[1]+’|’+ qualias[’term’]+’)’ 5 regPattern = ’\(subclass\ ’+varTerm+’\ [\w|\?]\w*\)’ 6 var2 = re.search(regPattern, text) 7 if (var2) and not (text in qualias[F]): 8 with lock: 9 qualias[F] += [text] Para cada resultado obtenido a partir de XPath, se verifica los siguiente: el tér- mino de la entrada aparece de forma explícita o en forma de variable de SUMO (las variables empiezan siempre por ’?’, por ejemplo, ?X es un nombre de varia- ble), se verifica que la relación tiene la siguiente estructura, 1 (subclass Termino RolFormal) en cuyo caso de ser así, se verifica que no está repetido y se introduce en el dic- cionario qualias bajo un cerrojo para evitar problemas de memoria compartida. Con este código, se puede obtener todas las relaciones qualia de rol formal ya que son muy sencillas y directas. La extracción del texto plano a partir dela documentación funciona de igual ma- nera, se busca la palabra documentation y se extrae aquello que se encuentre entre comillas. Si contiene alguna palabra clave que denote un rol de la estruc- tura de qualia, se extrae el texto a su correspondiente rol. 1 for incidences in response.xpath("//td/a[contains(text(),’documentation ’)]/.."): 2 text = "".join(re.split(’<[^<>]*>’,incidences.get())) 3 desc = re.search(’\"([^\"]*)\"’, text) 4 if desc: 5 desc = desc[1] 6 if "subclass" in desc: 7 with lock: 8 qualias[F] += [desc] 9 elif ("purpose" in desc) or ("designed" in desc) or ("intended" in desc): 10 with lock: 11 qualias[T] += [desc] 12 elif ("result" in desc) or ("product)" in desc): 13 with lock: 14 qualias[A] += [desc] 15 elif "with" in desc: 16 with lock: 17 qualias[C] += [desc] 35 6.4. Extracción de las relaciones qualia apropiadas. Para extraer las relaciones qualia de rol constitutivo, existen muchas palabras clave y, en concepto, funciona igual que en el caso del rol formal. En cambio, la estructura sintáctica de las relaciones cambia para ciertas relaciones. typicalPart 1 (typicalPart RolConst Termino) typicallyContainsPart 1 (typicallyContainsPart RolConst Termino) equipmentCount 1 (equipmentCount Termino RolConst Numero) part 1 (part RolConst Termino) properPart 1 (properPart RolConst Termino) Como se puede observar, todas las relaciones tienen la misma estructura sintáti- ca excepto equipmentCount, por lo que la nueva expresión regular regPattern es la siguiente en el código. 1 for incidences in response.xpath("//td/a[contains(text(),’ typicallyContainsPart’) or contains(text(),’typicalPart’) or contains(text(),’equipmentCount’) or contains(text(),’part’) or contains(text(),’properPart’)]/.."): 2 text = "".join(re.split(’<[^<>]*>’,incidences.get())) 3 var1 = re.search(’\(instance\ (\?\w+)\ ’+qualias[’term’]+’\)’, text ) 4 varTerm = qualias[’term’] if not var1 else ’(?:\\’+var1[1]+’|’+ qualias[’term’]+’)’ 5 regPattern = ’(?:\((?:typicallyContainsPart|part|properPart| typicalPart)\ ([\w|\?]\w*)\ ’+varTerm+’\)|\(equipmentCount\ ’+ varTerm+’\ ([\w|\?]\w*)\ \d+\))’ 6 var2 = re.search(regPattern, text) 7 if var2 and not (text in qualias[C]): 8 if str(var2[1]).startswith(’?’): 9 auxvar = re.search(’\(instance\ \\’+var2[1]+’\ \w+\)’, text ) 10 if auxvar: 11 with lock: 12 qualias[C] += [text] 36 Desarrollo 13 else: 14 with lock: 15 qualias[C] += [text] Hay una pequeña diferencia extra en relación a los anteriores códigos, se ha observado que las relaciones qualia la cuales no instanciaban el tipo del rol no aportaban más información que “existe relación qualia”. El mismo código se repite con el caso del rol agentivo con una nueva expresión regular y las palabras clave result y authors. 1 for incidences in response.xpath("//td/a[contains(text(),’result’) or contains(text(),’authors’)]/.."): 2 text = "".join(re.split(’<[^<>]*>’,incidences.get())) 3 var1 = re.search(’\(instance\ (\?\w+)\ ’+qualias[’term’]+’\)’, text ) 4 varTerm = qualias[’term’] if not var1 else ’(?:\\’+var1[1]+’|’+ qualias[’term’]+’)’ 5 regPattern = ’\(?:(result|authors)\ ([\w|\?]\w*)\ ’+varTerm+’\)’ 6 var2 = re.search(regPattern, text) 7 if var2 and not (text in qualias[A]): 8 if str(var2[1]).startswith(’?’): 9 auxvar = re.search(’\(instance\ \\’+var2[1]+’\ \w+\)’, text) 10 if auxvar: 11 with lock: 12 qualias[A] += [text] 13 else: 14 with lock: 15 qualias[A] += [text] Por último, en la extracción del rol télico, surge una distinción, para las palabras clave hasPurpose, capability e instrument, las estructuras sintácticas son las siguientes: hasPurpose 1 (hasPurpose Termino capability 1 (capability RolTelico instrument Termino) instrument 1 (instrument RolTelico Termino) Y su código de extracción de estas relaciones es el siguiente: 37 6.4. Extracción de las relaciones qualia apropiadas. 1 for incidences in response.xpath("//td/a[contains(text(),’hasPurpose’) or contains(text(),’capability’) or contains(text(),’instrument’) ]/.."): 2 text = "".join(re.split(’<[^<>]*>’,incidences.get())) 3 var1 = re.search(’\(instance\ (\?\w+)\ ’+qualias[’term’]+’\)’, text ) 4 varTerm = qualias[’term’] if not var1 else ’(?:\\’+var1[1]+’|’+ qualias[’term’]+’)’ 5 regPattern = ’(?:\(hasPurpose\ ’+varTerm+’\\n|\(capability\ ([\w |\?]\w*)\ instrument\ ’+varTerm+’\)|\(instrument\ ([\w|\?]\w*)\ ’+varTerm+’\))’ 6 var2 = re.search(regPattern, text) 7 if var2 and not (text in qualias[T]): 8 if str(var2[1]).startswith(’?’): 9 auxvar = re.search(’\(instance\ \\’+var2[1]+’\ \w+\)’, text) 10 if auxvar: 11 with lock: 12 qualias[T] += [text] 13 else: 14 with lock: 15 qualias[T] += [text] Sin embargo, para hasSkill, a pesar de tener la misma estructura sintácti- ca que instrument, su término no es instanciado, se proporciona un atributo por medio de la relación attribute. Para no generar conflictos con el anterior código, se ha separado en un bucle for distinto. 1 for incidences in response.xpath("//td/a[contains(text(),’hasSkill’) ]/.."): 2 text = "".join(re.split(’<[^<>]*>’,incidences.get())) 3 var1 = re.search(’\(attribute\ (\?\w+)\ ’+qualias[’term’]+’\)’, text) 4 varTerm = qualias[’term’] if not var1 else ’(?:\\’+var1[1]+’|’+ qualias[’term’]+’)’ 5 regPattern = ’\(hasSkill\ ([\w|\?]\w*)\ ’+varTerm+’\)’ 6 var2 = re.search(regPattern, text) 7 if var2 and not (text in qualias[T]): 8 if str(var2[1]).startswith(’?’): 9 auxvar = re.search(’\(instance\ \\’+var2[1]+’\ \w+\)’, text ) 10 if auxvar: 11 with lock: 12 qualias[T] += [text] 13 else: 14 with lock: 15 qualias[T] += [text] Con cada bloque de código, la función parse es capaz de extraer las relaciones qualia de la página, pero las páginas a veces tienen un enlace a otra página que 38 Desarrollo tiene más relaciones del término seleccionado. En el portal web, estos enlaces aparecen repetidos uno debajo de otro por lo que solo es necesario acceder a uno. 1 next_pages = response.xpath("//a[contains(text(),’Show next 25’)]/@href ").getall() 2 next_pages = [x for i,x in enumerate(next_pages) if i % 2 == 1] 3 4 if next_pages: 5 for page in next_pages: 6 next_url = response.urljoin(page) 7 yield scrapy.Request(next_url, callback=self.parse) El código encuentra el elemento con el enlace y, aprovechando la concurrencia, se generan nuevos procesos, cada uno accediendo a la nueva página con la función parse para extraer el resto de relaciones qualia, si este a su vez tiene enlaces a nuevas páginas, se repetirá en proceso. El fichero main.py se encarga de leer el diccionario de qualia_spider.py y guardarlo en un fichero de texto. 1 nrel = len(qspider.qualias[qspider.C]) + len(qspider.qualias[qspider.F ]) + len(qspider.qualias[qspider.T]) + len(qspider.qualias[qspider. A]) 2 3 if nrel > 0: 4 filename = f’relaciones/{qspider.qualias["term"]}-{str(nrel)}.txt’ 5 6 with open(filename, ’w’) as f: 7 8 f.write("Term = "+qspider.qualias[’term’]+"\n\n") 9 10 f.write("Constitutive:\n"+",\n".join(qspider.qualias[qspider.C ])+"\n\n") 11 f.write("Formal:\n"+",\n".join(qspider.qualias[qspider.F])+"\n\ n") 12 f.write("Telic:\n"+",\n".join(qspider.qualias[qspider.T])+"\n\n ") 13 f.write("Agentive:\n"+",\n".join(qspider.qualias[qspider.A])+"\ n\n") 14 15 print(f’Saved file {filename}’) 16 else: 17 print("No file was created") Si el diccionario extraído está vacío, no crea ningún fichero de texto. En caso de generar fichero de texto, este se guarda en una carpeta llamada “relaciones” y el nombre del fichero está compuesto por el término extraído, por ejemplo, de Automobile, el nombre de su fichero es Automobile.txt. 39 6.5. Traducción de las relaciones SUO-KIF a Etalog. 6.5. Traducción de las relaciones SUO-KIF a Etalog. Las reglas extraídas de SUMO contienen parte de información de relaciones qua- lia, pero muchas veces añaden información no deseada. Para eliminar relaciones no interesantes, la traducción tiene dos fases: traducir la afirmación entera a ser posible y extraer solo las relaciones qualia directas e importantes. Sea el resultado de traducción
Compartir