Herramientas de usuario

Herramientas del sitio


es:manual:items:generativos:web-semantica

¡Esta es una revisión vieja del documento!


Uso de la web semántica

Una opcion especialmente interesante, mas allá del uso de bases de datos locales, es la construccion de preguntas mediante bases de datos en repositorios de la denominada web semántica.

Para ello se ha definido la clase siette.util.corpus.WebTable con funciones especificas para construir tablas a partir de consultas SPARQL.

El mayor problema que se afronta al crear una consulta a una base de datos externa es la consistenacia de la información. No siempre se encuentran bases de datos apropiadas para su uso como preguntas. En muchos casos la información es incompleta, y en otros excesiva, dando lugar a preguntas demasiado detalladas que no es lo que se desea para la evaluación. A lo largo de los ejemplos se expondran los problemas mas frecuentes que se encuentran.

Ejemplo 1

El siguiente código corresponde al enunciado de una pregunta generada a partir de una consulta a la Wikidata para identificar las banderas de distintos paises.

<%
String queryString = ""
+"PREFIX wd: <http://www.wikidata.org/entity/>"
+"PREFIX bd: <http://www.bigdata.com/rdf#>"
+"PREFIX wikibase: <http://wikiba.se/ontology#>"
+"PREFIX wdt: <http://www.wikidata.org/prop/direct/>"
+"select distinct ?img ?country ?countryLabel where { "
+"?country wdt:P31 wd:Q6256 . "
+"?country wdt:P41 ?img . "
+"?country wdt:P463 wd:Q1065 . " // Miembro ONU
+"SERVICE wikibase:label { bd:serviceParam wikibase:language \"es\" } ."
+"} ORDER BY ?countryLabel "
;
WebTable table = new WebTable("https://query.wikidata.org/sparql",queryString);
String[] pais = table.select();
String nombre = table.get(pais, "countryLabel" );
String img = table.get(pais, "img" );
String pattern = Table.toPattern(nombre, true, Table.LEFT) +"|"+  table.toPattern(nombre, true, Table.RIGHT);
%>
<center>
&iquest;De qu&eacute; pa&iacute;s es esta bandera? <br/>
<IMG src="<%= img %>" width='250' /><br/>
</center>

A partir de esta plantilla se obtienen preguntas como ésta:

La variable queryString contiene una cadena de caracteres con la consulta en el lenguaje SPARQL. La consulta selecciona un número indeterminado de filas con tres columnas que corresponden a los campos de la tabla, que son img, country countryLabel. La consulta se efectúa llamando al servicio de consultas de Wikidata, usando la instrucción:

 WebTable table = new WebTable("https://query.wikidata.org/sparql",queryString);

Al igual que en caso de otras tablas el método select selecciona un elemento al azar. Las variables nombre y img recogen respectivamente el nombre y la imagen de la bandera, que se ha obtenido mediante la consulta en los campos countryLabele img respectivamente.

A partir del nombre se obtiene un patrón de respuesta llamando al método toPattern. Esto es necesario porque la consulta a veces devuelve valores nominales como Republica Popular China, que requieren del patrón de respuesta {{Republica} Popular} China para poder aceptar respuestas simples como China.

La construcción de la consulta es sin duda el problema mas complejo. Si no se impone ninguna restricción la consulta de paises y banderas daria como resultado en algunos casos, paises que ya no existen (por ejemplo la Unión Sovietica), o quizás paises pequeños, en conflicto, o no reconocidos por la comunidad internacional. Para ello se debe intentar restringir la consulta, por ejemplo en esta caso se restringe a paises que sean miembros de Naciones Unidas. Si se quiere que la pregunta sea mas fácil, se puede restringir a paises con mator población, etc. Aun así, este tipo de bases de datos es incompleta, y no siempre da resultados apropiados. Un problema común por ejemplo es que la imagen no aparezca, o que no sea adecuada. En esos casos se debe recurrir al mecanismo de control de instancias

La imagen anterior muestra una instancia de la plantilla que ha sido descartada con la ayuda de la opción Previsualizar del menú de preguntas. El control que aparece en la parte superior derecha se ha activado indicando que esa instancia no debe usarse. El generador de preguntas de Siette al instanciar la plantilla comprobará que no coincide con esta instancia, ni con otras que esten igualmente descartadas y procederá a generar ottra instancia.

Solución de problemas

Uno de los problemas mas frecuentes que ocurren al utilizar este tipo de preguntas es que se realicen cambios en el otro extremo de la consulta. Por ejemplo, ciertas preguntas que se habian desarrollado en función de la DBpedia simplementa han dejado de funcionar, como ésta:

Al parecer la consulta funciona, y no da error al construir la plantilla, pero probablemente la consulta ya no devuelve ningun resultado. La solución pasa por rehacer la consulta.

es/manual/items/generativos/web-semantica.1622136771.txt.gz · Última modificación: 2021/05/27 17:32 por root

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki