¡Esta es una revisión vieja del documento!
Preguntas generadas a partir de tablas
Una forma de crear preguntas generativas con facilidad es recurrir al uso de tablas con información sobre distintos elementos y el valor de ciertos atributos. Seleccionando al azar uno cualquiera de estos elementos, y combinando los atributos se pueden obtener una amplia variedad de preguntas.
Las tablas, al igual que los diccionarios pueden leerse a partir de un fichero de texto, pero tambien a partir de hojas de cálculo en formato XLS (Excel 2004) o XLSX (Excel, OpenOffice).
Las tablas en formato de texto son ficheros CSV en los que cada fila corresponde a un elemento, y cada columna contiene el valor de un atributo. La primera fila, opcionalmente, contendrá los nombres de los atributos. A continuación se muestran varios ejemplos del uso de tablas:
Ejemplo 1
El siguiente fichero de texto contiene una tabla de los elementos químicos. En este fichero las columnas estan separadas por tabuladores:
NUMERO_ATOMICO VALENCIA SIMBOLO NOMBRE DENSIDAD 1 1 H Hidrógeno 0.0899 2 0 He Helio 0.126 3 1 Li Litio 0.53 4 2 Be Berilio 1.85 5 3 B Boro 2.34 6 2|4 C Carbono 2.26 7 -3|1|2|3|4|5 N Nitrógeno 0.81 8 -2 O Oxígeno 1.14 9 -1 F Flúor 1.11 10 0 Ne Neón 1.2 11 1 Na Sodio 0.97 12 2 Mg Magnesio 1.74 13 3 Al Aluminio 2.7 14 4 Si Silicio 2.33 15 -3|3|5 P Fósforo 1.82 16 -2|2|4|6 S Azufre 2.07 17 -1|1|3|5|7 Cl Cloro 1.56 18 0 Ar Argón 1.4 19 1 K Potasio 0.86 20 2 Ca Calcio 1.55 ....
A partie de esta tabla, 1) se pueden construir preguntas como:
Enunciado | %@page import="siette.util.corpus.Table"%> <% Table table = new Table("demo/tabla_periodica.txt", true, Table.DEFAULT_SEPARATOR, "x-MacRoman", true); String[] elemento = table.select(); String nombre = table.get( elemento, "NOMBRE" ); String simbolo = table.get( elemento, "SIMBOLO" ); %> ¿Cuál es el símbolo quimico del "<i><%= nombre %></i>"? |
---|---|
Patrón | <%= simbolo %> |
que puede dar lugar a instancias como esta:
Esta plantila hace uso de la clase siette.util.corpus.Table que representa una tabla de elementos con atributos. El constructor de la clase contiene varios parámetros. El primero de ellos es la localización del fichero que contiene la tabla. ste fichero debe estar localizado en el contexto auxiliar de la asignatura. El segundo par-ametro indica si la tabla tiene o no una fila de cabecera. En este caso la tiene. Son los nombres de los atributos. El siguiente parámetro define el separador que se usa entre los elementos de la tabla. En esta caso es el separador por defecto, que es el caracter tabulador, aunque puede emplearse cualquier otro. El cuarto parámetro indica el sistema de codificación de los caracteres del fichero. Si no se especifica nada se considera UTF-8
. Finalmente el último parámetro indica si se deben filtrar o no los caracteres HTML, es decir, si se transformaran los caracteres del fichero por encima del caracter 127 en sus correspondientes entidades HTML.
La programación en este caso es muy sencilla. La sentencia:
String[] elemento = table.select();
selecciona un elemento cualquiera al azar, y devuelve todos los valores de las columnas (valor de los atributos) en el array elemento
. La sentencia:
String nombre = table.get( elemento, "NOMBRE" );
selecciona de entre todos los atributos del elemento, (todas las columnas), el valor correspondiente a la columna etiquetada como NOMBRE
, es decir la cuarta columna. El mismo efecto se habria obenido con la sentencia:
String nombre = table.get( elemento, 3 );
teniendo en cuenta que, como es habitual en programación JAVA, los valores comienzan siempre contanto por el elemento 0.
De forma similar, a esta plantilla puede construirse otra que muestre el símbolo
y pregunta el nombre
y con un poco mas de programación se pueden generar preguntas que comparen unos elementos con otros, como la siguiente:
En estos casos es muy conveniente utilizar el método setExclusive()
que hace que una vez que se ha seleccionado una fila de la tabla, no pueda volver a elegirse la misma fila.