• No se han encontrado resultados

Desarrollo semántico para entorno de realidad aumentada

N/A
N/A
Protected

Academic year: 2021

Share "Desarrollo semántico para entorno de realidad aumentada"

Copied!
57
0
0

Texto completo

(1)Graduado en Matemáticas e Informática Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros Informáticos TRABAJO FIN DE GRADO Desarrollo Semántico para Entorno de Realidad Aumentada. Autor: Cristina Galván Prieto Director: María del Carmen Suárez de Figueroa Baonza. MADRID, JUNIO 2018.

(2)

(3) Cristina Galván Prieto w14m018. Índice Resumen. Pág. 3. Abstract. Pág. 3. 1. Descripción general del trabajo. Pág. 4. 2. Introducción. 2.1. ¿Qué es una ontología en Inteligencia Artificial? . . . . . . . . . . . . . . . .Pág. 6 2.2. ¿Qué es la realidad aumentada? . . . . . . . . . . . . . . . . . . . . . .. . . . . . . Pág. 6 2.3. ¿Qué son los analizadores de texto? . . . . . . . . . . . . . . . . . . . . . . . . .. Pág. 6 3. Trabajos Previos. Pág. 7. 4. Desarrollo. Pág. 8. 4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 8 4.2. Diferentes APIs para el desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 9 4.3. Desarrollo de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 11 4.3.1. Reconocimiento de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 11 4.3.2. Anotación de texto en español . . . . . . . . . . . . . . . . . . . . . . . Pág. 14 4.3.3. Análisis semántico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 15 4.3.4. Traducción del texto en español . . . . . . . . . . . . . . . . . . . . . .Pág. 17 4.3.5. Anotación del texto en inglés . . . . . . . . . . . . . . . . . . . . . . . . Pág. 18 4.3.6. Versión final de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . Pág. 21 4.4. Uso de los métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 24 4.5. Ejemplos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 26 4.5.1. Ejemplos sencillos en Inglés . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 26 4.5.1.1. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 26 4.5.1.2. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 27 4.5.1.3. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 28 4.5.1.4. Ejemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 29 4.5.1.5. Ejemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 30 4.5.2. Ejemplos sencillos en Español . . . . . . . . . . . . . . . . . . . . . . . Pág. 31 4.5.2.1. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 31.      . . .

(4) Cristina Galván Prieto w14m018 4.5.2.2. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 32 4.5.2.3. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 33 4.5.2.4. Ejemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 34 4.5.2.5. Ejemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 35 4.5.3. Ejemplo complejo en Inglés . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 36 4.5.4. Ejemplo complejo en Español . . . . . . . . . . . . . . . . . . . . . . . Pág. 38 4.5.5. Ejemplo de uso con errores . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 40 4.5.6. Ejemplo de uso con errores 2 . . . . . . . . . . . . . . . . . . . . . . . .Pág. 40 4.5.7. Ejemplo de uso con errores 3 . . . . . . . . . . . . . . . . . . . . . . . .Pág. 41 4.6. Prueba gratuita Microsoft Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Pág. 42 4.6.1. Creación de cuenta gratuita . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 42 4.6.2. Añadir la clave a la aplicación . . . . . . . . . . . . . . . . . . . . . . . Pág. 43 4.7. Prueba gratuita Yandex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 45 4.8. Creación de cuenta en Cloudmersive . . . . . . . . . . . . . . . . . . . . . . . . . Pág. 47 5. Conclusiones. Pág. 49. 6. Futuros Trabajos. Pág. 50. 7. Bibliografía. Pág. 52.      . . .

(5) Cristina Galván Prieto w14m018. Resumen El trabajo realizado consiste en una aplicación que junta la realidad aumentada con el campo de la inteligencia artificial en el cual se recoge la semántica y las ontologías. Dicha aplicación está creada principalmente para dispositivos móviles con sistema operativo iOS aunque se podría pasar a una aplicación Web en futuros trabajos. Todo el trabajo se ha realizado con la herramienta Unity junto con Xcode para poder desplegar la aplicación en un iPhone X donde se han realizado las pruebas. Se trata de un trabajo que al juntar ambas temáticas, la realidad aumentada y la inteligencia artificial, ha requerido de la búsqueda de mucha información para tener los conocimientos necesarios para poder unir ambas partes y al mismo tiempo ha querido enseñar que al juntar dos tecnologías emergentes se puede crear una aplicación potente.. Abstract The present work consists of an application that joins augmented reality with the artificial intelligence’s field that covers the semantic and the ontologies. The application is mainly created for iOS mobile devices but in a future work, this could be changed to a web application. All the work has been developed in the Unity environment and with Xcode, it was deployed into an iPhone X where all the tests have been made. By joining both topics, augmented reality and artificial intelligence, the purpose was to show how this technology can make powerful applications and to learn from all the research made about it..      . . .

(6) Cristina Galván Prieto w14m018. 1. DESCRIPCIÓN DEL TRABAJO Nombre del trabajo: Desarrollo semántico para entorno de realidad aumentada. Descripción: El trabajo consiste en el desarrollo de una aplicación para dispositivos móviles, principalmente iOS, que con la ayuda de herramientas de realidad aumentada se reconoce un texto escrito. Este texto se envía a diferentes APIs con los siguientes objetivos: (a) Anotar semánticamente el texto (número de palabras, tipos de frases, etc.), (b) Sugerir ontologías (modelos semánticos) que puedan servir para anotar semánticamente el contenido del texto. Las APIs mencionadas servirán para: (a) Instanciar una ontología con los datos recogidos del texto. (b) Proporcionar sugerencias de ontologías existentes para el proceso de anotación semántico del contenido del texto. Lista de objetivos: Los principales objetivos a cumplir en el trabajo son: 1. Reconocer texto con el dispositivo de realidad aumentada y diferenciar si se trata de un texto en inglés o en español. 2. Realizar un análisis sintáctico del texto anteriormente reconocido. 3. Buscar ontologías con las cuales podamos anotar el texto semánticamente. 4. Instanciar la ontología de textos..      . . .

(7) Cristina Galván Prieto w14m018. 2. INTRODUCCIÓN En los últimos años, con los numerosos avances en las tecnologías, los teléfonos móviles han ido ganando popularidad. Actualmente, los móviles más modernos tienen incorporados sensores, cámara, compás, una memoria de gran capacidad y unos procesadores que permiten que los desarrolladores puedan usar estas características para crear aplicaciones con nuevas e innovadoras funcionalidades.. 2.1. ¿Qué es una ontología en Inteligencia Artificial? . En los años ’90, dentro del campo de la Inteligencia Artificial [1], se adoptó la palabra ontología para los esquemas de representación del conocimiento basados en marcos o redes semánticas (grafo donde los nodos representan conceptos y los arcos, dirigidos, representan relaciones entre conceptos). Una ontología es una representación formal de un determinado dominio o área de conocimiento. Dicha representación consiste en la extracción de los conceptos más importantes del dominio y de las relaciones que se dan entre ellos, creándose una estructura de conceptos relacionados que proporcionan un vocabulario común para el conocimiento modelado por la ontología y constituye una importante forma de compartir información. Las ontologías están formadas principalmente por [2]: •. Clases: Conceptos del dominio.. •. Propiedades: Hay dos tipos: o Relaciones: Enlaza dos clases de la ontología. o Atributos: Son las características propias de una clase.. •. Individuos: Son las instancias concretas de una clase.. •. Axiomas: Son restricciones impuestas a los elementos de la ontología.. Una de las características más importantes de una ontología es la organización jerárquica de sus clases, estableciendo una relación clase-subclase o superclase-clase. Otra de característica importante es la manera de codificar la información relativa a sus individuos. Los valores de las propiedades se concretan usando ternas de la forma sujeto – predicado – objeto, donde el predicado hace referencia a la propiedad, el sujeto es una instancia del dominio y el objeto es un valor del rango. Un ejemplo de ontología sería, si nos referimos al dominio de los seres vivos, tendríamos una clase ser vivo, dentro de esta tendríamos las clases vegetal y animal. La clase animal tendría dos subclases dentro: ave y mamífero; y dentro de la subclase mamífero podría haber otra subclase: herbívoro..      . . .

(8) Cristina Galván Prieto w14m018 Una relación posible en el ejemplo anterior sería entre herbívoro y vegetal. La relación sería “un herbívoro come vegetales”. Un posible atributo para animal sería número-de-patas. El número de patas es una característica propia de cada animal. Unas instancias para estas clases podrían ser: Pluto (mamífero) y Dolly (herbívoro). Así tendríamos las ternas: 1. Dolly – come – hierba 2. Pluto – número-de-patas – 4. 2.2. ¿Qué es la realidad aumentada? . La realidad aumentada [3] es un tema que está creciendo poco a poco y cada vez es más conocido. Hay muchos nuevos proyectos en desarrollo y otros se encuentran ya en el mercado, como sería el caso del famoso juego Pokemon Go. Es una tecnología nueva que mezcla la realidad con objetos virtuales. Dicha tecnología se diferencia de la realidad virtual en que en vez de ser una tecnología que aísla del mundo real, es una tecnología que superpone objetos en 3D, creados virtualmente, en el mundo real, para enriquecer la experiencia visual [4]. Una de las mejores opciones para desarrollar aplicaciones de realidad aumentada es Unity [5]. Unity es un entorno de desarrollo de videojuegos con contenidos 3D interactivos. Dentro de dicha plataforma, hay diferentes paquetes que ayudan a crear aplicaciones para Smartphones con realidad aumentada.. 2.3. ¿Qué son los analizadores de texto? La compresión de un lenguaje natural, como sería el español, es una tarea clave para dotar de inteligencia a los ordenadores [6]. Leer una pregunta y buscar información sobre ella, tanto en una base de datos como en Internet, con la cantidad de datos que se generan actualmente sería algo impensable para una persona humana. Para ello han surgido los sistemas de análisis automático de texto. El objetivo de dichos sistemas es entender la información no estructurada expresada en una lengua y convertirla en información estructurada, tanto como un resumen como una relación entre los elementos más importantes o incluso, clasificando el documento por su temática [7]..      . . .

(9) Cristina Galván Prieto w14m018. 3. TRABAJOS PREVIOS En el Departamento de Ingeniería Informática de New Panvel, India se ha realizado previamente un trabajo que consiste en el desarrollo de una aplicación Android [11] que mediante realidad aumentada recoge datos del mundo real y usa las ontologías para proporcionar respuestas a las preguntas encontradas en dichos datos. Otro trabajo [12] realizado en el mismo ámbito se trata de una aplicación realizada en la Universidad de Ingenieros Informáticos de Cuenca, Ecuador. Dicha aplicación usa la realidad aumentada y los analizadores semánticos de web para buscar personas, eventos y lugares de interés dentro del campus de la universidad. En Siemens Coporate Technology [13] combinan la semántica y la realidad aumentada para ayudar a la mente humana. Como la realidad aumentada superpone objetos virtuales en el mundo real, le añaden la semántica para que pueda enriquecer en una mayor cantidad el mundo real. Este desarrollo seguirá avanzado hasta incorporarlo en las HoloLens, gafas de realidad aumentada de Microsoft. A parte de los trabajos mencionados, se ha realizado otro que trata sobre la creación de modelos para realidad aumentada, mediante el uso de semánticas [14]. Usan semánticas ya que, la realidad aumentada asocia modelos 3D a algunos aspectos de la realidad, sin embargo, si añadimos la semántica la realidad aumentada cambia, debido a que la semántica está relacionada con objetos que existen en el mundo real. Por último, en el 2014 se desarrolló una aplicación para OpenStreetMap que usan la realidad aumentada y las ontologías para ver puntos de intereses de diferentes ciudades. La aplicación proporciona diferentes niveles de descripción [15]..      . . .

(10) Cristina Galván Prieto w14m018. 4. DESARROLLO . En dicho apartado se mostrará paso a paso como se han ido realizando los métodos y las funciones para poder cumplir los objetivos del trabajo. También, se explicarán brevemente las APIs elegidas para realizar las llamadas y las diferentes pruebas y errores realizadas durante el desarrollo de la aplicación.. 4.1. Introducción El trabajo constará en la realización de una aplicación con el fin de obtener información sobre un texto. Dicho texto debería de ser texto impreso, es decir, que no se encuentre escrito a mano.  El desarrollo constará de varias partes: 1. Para empezar, se buscarán las APIs para poder usar durante el desarrollo de la aplicación, las cuales nos ayudarán a alcanzar los objetivos propuestos. Tanto las APIs reconocimiento de texto, de anotación, de análisis semántico, como una API para la traducción. 2. Seguidamente, tras identificar las APIs a usar, se buscará información acerca del reconocimiento de texto mediante la realidad aumentada. Se hará un pequeño curso sobre el uso básico de Unity y como realizar aplicaciones. 3. Tras obtener todos los requerimientos se empezará el desarrollo de la aplicación en el entorno de Unity. 4. En Unity se realizará una aplicación capaz de reconocer texto y una vez recogido el texto usaremos las APIs anteriores para obtener los resultados y conclusiones..      . . .

(11) Cristina Galván Prieto w14m018. 4.2. Diferentes APIs para el desarrollo Para empezar el desarrollo de la aplicación móvil realizamos la búsqueda de dos APIs, una para anotar semánticamente el contenido texto, y otra para ver a que ontología pertenecen los datos recogidos del texto. 1. LibrAIry es una librería de código abierto que proporciona funcionalidades para el análisis del lenguaje para texto en español. De dicha librería se usará el servicio “annotate” que sirve para la obtención de información de los elementos de una frase. Se pueden usar los recursos lingüísticos por defecto, ampliarlos, adaptarlos a dominios específicos o desarrollar otros nuevos [8]. Para la anotación de textos en inglés se usará Stanford Core NLP [17]. 2. Linked Open Vocabulary (LOV) se trata de un repositorio de ontologías que se creó en 2011 y cuyo principal objetivo era ayudar a editores y a usuarios de vocabularios a evaluar lo que estaba disponible para sus necesidades, a reutilizarlo lo más posible e incluir su propia creación. El vocabulario que contiene está vigilado por un equipo que se encarga de validar e insertar los vocabularios en los datos de LOV [9]. Tras identificar las APIs para anotar semánticamente el texto y para instanciar ontologías se buscará una API para el reconocimiento de texto en realidad aumentada y para la traducción. 3. Actualmente Microsoft Azure Cognitive Services tiene una de las APIs más usadas y con mejor precisión para el reconocimiento de Texto [10]. La API a usar es Computer Vision, la cual proporciona a los desarrolladores un acceso a algoritmos avanzados para procesamiento de imágenes que devuelven información con el resultado. Microsoft Computer Vision puede analizar contenido visual de diferentes maneras, según elija el usuario. Al tratarse de una API de pago habrá un apartado dirigido a la creación de una cuenta gratuita o al uso de una API gratuita mediante cambios en el código proporcionado. 4. Para la traducción se usará la API de Yandex [18]. Yandex es una compañía tecnológica que construye productos y servicios inteligentes que tiene una base en machine learning. Llevan creando este tipo de servicios y motores de búsqueda desde 1997, y han tenido bastante relevancia. Para usar el traductor de Yandex será necesario registrarse, lo cual es gratuito, al igual que la clave para poder usar la API. Se explicará como conseguir dicha cuenta y clave en el apartado de Prueba gratuita Yandex. En el esquema que se puede ver en la página siguiente se muestra el esqueleto a seguir a la hora de la creación de las funciones y las llamadas a las APIs numeradas anteriormente. Durante la realización de la aplicación es posible que surja algún inconveniente y haga que no se siga el esquema. En dicho caso se pondrá y se explicará como se proseguirá..      . . .

(12) Cristina Galván Prieto w14m018. Texto Escrito. Error. API de Microsoft Azure. Error. No error Inglés Texto Reconocido. Error. API de Stanford CoreNLP. Error. Español No error Error API de LibrAIry. Error. Términos Anotados Término Traducido. No error. No error. Error Error. API de Yandex. No Error Términos Anotados. API de LOV. ¿Traducido?. No error Ontología de cada Término      . . Sí. Error. .

(13) Cristina Galván Prieto w14m018. 4.3. Desarrollo de la aplicación 4.3.1. RECONOCIMIENTO DE TEXTO Todo el desarrollo de la aplicación se hará en Unity 2017.3. Para comenzar la aplicación se empieza con el problema de usar la cámara del dispositivo móvil, que nos permita hacer una foto y almacenar dicha foto para usarla posteriormente. Para poder disponer de la cámara y al mismo tiempo mostrar la imagen obtenida mediante la cámara en tiempo real se usarán un par de objetos de Unity.. En la imagen anterior se muestra un pequeño código usado para lo dicho anteriormente. El objeto WebCamTexture es el utilizado para poder acceder a la cámara trasera del teléfono. En caso de querer usar la delantera se podría añadir con un par de cambios. En Unity siempre hay 2 métodos necesarios, Start es el primer método que se ejecuta al empezar la aplicación, por lo que es donde hay que poner a funcionar la cámara. Update consiste en un método que se ejecuta cada unidad de tiempo, por lo que es donde usamos el objeto Image para mostrar en tiempo real lo que ve la cámara. El resto de objetos creados se tratan de un Texture2D que se usará para guardar la imagen de la cual el usuario quiere reconocer el texto, y un objeto Text que será donde se muestre el resultado final, tras haberlo reconocido. Como se puede observar en el código mostrado en la página siguiente, se usa el método Photo para guardar la imagen que se quiere mandar a reconocer. Se guarda la imagen en tex, la Texture2D mencionada anteriormente, se pasa a bytes, que es el formato aceptado por la API de Microsoft, y se llama al método postRequest que es donde se realizará la llamada para reconocer el texto de la imagen..      . . .

(14) Cristina Galván Prieto w14m018. Para continuar con la aplicación, se realiza una llamada a la API de Microsoft Azure, la que se había elegido para reconocer el texto, y se recoge la información obtenida. Para realizar dicha acción es necesaria una clave de suscripción, que por motivos de confidencialidad no se mostrará, debido a que se trata de una API de pago. Para que no haya problemas de concurrencia, se usa un booleano (_busy) en el método Photo para evitar hacer más de una llamada al mismo tiempo a dicha API. Las llamadas realizadas para poder reconocer el texto son las que aparecen en la siguiente imagen:. Primero se hace una llamada a la API mandando la imagen y todas las cabeceras necesarias mediante el método postRequest, tal y como se muestra en la imagen anterior. Y seguidamente se recogerán los resultados del reconocimiento de texto en el método WaitForRequest, de la forma mostrada en la siguiente imagen..      . . .

(15) Cristina Galván Prieto w14m018 Una vez obtenida toda la información, sobre el texto reconocido, en formato JSON se manda a un último método en el cual se interpreta la información y se crea el texto que se mostrará en la pantalla del dispositivo móvil. Con el objetivo de hacer dicha interpretación solo es necesario saber cómo nos manda la API el resultado obtenido. Para eso solo se necesitaría acceder en la documentación de Microsoft Azure [16] y se observa la estructura de la respuesta.. Una vez terminada la interpretación y mostrado el resultado en la pantalla del dispositivo móvil, se pone el booleano _busy a falso ya que se han terminado todas las llamadas a la API y se puede volver a empezar el proceso de cero. En el punto actual, la aplicación muestra en tiempo real lo que ve la cámara y tiene dos botones, uno para realizar la foto (Take Photo) y el otro para salir de la aplicación (End), como se puede observar en la siguiente imagen..      . . .

(16) Cristina Galván Prieto w14m018. 4.3.2. ANOTACIÓN DEL TEXTO EN ESPAÑOL Una vez obtenido el texto se guarda para poder anotarlo. Para realizar la anotación, como se puede filtrar por diferentes tipos de filtro, se tendrá la opción de elegir el que se va a usar. La elección de dicho filtro se realizará mediante un Dropdown, el cual se trata de un botón que al pulsar despliega las diferentes opciones mostradas a continuación. Se tomará por defecto el primero de ellos. Los posibles filtros serán: 1. Sustantivo 2. Adjetivo. 3. Verbo 4. Adverbio 5. Pronombre 6. Preposición 7. Interjección 8. Artículo. Se ha de tener en cuenta que la opción de Interjección acepta los “.” y “,” como un término por lo que la respuesta puede que sea que el término que coincide con dicho filtro sea simplemente “.” o “,”. Cuando se quiera empezar con la anotación se podrá dar al botón de “Annotate”. Para hacer dicha acción usaremos el servicio “annotate” de LibrAIry [8], que sirve para la anotación semántica de texto en castellano. La forma de hacerlo se trata de la misma con la que hemos hecho las llamadas a las APIs anteriores. Sin embargo, al tratarse de una API gratuita, no se necesita el uso de la clave de subscripción. En el extracto de código siguiente se muestra cómo se realiza la petición.. Se recogerá la respuesta de la API de la misma forma que con el resto de peticiones hechas anteriormente para el reconocimiento de texto. Además, de dicha respuesta se guardarán los términos obtenidos para que, cuando el usuario quiera, pueda continuar viendo la clase de cada término reconocido con el filtro previamente elegido o anotar según otro filtro..      . . .

(17) Cristina Galván Prieto w14m018. 4.3.3. ANÁLISIS SEMÁNTICO Una vez obtenida la respuesta de la anotación de LibrAIry se podrá hacer el análisis semántico de los términos anotados mediante el botón “Get Term Class”. Cada vez que se pulse se irá viendo la clase de cada término reconocido por LibrAIry. Para ver la clase se hará uso de otra API llamada LOV [9], la cual tiene un repositorio de ontologías, principalmente en inglés, y al buscar un término te devuelve la clase con mayor coincidencia. Actualmente, la aplicación está centrada para reconocer tanto texto en castellano como en inglés, aunque en un futuro se podrían añadir muchos más lenguajes. Como LOV suele estar enfocada a palabras en inglés, seguiremos dos razonamientos: 1. Primero, en el caso de que estemos en el reconocimiento de texto en español, se enviará el término a la API de LOV y si en la respuesta se obtiene alguna coincidencia se mostrará dicha clase. En el caso contrario, se enviará dicho término a un traductor para que se obtenga la palabra en inglés y poder enviarla de nuevo a LOV. 2. En el caso de que se esté en la pantalla de reconocer el texto en inglés, no se usará la opción de traducir, simplemente se hará la llamada a la API. Puede ser que no se obtengan coincidencias. En dicho caso, simplemente se pondrá en la pantalla que no se han encontrado coincidencias para dicho término. El código empleado para llamar a la API de LOV :.      . . .

(18) Cristina Galván Prieto w14m018 También, para tener mayor número de opciones, la aplicación contará con una pantalla de menú en la cual se elegirá el lenguaje en el que se encuentra el texto a reconocer. Así, en el caso de que se quiera reconocer texto en inglés, no sería necesaria la traducción. La aplicación, en dicho punto, consta de una pantalla de menú (primera imagen) y una pantalla general (segunda imagen) donde se realiza la parte principal de la aplicación:. En la pantalla del menú, al elegir el idioma, se guarda la elección del usuario en una variable estática que se pasará como atributo a la pantalla principal antes de realizar el reconocimiento de texto. Si el texto reconocido no se encuentra en el lenguaje elegido se mostrará un error, habrá que volver al menú principal y elegir el idioma correctamente. En el caso de que haya una mezcla de idiomas, la aplicación tomará como idioma principal el inglés..      . . .

(19) Cristina Galván Prieto w14m018. 4.3.4. TRADUCCIÓN DEL TEXTO EN ESPAÑOL Una vez realizada la llamada a LOV con el término en español es posible que no se obtengan clases para dicho término, ya que LOV es un repositorio principalmente en inglés, por lo que hay una alta probabilidad de que no se encuentre clase para dicho término. Para solucionar esto se usará una API que traducirá la palabra a inglés y se volverá a realizar la llamada a LOV. La API elegida para hacer la traducción es libre de pago y se llama Yandex [18], pero en la cual hay que registrarse para poder obtener la clave gratuita. En el apartado de Prueba gratuita Yandex se explica como poder obtener una e incorporarla al código para ver su funcionamiento. El uso de dicha API es muy sencillo, ya que sólo has de realizar una llamada en la que hay que añadir la clave, el termino a traducir y los lenguajes de origen y destino, como se puede observar en el siguiente extracto de código de la aplicación.. En la línea donde se crea la url, a la cuál se hará la petición, se encuentra en blanco la parte de key debido a que será el lugar de poner la clave de la API. Por el resto, se trata de una llamada a la API de Yandex y se obtiene el resultado en un JSON. Una vez que se tiene el término traducido se volvería a hacer la llamada a LOV. Si no se encuentra ninguna clase se mostrará en pantalla un mensaje que diga que no hay clases para dicho término..      . . .

(20) Cristina Galván Prieto w14m018. 4.3.5. ANOTACIÓN DEL TEXTO EN INGLÉS . Anteriormente se mencionó el uso de la herramienta Stanford CoreNLP para la anotación del texto escrito en inglés. Tras varias pruebas y varios intentos de instalación, como la aplicación en desarrollo se está haciendo con el lenguaje C# y Stanford CoreNLP es una herramienta que se ha desarrollado mediante el uso de Java, hay una incompatibilidad a la hora de añadir la librería a la aplicación. Al mismo tiempo, Stanford CoreNLP no dispone de REST API, a diferencia del resto de APIs usadas durante el desarrollo, por lo que suponía una gran dificultad añadirlo a la aplicación. Para solucionar este problema se buscaron diversas herramientas que pudieran sustituir la previamente elegida. Así se dio con la Cloudmersive [19], una plataforma que contiene un conjunto de APIs, las cuales se encuentran en la nube, y que son de libre acceso si te registras, lo cual se puede hacer de forma gratuita. Una de las APIs, nlp/ ParseString, realiza la misma función que Stanford CoreNLP para analizar semánticamente el texto en inglés. Para hacer uso de ella se explicará la forma de conseguir una cuenta gratuita y como probar nuestra app en el apartado de Prueba gratuita Cloudmersive. Esta API analiza el texto y devuelve en un archivo JSON la respuesta. En dicha respuesta, al lado de cada término analizado se halla su análisis semántico. Las diferentes opciones que se pueden obtener son [20]: 1. NN, NP, NNS, NNP, NNPS 2. JJ, JJR, JJS. Sustantivo. Adjetivo. 3. VP, VB, VBP, VBZ, VBG, VBD, VBN 4. RB, RBR, RBS, RP, WRB 5. PRP, PRP$, WP, WP$ 6. IN, CC 7. UH. Verbo. Adverbio Pronombre. Preposición o conjunción Interjección. 8. DT,WDT. Artículo. A continuación para poder filtrar según el filtro elegido en el Dropdown se hará según se va obteniendo el tipo de cada término analizado. Se irá creando un array con todos los términos que coinciden con dicho filtro para poder realizar una anotación de los términos obtenidos, en el caso de que se quiera. En nuestra aplicación, los únicos cambios realizados para poder analizar semánticamente el texto en inglés serían añadir la llamada a la API con el filtro elegido, como se muestra en el siguiente fragmento de código:.      . . .

(21) Cristina Galván Prieto w14m018. En la imagen anterior se muestra el código tan simple que se usaría si, primero para analizar semánticamente una frase que se ha transformado a bytes, y, seguidamente, tras recibir la respuesta se pasaría a otro método que elegiría los términos según el filtro elegido por el usuario. En este ejemplo, se puede observar que en la tercera línea del método postRequest se ha eliminado la clave de la API. Además, se puede ver que se usa “NN” para filtrar según los sustantivos. Para poder poner todos las diversas opciones que se pueden obtener al realizar el análisis, y poder obtener solo las que se necesitan según el filtro elegido, se hará un método al cual llamaremos PrintNLP que pasará la respuesta de la API a un formato que sea de fácil entendimiento para cualquier usuario. Para poder hacer dicho cambio debemos tener en cuenta que la respuesta recibida tiene el siguiente aspecto: "(ROOT\n (S\n (NP (DT This))\n. (VP (VBZ is)\n. (NP (DT an) (NN example)))))”. Como se puede observar se ha mandado la frase “This is an example” y en la respuesta se ve el tipo de cada palabra, situándolo justo a la izquierda de cada término y entre paréntesis. Si nos fijamos en la palabra example podemos ver que su tipo es NN, lo que indica que se trataría de un sustantivo. Sin embargo, la palabra an se puede observar que tiene a su izquierda DT, lo que indica que se trataría de un determinante. En el siguiente fragmento de código se muestra como se ha realizado el siguiente paso: "(ROOT\n (S\n (NP (DT This))\n. (VP (VBZ is)\n. (NP (DT an) (NN example)))))”. DT This, VBZ is, DT an, NN example.      . . .

(22) Cristina Galván Prieto w14m018. En este código simplemente se usa el texto devuelto por la API de Cloudmersive y el filtro seleccionado. Primero se eliminan los caracteres de salto de línea “\n”, los puntos y seguidamente se separa el string en varias partes según los paréntesis “)”, para así tener en cada término tanto la palabra como su tipo. Seguidamente, dentro de cada término, se eliminarán todos los paréntesis restantes y se volverá a dividir para quedarnos únicamente con la palabra por un lado y con el tipo de dicha palabra por el otro. Solo falta ver si el tipo de esa palabra coincide con el filtro elegido anteriormente. En dicho caso se añadirá la palabra a una cadena (“string”), que será el resultado que devolverá la aplicación al usuario en la pantalla. En la imagen anterior falta el final del método, en el cual, dependiendo del filtro elegido, se devuelve por pantalla una frase que indica que términos han sido los que coincidían con dicho filtro..      . . .

(23) Cristina Galván Prieto w14m018. 4.3.6. VERSIÓN FINAL DE LA APLICACIÓN Una vez que se comprueba que todo está en correcto funcionamiento solo faltaría añadir banderas encima de los botones a la hora de la elección del idioma, cambiar el fondo de la aplicación y cambiar el formato de las letras para poder hacer una interfaz más amigable para el usuario final. Además se resaltarán las palabras de mayor importancia mediante el uso de la opción de negrita. Seguidamente se cambiarán los botones para que si el usuario entra en la versión en español todas las palabras de los botones se encuentren en español y en el caso de que se haya elegido inglés que se encuentren en dicho idioma. También se realizará un cambio debido a que en las versiones anteriores el botón para anotar ponía Anotate cuando debería poner Annotate. Por otro lado, se añadirá una escena en la que se incluirán las instrucciones de uso de la aplicación. Se podrá acceder a dicha escena una vez elegido el idioma, para poner las instrucciones en español o en inglés. Las instrucciones a poner en la página serán muy breves para que el usuario pueda manejar la aplicación. Serán las siguientes: Aplicación para el reconocimiento de texto y uso de las ontologías 1. Hacer foto del texto a reconocer.. 2. Elegir el filtro para anotar. 3. Pulsar Anotar para ver los términos que son del tipo del filtro. 4. Pulsar Ver la Clase para ver la clase de los términos anotados. 5. Para volver al menú pulsar Menú. 6. Pulsar Salir para terminar. La aplicación tendrá el siguiente formato:.      . . .

(24) Cristina Galván Prieto w14m018 Nada más abrir la aplicación se mostrará la pantalla de inicio en la cual se podrá elegir el lenguaje en el que se va a reconocer el texto. Si el idioma en el que está el texto no es el mismo que se ha elegido dará un error y se tendrá que volver al menú principal para cambiar el lenguaje. Una vez elegido el idioma se irá a la página principal, en caso de que se elija English tendremos la siguiente página:. Sin embargo, si se elige Español la página a mostrar será la siguiente:. El botón de Take Photo o Hacer Foto sería el primero a pulsar para poder hacer la foto del texto que se quiere reconocer. El texto reconocido, en caso de que esté en el idioma elegido, se mostrará en la zona debajo del recuadro blanco. Seguidamente se podría anotar el texto, para ello será necesario elegir el filtro según el cual se quiere anotar. En caso de que no se haya elegido ninguno se usará por defecto el de Sustantivo o Noun. Tras elegir el filtro solo quedaría pulsar el botón Annotate o Anotar para que anote el texto..      . . .

(25) Cristina Galván Prieto w14m018 La respuesta se mostrará donde se mostró anteriormente el texto reconocido. Se pondrá en negrita tanto el filtro elegido como las palabras cuyo tipo coincide con el filtro. Tras hacer el paso anterior, se guardan las palabras que coinciden con el filtro en un array, para que cuando el usuario pulse la opción de Get Class o Ver la Clase devuelva la clase del primer término de la lista. Para seguir viendo las clases de cada término solo será necesario seguir pulsando el botón. Esto podría cambiarse para futuros trabajos viendo la clase del texto entero o diversas opciones. Para terminar, están los botones de Main Menú o Menú Principal para volver al menú principal en el que se puede elegir el idioma, y la opción de Instructions o Instrucciones donde se pueden ver unas breves instrucciones sobre el uso de la aplicación, como se observa en la siguientes imágenes, tanto en español como en inglés..      . . .

(26) Cristina Galván Prieto w14m018. 4.4. Uso de los métodos A la hora de la reutilización del código se pueden usar todos los métodos creados en el script principal, TextReco, para realizar las llamadas a las APIs separadas o para cualquier necesidad por parte del usuario. A continuación se explicarán brevemente los diferentes métodos:  Reconocimiento de texto 1. PostRequest (byte [] image) Método que sirve para hacer la llamada a la API de Microsoft Azure en la que el argumento image contiene la imagen a enviar convertida en PNG. 2. WaitForRequest (WWW data) Método en el cual se recoge el resultado de la llamada anterior a la API de Microsoft Azure. 3. PrettyPrint (JSONObject j) Método que sirve para mostrar de manera entendible por el usuario final la respuesta obtenida mediante el reconocimiento de texto de Microsoft Azure, la cual se encuentra guardada en el JSONObject j.  Anotación semántica para textos en español: 1. AnotationText () Método que sirve para saber el filtro escogido por el usuario y realizar la llamada al método que se encargará de la anotación semántica del texto. 2. GetRequestAnnotation (string result, string valueDrop) Método que realiza la llamada a la API de LibrAIry para anotar semánticamente, según el filtro valueDrop escogido por el usuario, la frase result. 3. WaitForRequestAnnotation (WWW data, string valueDrop) Método en el que se obtiene el resultado de realizar la llamada a LibrAIry, y en el cual se guardan todos los términos en un array para seguidamente poder realizar la llamada a la API, en la cual se obtienen las ontologías. C. Ontologías: 1. GetNetTerm () Una vez recogidos todos los términos obtenidos mediante la anotación semántica podemos ir obteniendo las ontologías para cada término guardado. Este método sirve para recoger el siguiente término a analizar y realizar la llamada a la función que se encarga de llamar a la API de LOV. 2. GetRequestLOV (string term, int index) Método que se encarga de realizar la llamada a la API de LOV para que analice el término term que se encuentra en la posición índex del array array_terms..      . . .

(27) Cristina Galván Prieto w14m018 3. WaitForRequestLOV (WWW data, int index, string term) Método en el cual se recoge el resultado de la llamada anterior y se devuelve la ontología con mayor coincidencia. El parámetro índex indica el lugar que ocupa el término term en el array para ver si ha sido traducido ya. D. Traductor: 1. PostRequestTransaltor (string term, int index) Método que se encarga de realizar la llamada a la API de Yandex para hacer la traducción del término term. El parámetro índex se pasará al método siguiente para que se use en caso de que no se haya producido ningún error. 2. WaitForRequestTranslator (WWW data, int index) Método en el cual se recoge el resultado de la llamada a la API de Yandex. Con dicho resultado, guardado en la variable result, se realiza la llamada al método GetRequestLOV para analizarlo semánticamente. El parámetro índex se pasa para poner a true la posición del término que se ha traducido, para que no se vuelva a intentar traducir en caso de que no haya ninguna ontología para el término term. E. Anotación de textos en inglés: 1. GetRequestAnotationEn (byte[] json, string filter) Método que se encarga de realizar la llamada a la API de Cloudmersive para hacer la anotación del texto en el caso de que se haya elegido la opción de English. El json contiene el texto a analizar y el filter indica según que filtro queremos anotar. 2. WaitForRequestAnotationEn (WWW data, string filter) Método que recoge la respuesta de la API de Cloudmersive. El argumento filter indica el filtro elegido para anotar y se pasará al método PrintNLP que nos mostrará el resultado en pantalla. 3. PrintNLP (string text, string filter) Método que pasa la respuesta recibida por la API de Cloudmersive a un formato legible para el usuario..      . . .

(28) Cristina Galván Prieto w14m018. 4.5. Ejemplos de uso En esta sección se van a exponer diferentes ejemplos usados con la aplicación. Se empezará poniendo ejemplos muy sencillos para comprender el uso de la aplicación y seguidamente se pondrán unos de gran tamaño y dificultad. Para el primero se mostrarán imágenes de la aplicación entera y en los siguientes solo se mostrará la respuesta obtenida.. 4.5.1. EJEMPLOS SENCILLOS EN INGLÉS 4.5.1.1. EJEMPLO 1 Hello, this is a test, let’s see if the application works fine. 1. Lo primero que se realiza es la foto del texto a reconocer, el cual hemos impreso. sobre una hoja en blanco. Como se puede observar en la siguiente foto, la aplicación reconoce correctamente el texto mostrado.. 2. El siguiente paso sería anotar según el filtro elegido. En este ejemplo usaremos. el filtro Noun. Como respuesta por parte de la aplicación obtenemos que los términos que coinciden con el filtro son test y application:.      . . .

(29) Cristina Galván Prieto w14m018 3. Se podría continuar obteniendo los términos que coinciden con los diferentes. tipos de filtro cambiando el filtro y pulsando el botón de Annotate. 4. Seguidamente se puede ver en que ontología se encontraría cada término de los. anotados con el filtro elegido. En caso de querer ver la clase de otro término se podría volver a anotar con el filtro de dicho término y pulsar la opción de Get Class. Para seguir el ejemplo con el filtro Noun se pulsaría Get Class y obtendríamos que la clase de test es cl y la clase de application es dvia, tal y como se muestra en la siguiente imagen. A la hora de mostrar las clases de cada término se va de uno en uno para no llenar la pantalla con todo el texto.. 5. Para terminar, se podrían ver las instrucciones mediante la opción Instructions.. Con la finalidad de volver al menú principal solo haría falta pulsar Main Menú y desde esa página se podría elegir otro idioma o cerrar la aplicación mediante la opción de Finish.. 4.5.1.2. EJEMPLO 2 Courses are given by teachers in classrooms. 1. Se empieza haciendo la foto del texto a reconocer, como se ha realizado en el. ejemplo anterior. Se puede observar, en el fragmento de imagen mostrado a continuación, que la aplicación lo reconoce perfectamente..      . . .

(30) Cristina Galván Prieto w14m018 2. Seguidamente se anota según el filtro Verb, y la respuesta obtenida por la. aplicación es la siguiente:. 3. Por último, se procede a ver la clase de cada término obtenido en el paso. anterior, obteniendo por respuesta, que la clase de given es dbpedia-owl y la clase del término are es prov, tal y como se puede ver en la imagen siguiente.. 4.5.1.3. EJEMPLO 3 You can buy books in libraries and on-line shops. 1. Primero reconocemos el texto con nuestra aplicación, viendo que lo reconoce. perfectamente.. 2. Se continua realizando la anotación de la frase según el filtro Adjective. La. respuesta es la siguiente:.      . . .

(31) Cristina Galván Prieto w14m018 3. Para finalizar se obtiene la ontología a la que pertenece dicho término mediante. el uso de la opción Get Class.. 4.5.1.4. EJEMPLO 4 Madrid is the capital of Spain. 1. Primero reconocemos el texto elegido con nuestra aplicación, tal y como se. muestra en la imagen puesta a continuación.. 2. Seguidamente hacemos una anotación con el uso del filtro Article. Como. resultado se obtiene que sólo el término the es un artículo.. 3. Finalmente, vemos a que clase pertenece el término the pulsando la opción Get. Class, obteniendo como respuesta:.      . . .

(32) Cristina Galván Prieto w14m018. 4.5.1.5. EJEMPLO 5 Flights take off and land at airports. 1. Se empieza reconociendo la frase con la que se quiere hacer la prueba.. 2. Seguimos con la anotación de la frase mediante el filtro Noun, obteniendo los. siguientes resultados:. 3. Para terminar, se van a ver a que ontologías pertenecen los términos anteriores.. El término airports pertenece a la clase nas y el término flights pertenece a la clase atm, tal y como se muestra en la siguiente imagen:.      . . .

(33) Cristina Galván Prieto w14m018. 4.5.2. EJEMPLOS SENCILLOS EN ESPAÑOL Se empezará con unos simples ejemplos en español para mostrar el correcto funcionamiento de la aplicación. 4.5.2.1. EJEMPLO 1 Vamos a probar que la aplicación funciona correctamente y no hay errores. 1. Lo primero que realizamos, al igual que en el ejemplo anterior, es hacer la foto. del texto a reconocer. Se puede observar que la aplicación lo reconoce perfectamente.. 2. Seguidamente, usando el filtro Sustantivo vamos a anotar el texto buscando los. términos que coincidan con dicho filtro. Se puede observar en la siguiente imagen que los términos que coinciden son aplicación y errores. Se podría seguir eligiendo diferentes filtros para ver como funciona..      . . .

(34) Cristina Galván Prieto w14m018 3. Para continuar se verán las ontologías a las que pertenecen los términos. anteriormente anotados. La clase de aplicación sería turismo, sin embargo, errores no tiene coincidencia alguna con las ontologías de LOV, por lo que ha sido necesario traducir el término al inglés y así poder obtener una clase. Una vez traducido obtenemos que la clase de errores es obo.. 4. Otra opción sería consultar las instrucciones que se encuentran en español. mediante la opción de Intrucciones. Por último, se puede volver al menú principal pulsando el botón Menú.. 4.5.2.2. EJEMPLO 2 Las universidades en España se organizan en facultades y escuelas; y estas a su vez en departamentos 1. Se empieza con el reconocimiento del texto haciendo la foto de dicho texto. mediante la opción de Hacer Foto. El resultado mostrado es el siguiente:. 2. Se continua anotando el texto con el filtro Verbo. Obteniendo una única. coincidencia, tal y como es de esperar..      . . .

(35) Cristina Galván Prieto w14m018 3. Por último, se ve, mediante la opción de Ver Clase, a que ontología pertenece. dicho verbo. Como estamos en el idioma Español es posible que con algún término no se encuentren clases, por lo que se realiza una traducción al inglés y se vuelve a ver si hay alguna coincidencia. Esto ocurre con el término anterior y se muestra en las siguientes imágenes.. 4.5.2.3. EJEMPLO 3 Los jugadores de futbol pueden ser porteros, defensas, centrocampistas y delanteros. 1. Se realiza el reconocimiento de texto mediante la aplicación, obteniendo así la. siguiente respuesta:. 2. Se prosigue anotando el texto mediante el filtro Preposición y pulsando la. opción de Anotar. Se puede observar en la siguiente imagen que la única preposición del texto es el término de:.      . . .

(36) Cristina Galván Prieto w14m018 3. Para finalizar, se realiza la búsqueda de la ontología a la que pertenece dicho. término usando la opción de Ver Clase:. 4.5.2.4. EJEMPLO 4 Las personas pueden trabajar en compañías situadas en distintas ciudades. 1. Se realiza el reconocimiento de texto mediante la aplicación, obteniendo así la. siguiente respuesta:. 2. Se continua viendo que términos coinciden con el filtro Artículo, obteniendo. como resultado las palabras Las y distintas:. 3. Terminamos el ejemplo realizando la búsqueda de las ontologías a las que. perteneces dichos términos. El término Las pertenece a la ontología lgdo y el término distintas a org..      . . .

(37) Cristina Galván Prieto w14m018. 4.5.2.5. EJEMPLO 5 Los alumnos cursan asignaturas que se imparten en diferentes lugares. 1. Se comienza el ejemplo reconociendo el texto escrito en el párrafo anterior. mediante el uso de Hacer Foto, mostrando como resultado la siguiente imagen:. 2. Para continuar, se realizará la anotación del texto mediante el filtro Pronombre. obteniendo como resultado:. 3. Seguidamente se realizará la búsqueda de las clases a las que pertenecen ambos. términos, dando la causalidad que pertenecen los dos a la ontología lgdo..      . . .

(38) Cristina Galván Prieto w14m018. 4.5.3. EJEMPLO COMPLEJO EN INGLÉS Para el ejemplo de mayor complejidad en inglés se usará un fragmento del libro The Black Cat del autor estadounidense Edgar Allan Poe. El texto usado es el siguiente: “For the most wild, yet most homely narrative which I am about to pen, I neither expect nor solicit belief. Mad indeed would I be to expect it, in a case where my very senses reject their own evidence. Yet, mad am I not—and very surely do I not dream. But tomorrow I die, and to-day I would unburthen my soul. My immediate purpose is to place before the world, plainly, succinctly, and without comment, a series of mere household events. In their consequences, these events have terrified—have tortured—have destroyed me.” 1. El primer paso es reconocer el texto con la aplicación. Se puede ver fácilmente. que lo reconoce correctamente simplemente poniendo el texto delante de la cámara. En la siguiente imagen se muestra como la aplicación nos reconoce correctamente el texto.. 2. Tras ver que reconoce el texto correctamente vamos a anotar según el filtro. Noun. Esta acción nos devuelve como respuesta que los términos que coinciden con dicho filtro son los siguientes: narrative, pen, belief, Mad, case, senses, evidence, tomorrow, soul, purpose, world, comment, series, household, events y consequences. La respuesta se puede ver en la imagen que se encuentra en la siguiente página..      . . .

(39) Cristina Galván Prieto w14m018. 3. Se terminaría viendo las clases de cada término recién anotado. Las clases para. cada término serían las siguientes: a. narrative pertenece a la ontología saws. b. pen pertenece a la ontología dicom. c. belief pertenece a la ontología sio. d. Mad no pertenece a ninguna ontología. e. case pertenece a la ontología uby. f.. senses pertenece a la ontología wlo.. g. evidence pertenece a la ontología tmo. h. tomorrow pertenece a la ontología gold. i.. soul no pertenece a ninguna ontología.. j.. purpose pertenece a la ontología sio.. k. world pertenece a la ontología osr. l.. comment pertenece a la ontología tsioc.. m. series pertenece a la ontología bibo. n. household pertenece a la ontología being. o. events pertenece a la ontología umbel. p. consequences pertenece a la ontología ludo-xapi. q. case pertenece a la ontología uby..      . . .

(40) Cristina Galván Prieto w14m018. 4.5.4. EJEMPLO COMPLEJO EN ESPAÑOL Para mostrar el funcionamiento de la aplicación con un texto de mayor complejidad en español se usará un fragmento del libro El Ingenioso Hidalgo de Don Quijote de la Mancha del autor Miguel de Cervantes. El fragmento en cuestión será el mostrado a continuación: “En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que carnero, salpicón las más noches, duelos y quebrantos los sábados, lentejas los viernes, algún palomino de añadidura los domingos, consumían las tres partes de su hacienda.” 1. En primer lugar se hará el reconocimiento del texto elegido. La aplicación nos. devuelve lo siguiente:. 2. El siguiente paso sería anotar el texto según el filtro Sustantivo para ver todos los. términos de dicho tipo. La aplicación nos devuelve como respuesta lo siguiente:.      . . .

(41) Cristina Galván Prieto w14m018 Los términos que coinciden con el filtro Sustativo son lugar, Mancha, nombre, tiempo, hidalgo, lanza, astillero, adarga, rocín, corredor, olla, vaca, carnero, noches, duelos, quebrantos, sábados, lentejas, palomino, añadidura, domingos, partes y hacienda. 3. Para terminar, se verían las clases de cada término anteriormente anotado. Tras. pulsar la opción de Ver la Clase se obtiene que la clase de cada término es: a. lugar pertenece a la ontología dbpedia-owl. b. Mancha pertenece a la ontología obo c. nombre pertenece a la ontología frad. d. tiempo pertenece a la ontología turismo. e. hidalgo no pertenece a ninguna ontología. f.. lanza pertenece a la ontología ecrm.. g. astillero pertenece a la ontología lgdo. h. adarga no pertenece a ninguna ontología. i.. rocín no pertenece a ninguna ontología.. j.. corredor pertenece a la ontología sport.. k. olla pertenece a la ontología arp. l.. vaca pertenece a la ontología fabio.. m. carnero pertenece a la ontología cci. n. noches no pertenece a ninguna ontología. o. duelos no pertenece a ninguna ontología. p. quebrantos no pertenece a ninguna ontología. q. sábados pertenece a la ontología pext. r.. lentejas no pertenece a ninguna ontología.. s. palomino no pertenece a ninguna ontología. t.. añadidura pertenece a la ontología sql.. u. domingos pertenece a la ontología pext. v. partes pertenece a la ontología lgdo. w. hacienda pertenece a la ontología iso37120.. Se puede observar que LOV, al traducir el término Mancha, el cual es un nombre propio, nos proporciona una ontología a la que pertenece. Este problema sería una posible actualización en futuros trabajos, ya que no debería buscar la clase de nombres propios.      . . .

(42) Cristina Galván Prieto w14m018. 4.5.5. EJEMPLO DE USO CON ERRORES Un fallo muy común, que no se podría considerar error, sería el caso de mandar un término a la API de LOV para ver a que ontología pertenece y ver que no hay ninguna ontología, tanto en el caso de que se haya enviado en el lenguaje original del texto, como si se ha procedido a una traducción al inglés y se ha vuelto a realizar la consulta. En caso de que se produzca este fallo se mostrará el siguiente mensaje por pantalla.. 4.5.6. EJEMPLO DE USO CON ERRORES 2 Para este ejemplo se entrará en la aplicación eligiendo como idioma English y el texto que se quiere reconocer estará escrito en español. Se va a probar que la aplicación funciona de manera correcta y que en casos como el explicado se produce un error. Vamos a probar si reconoce el texto en español usando la opción de idioma en inglés. La respuesta que nos proporciona la aplicación sería la siguiente:.      . . .

(43) Cristina Galván Prieto w14m018 Se puede ver que la aplicación nos dice que el lenguaje elegido no es el correcto. Además, nos indica que volvamos al menú principal para elegir un lenguaje diferente. En el caso de que se hubiera elegido el idioma español y el texto estuviera en inglés la aplicación nos mostraría el mismo mensaje pero en español.. 4.5.7. EJEMPLO DE USO CON ERRORES 3 Otro ejemplo de uso incorrecto sería intentar anotar o ver la ontología de un término que no ha sido reconocido. Primero siempre se tiene que reconocer el texto y seguidamente anotarlo. Tras anotarlo se podrán ver las clases de los términos, pero no sería posible ver las clases de las palabras sin haberlas anotado antes. En el caso de que se intente anotar o ver la clase de un término sin haber reconocido anteriormente ningún texto, la aplicación nos mostrará el siguiente mensaje.. En el caso de que se intente ver la clase de un término que no se ha anotado antes también se producirá un error, tal y como se muestra en la siguiente imagen..      . . .

(44) Cristina Galván Prieto w14m018. 4.6. Prueba gratuita Microsoft Azure Como se ha comentado en la sección de Diferentes APIs para el desarrollo, en la aplicación se usará la API de Microsoft Azure Cognitive Services para la parte de reconocimiento de texto, la cual se trata de una API de pago. En esta sección se mostrará cómo crear una cuenta gratuita, que tiene un mes de prueba, y cómo añadirla a la aplicación.. 4.6.1. CREACIÓN DE CUENTA GRATUITA Se seguirán los siguientes pasos para crear una cuenta gratuita: 1. Acceder a la página web de Microsoft Azure Cognitive Services donde se puede probar la parte de Computer Vision mediante el siguiente link: https://azure.microsoft.com/en-us/try/cognitive-services/?api=computervision 2. Seguidamente, se ha de seleccionar la API a usar, por lo que pulsamos el botón de “Get API Key” para la API de Computer Vision API. 3. En la ventana que sale se elige nuestro respectivo país y se marca la primera casilla para aceptar los términos de uso. 4. Seguidamente se hace un registro desde una cuenta de Microsoft, Facebook, GitHub o Linkedln.. 5. Una vez hecho el registro se mostrarán las claves de subscripción para la API, junto con la url a usar..      . . .

(45) Cristina Galván Prieto w14m018. 4.6.2. AÑADIR LA CLAVE A LA APLICACIÓN Para poder probar nuestra cuenta se tendrá que cambiar el código de la aplicación. Para ello será necesario tener instalado Unity 2017.3 y seguir los siguientes pasos: 1. Para descargar Unity se accede a la página oficial mediante el siguiente enlace: https://unity3d.com/es/get-unity/download y se pulsa el botón de “Elegir tu Unity + Descargar”. 2. Para coger la versión gratuita se elegirá la opción de “Prueba Personal”.. 3. Se aceptan los términos y se descarga el instalador para el sistema operativo que se esté usando. 4. Una vez descargado se siguen con los pasos presionando el botón de siguiente. 5. Tras la instalación se abrirá el proyecto proporcionado en el trabajo. Para añadir la clave simplemente será necesario ir a la carpeta Assets, abrir la carpeta Scripts y dentro se encontrará el script TextReco, en el cual haremos doble click para poder editarlo, tal como se muestra en la siguiente imagen..      . . .

(46) Cristina Galván Prieto w14m018 6. A continuación, se abrirá el script TextReco y en la línea 63 se encontrará la inicialización de la clave de subscripción de la API de Microsoft Azure, como se muestra en la imagen siguiente.. 7. Ahora solo falta añadir la clave de la cuenta gratuita que se ha obtenido en Microsoft Azure. Se utilizaría la primera clave que se da y se pondría entre las comillas dobles de la línea 63. 8. Finalmente se guardan los cambios realizados y se daría a botón del Play, situado en la parte superior de Unity (como se muestra en la imagen siguiente), para comprobar que todo funciona correctamente..      . . .

(47) Cristina Galván Prieto w14m018. 4.7. Prueba gratuita Yandex Como se ha comentado en la sección de Traducción del texto en español, para la traducción de los términos se usará la API de Yandex, la cual es libre de pago pero se necesita una cuenta para poder hacer uso de ella. La obtención de la clave se realizará siguiendo los siguientes pasos: 1. Acceder a la página oficial de Yandex mediante el siguiente enlace: https://tech.yandex.com/translate/ 2. En dicha página aparecen cuatro pasos a seguir. No será necesario seguirlos, se va directamente al tercero, el cual pone Get a free API key, como se muestra a continuación:. 3. Seguidamente, será necesario registrarse o se puede usar una cuenta de Facebook, GMail o Twitter. En caso de no querer usar ninguna de estas cuentas se podrá registrarse en Yandex. 4. Una vez realizado el registro se mostrará una página similar a la siguiente:.      . . .

(48) Cristina Galván Prieto w14m018 5. Para poder obtener una clave daremos a la opción número 3 en la parte que se encuentra en azul, en la cual pone API key. Esto nos llevará a la página donde se podrá crear la clave gratuita. 6. Se puede observar que hay un botón amarillo en la parte superior derecha de la página, que pone + Create a new key.. 7. Se pulsa dicho botón para crear la nueva clave. Se pedirá una descripción para la clave. En este ejemplo se usará la descripción Translator. 8. Una vez creada la clave aparecerá en la tabla de API keys y simplemente será necesario copiarla.. 9. Se copia la nueva clave creada y para usarla en nuestra aplicación el único cambio a hacer sería ir hasta la función PostRequestTransaltor y en el string url simplemente habría que añadir la clave justo después de la palabra key= como se muestra en la siguiente imagen:.      . . .

(49) Cristina Galván Prieto w14m018. 4.8. Creación de cuenta en Cloudmersive Para poder usar la parte de la anotación del texto en inglés en la aplicación se hará uso de la herramienta Cloudmersive, ya mencionada anteriormente. Para poder usar dicha herramienta, aunque se trata de una herramienta completamente gratuita, se ha de registrar en su plataforma para poder obtener una clave, la cual se usará a la hora de hacer la llamada a la API. Para obtener la cuenta gratuita bastará con seguir los siguientes pasos: 1. Acceder a la página oficial de Cloudmersive mediante el siguiente enlace: https://api.cloudmersive.com 2. Pulsar el botón Sign Up que se encuentra en la esquina superior derecha. 3. Para registrarse se puede hacer tanto con Google como con un email cualquiera. 4. Una vez registrados aparecerá la pantalla de inicio. En dicha pantalla se pulsará, dentro del apartado API Keys, la opción de View and manage keys.. 5. Al ser la primera vez que se accede a este apartado iremos a la parte de Getting Started y seguiremos los pasos. En Step 1 pulsaremos Create Key para obtener la clave de la API.. 6. Se creará la clave y se mostrará en el apartado de Free Tier Keys..      . . .

(50) Cristina Galván Prieto w14m018 Seguidamente se pasará a añadir la clave recién creada a nuestro código: 1. Se copia la clave tanto seleccionándola como pulsando el botón de Copy, que se encuentra justo a la derecha. 2. Se abre el script TextReco y en el método GetRequestAnotationEn, en la tercera línea se añadiría la clave entre comillas dobles. En este ejemplo sería en la línea 282 y se añadiría después de la coma, en el espacio en blanco.. 3. Para terminar se deberán guardar los cambios en el código. Para poder probar que todo funciona correctamente se abrirá Unity y se pulsará el botón de Play, situado en la parte central superior de la pantalla, como se muestra en la siguiente imagen..      . . .

(51) Cristina Galván Prieto w14m018. 5. CONCLUSIONES La principal conclusión obtenida del trabajo realizado es que actualmente estamos entrando en una era tecnología que, a medida que el tiempo avanza, es cada vez mayor y hay gran cantidad de herramientas que ayudan o que podrían ayudar a las personas si se tuviera suficiente información y conocimiento sobre ellas. Es necesario que haya gente que se ponga a investigar sobre todas las cosas que se podrían realizar y, profundizando más, sobre todas las herramientas que se nos están proporcionando y que la gente no es capaz de aprovechar. Seguidamente, se puede observar que el mundo de la inteligencia artificial es muy amplio y se podrían hacer diversos trabajos y aplicaciones que abarquen diferentes campos de la inteligencia artificial, y, que al mismo tiempo, ayudarán a los investigadores y a las personas que trabajan a diario en ese ámbito a poder seguir evolucionando. Por otro lado, al haber encontrado con varios problemas durante el desarrollo debido a la incompatibilidad en el ámbito en el que se ha realizado el trabajo, sería necesario que se empezará a documentar y a realizar cambios en Unity, al mismo tiempo que se deberían hacer APIs que fueran de fácil acceso para todos los lenguajes de programación. Finalmente, mi conclusión sobre el trabajo es que aunque parezca que es difícil entrar en el mundo de la inteligencia artificial y de la realidad aumentada, una vez que se empieza a investigar y se conocen las herramientas que hay, es difícil no pensar en todas las posibilidades de aplicaciones que se podrían realizar. Ha sido un trabajo muy constructivo y que se puede seguir ampliando de forma muy simple abarcando grandes funcionalidades..      . . .

(52) Cristina Galván Prieto w14m018. 6. FUTUROS TRABAJOS Para futuros trabajos en el ámbito de la inteligencia artificial, se podría continuar realizando mejoras en la aplicación y añadiendo más funciones para que pueda realizar más acciones. Con la finalidad de realizar dichos cambios y ajustes, sería necesario instalar en el ordenador la herramienta Unity 2017.3 y añadir el proyecto que cuenta con la aplicación, para poder seguir a partir de ese proyecto. 1. El primer cambio que se podría hacer consistiría en añadir más lenguajes en la pantalla de inicio. Al mismo tiempo se debería realizar un ajuste a la hora de reconocer el texto teniendo en cuenta el idioma seleccionado. Eso sería un cambio muy simple debido a que la API de Microsoft Azure cuenta con una amplia gama de lenguajes a la hora del reconocimiento de texto. 2. Seguidamente se podría añadir una segunda parte a la aplicación. En dicha parte se usará el texto reconocido anteriormente y se usará para instanciar una ontología. Dicha ontología seguirá el esquema NIF, el cual se explica y tiene todo lo relacionado con él en el siguiente enlace: http://persistence.uni-leipzig.org/nlp2rdf/specification/core.html Para realizar esto será necesario llamar a una API que nos ayude a instanciar al ontología con los datos obtenidos de nuestra aplicación. Una API que realiza dicha función es Apache Jena. Se trata de una estructura con código de libre acceso y gratuita para Java que sirve para crear aplicaciones de semántica y de datos vinculados [21]. El principal impedimento para este cambio es que Unity trabaja con el lenguaje de programación C#, a diferencia de Jena que se encuentra desarrollado en Java. Para solucionar este problema sería necesario buscar una forma de poder incluir la librería de Jena dentro de nuestra aplicación o intentar encontrar una forma para poder realizar un cambio de Java a C#, para que el entorno de desarrollo acepte la librería. 3. Otro posible cambio consistiría en pasar la aplicación móvil a una aplicación web, de manera que sea más cómoda para los usuarios y de mayor facilidad de uso. Al mismo tiempo se podrían añadir más detalles que ayuden a la aplicación a verse más atractiva para el mundo laboral, como poner sonidos o música de fondo. 4. También, como se ha comentado en un ejemplo, se debería actualizar la parte de las ontologías teniendo en cuenta los nombres propios, ya que dichos términos no deberían ser enviados para reconocer..      . . .

(53) Cristina Galván Prieto w14m018 5. Por último, se podría añadir una opción dentro de la aplicación que al analizar semánticamente el texto reconocido devolviera el análisis semántico entero mediante un diagrama o esquema. Esto solo sería posible en el caso de que el texto no contará con muchas palabras, ya que si se intenta hacer con un texto de varios párrafos, no cabría en la pantalla del dispositivo móvil y tampoco en la de la posible página web..      . . .

Referencias

Documento similar

Sin la fidelidad entre ambos no se entiende la defensa que hizo Felipe González de Guerra al estallar el escándalo de su hermano, como tampoco se comprende la importante

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

El nuevo Decreto reforzaba el poder militar al asumir el Comandante General del Reino Tserclaes de Tilly todos los poderes –militar, político, económico y gubernativo–; ampliaba

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

 Tejidos de origen humano o sus derivados que sean inviables o hayan sido transformados en inviables con una función accesoria..  Células de origen humano o sus derivados que

Se hace presente el instrumento a ser aplicado en la empresa CONSUTIC dentro del área de Sistemas informáticos en los servicios de mesa de ayuda mediante un

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de

información que el individuo puede procesar por su sistema nervioso, y los factores relacionados van a influir en las habilidades y destrezas sociales, que pondrá al uso al