asker-tool 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +674 -0
- data/README.md +53 -0
- data/bin/asker +4 -0
- data/docs/changelog/v2.1.md +99 -0
- data/docs/commands.md +15 -0
- data/docs/contributions.md +18 -0
- data/docs/history.md +40 -0
- data/docs/idea.md +44 -0
- data/docs/inputs/README.md +39 -0
- data/docs/inputs/code.md +69 -0
- data/docs/inputs/concepts.md +142 -0
- data/docs/inputs/jedi.md +68 -0
- data/docs/inputs/tables.md +112 -0
- data/docs/inputs/templates.md +87 -0
- data/docs/install/README.md +38 -0
- data/docs/install/manual.md +26 -0
- data/docs/install/scripts.md +26 -0
- data/docs/revise/asker-file.md +41 -0
- data/docs/revise/buenas-practicas/01-convocatoria.md +30 -0
- data/docs/revise/buenas-practicas/02-formulario.md +35 -0
- data/docs/revise/buenas-practicas/03-descripcion.md +63 -0
- data/docs/revise/buenas-practicas/04-resultados.md +17 -0
- data/docs/revise/buenas-practicas/05-reproducir.md +10 -0
- data/docs/revise/ejemplos/01/README.md +27 -0
- data/docs/revise/ejemplos/02/README.md +31 -0
- data/docs/revise/ejemplos/03/README.md +31 -0
- data/docs/revise/ejemplos/04/README.md +37 -0
- data/docs/revise/ejemplos/05/README.md +25 -0
- data/docs/revise/ejemplos/06/README.md +43 -0
- data/docs/revise/ejemplos/README.md +11 -0
- data/docs/revise/projects.md +74 -0
- data/lib/asker.rb +103 -0
- data/lib/asker/ai/ai.rb +70 -0
- data/lib/asker/ai/ai_calculate.rb +55 -0
- data/lib/asker/ai/concept_ai.rb +49 -0
- data/lib/asker/ai/question.rb +58 -0
- data/lib/asker/ai/stages/base_stage.rb +16 -0
- data/lib/asker/ai/stages/main.rb +8 -0
- data/lib/asker/ai/stages/stage_b.rb +87 -0
- data/lib/asker/ai/stages/stage_d.rb +160 -0
- data/lib/asker/ai/stages/stage_f.rb +156 -0
- data/lib/asker/ai/stages/stage_i.rb +140 -0
- data/lib/asker/ai/stages/stage_s.rb +52 -0
- data/lib/asker/ai/stages/stage_t.rb +170 -0
- data/lib/asker/application.rb +30 -0
- data/lib/asker/checker.rb +356 -0
- data/lib/asker/cli.rb +85 -0
- data/lib/asker/code/ai/base_code_ai.rb +48 -0
- data/lib/asker/code/ai/code_ai_factory.rb +26 -0
- data/lib/asker/code/ai/javascript_code_ai.rb +167 -0
- data/lib/asker/code/ai/python_code_ai.rb +167 -0
- data/lib/asker/code/ai/ruby_code_ai.rb +169 -0
- data/lib/asker/code/ai/sql_code_ai.rb +69 -0
- data/lib/asker/code/code.rb +53 -0
- data/lib/asker/data/column.rb +62 -0
- data/lib/asker/data/concept.rb +183 -0
- data/lib/asker/data/data_field.rb +87 -0
- data/lib/asker/data/row.rb +93 -0
- data/lib/asker/data/table.rb +96 -0
- data/lib/asker/data/template.rb +65 -0
- data/lib/asker/data/world.rb +53 -0
- data/lib/asker/exporter/code_gift_exporter.rb +35 -0
- data/lib/asker/exporter/code_screen_exporter.rb +45 -0
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +33 -0
- data/lib/asker/exporter/concept_ai_screen_exporter.rb +115 -0
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +33 -0
- data/lib/asker/exporter/concept_doc_exporter.rb +21 -0
- data/lib/asker/exporter/concept_screen_exporter.rb +25 -0
- data/lib/asker/exporter/main.rb +9 -0
- data/lib/asker/files/config.ini +40 -0
- data/lib/asker/formatter/code_string_formatter.rb +16 -0
- data/lib/asker/formatter/concept_doc_formatter.rb +37 -0
- data/lib/asker/formatter/concept_string_formatter.rb +66 -0
- data/lib/asker/formatter/question_gift_formatter.rb +65 -0
- data/lib/asker/formatter/question_hash_formatter.rb +40 -0
- data/lib/asker/formatter/question_moodlexml_formatter.rb +71 -0
- data/lib/asker/formatter/rb2haml_formatter.rb +26 -0
- data/lib/asker/lang/lang.rb +42 -0
- data/lib/asker/lang/lang_factory.rb +19 -0
- data/lib/asker/lang/text_actions.rb +150 -0
- data/lib/asker/loader/code_loader.rb +53 -0
- data/lib/asker/loader/content_loader.rb +101 -0
- data/lib/asker/loader/directory_loader.rb +58 -0
- data/lib/asker/loader/file_loader.rb +33 -0
- data/lib/asker/loader/image_url_loader.rb +61 -0
- data/lib/asker/loader/input_loader.rb +24 -0
- data/lib/asker/loader/project_loader.rb +71 -0
- data/lib/asker/logger.rb +21 -0
- data/lib/asker/project.rb +170 -0
- metadata +261 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# Descripción de la práctica
|
4
|
+
|
5
|
+
**darts-of-teacher** es un programa informático de licencia Open Source,
|
6
|
+
que ayuda al profesor a crear una gran cantidad de preguntas
|
7
|
+
de forma sencilla, a partir de una mapa conceptual.
|
8
|
+
|
9
|
+
Los pasos son:
|
10
|
+
1. El profesor crea un fichero con el mapa conceptual que quiere trabajar.
|
11
|
+
2. Ejecutamos el programa *darts*.
|
12
|
+
3. La aplicación lee el fichero de entrada y crea un fichero de salida con las preguntas del tema o unidad didáctica.
|
13
|
+
|
14
|
+
---
|
15
|
+
|
16
|
+
# El problema de corregir
|
17
|
+
|
18
|
+
Como profesor, una de las tareas más aburridas es corregir el mismo ejercicio
|
19
|
+
repetido a cada alumno del grupo, todos los años igual. Los cuestionarios
|
20
|
+
tipo test son actividades para los que ya existen aplicaciones que los corrigen
|
21
|
+
de forma automática. Por ejemplo, tenemos los cuestionarios de la plataforma
|
22
|
+
de e-learning Moodle.
|
23
|
+
|
24
|
+
En estos casos, el profesor dispone de tiempo para emplearlo en el análisis de
|
25
|
+
los resultados obtenidos. Y para aplicar dicho conocimiento en la mejora del
|
26
|
+
trabajo, intentado nuevas formas de hacer las cosas, crear nuevas actividades
|
27
|
+
o modificar las existentes o depurar el contenido de los temas, para
|
28
|
+
encontrar una manera de mejorar el proceso de enseñanza-aprendizaje.
|
29
|
+
|
30
|
+
---
|
31
|
+
|
32
|
+
# El problema de crear preguntas
|
33
|
+
|
34
|
+
El gran problema con los cuestionarios tipo test es que sólo son útiles para
|
35
|
+
evaluar características medibles o cuantificables. De modo que podemos
|
36
|
+
estar limitados si queremos evaluar aspectos más abstractos o generales.
|
37
|
+
Pero podemos enfocar este problema desde otro punto de vista. Veamos.
|
38
|
+
|
39
|
+
Si tengo un problema abierto y abstracto, su solución tendrá un conjunto de
|
40
|
+
pasos o hítos que pueden ser medibles. De modo que podemos transformar
|
41
|
+
un problema abierto en un conjunto de muchos microproblemas cerrados.
|
42
|
+
Y ahí es donde vamos a concentrar nuestra atención para medir esas
|
43
|
+
características cuantificables.
|
44
|
+
|
45
|
+
Además, si "bombardeamos" al estudiante con una gran cantidad de preguntas
|
46
|
+
diferentes sobre el mismo concepto, probablemente podremos estar cerca de
|
47
|
+
conocer/medir el grado de asimilación por parte del estudiante de dichos
|
48
|
+
conceptos.
|
49
|
+
|
50
|
+
El problema que teníamos de dedicar tiempo a corregir lo hemos eliminado
|
51
|
+
pero ahora tenemos el problema de dedicar tiempo a crear las preguntas.
|
52
|
+
|
53
|
+
---
|
54
|
+
|
55
|
+
# La solución
|
56
|
+
|
57
|
+
Para resolver el problema de crear las preguntas tenemos **darts-of-teacher**.
|
58
|
+
Este programa multiplataforma de licencia libre se encarga de crear
|
59
|
+
cientos de preguntas por nosotros a partir de un mapa conceptual de la unidad
|
60
|
+
o del tema que queramos trabajar.
|
61
|
+
|
62
|
+
Podemos descargar la aplicación del siguiente URL:
|
63
|
+
https://github.com/dvarrui/darts-of-teacher
|
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
# Resultados
|
3
|
+
|
4
|
+
## Para el profesor
|
5
|
+
|
6
|
+
Con la herramienta **darts-of-teacher** el profesor consigue reducir drásticamente
|
7
|
+
el tiempo necesario para crear bancos de preguntas de los cuestionarios.
|
8
|
+
|
9
|
+
Si manualmente se puede tardar 1 mes en hacer 500 preguntas, con
|
10
|
+
**darts-of-teacher** tardamos 30 minutos.
|
11
|
+
|
12
|
+
El profesor está más feliz porque no pierde tanto tiempo.
|
13
|
+
|
14
|
+
## Para los alumnos
|
15
|
+
|
16
|
+
Los alumnos están contentos de que algunas (no todas) de las actividades
|
17
|
+
sean cuestionarios puesto que de esta forma consiguen un feedback inmediato.
|
@@ -0,0 +1,10 @@
|
|
1
|
+
|
2
|
+
# Para reproducir la práctica docente
|
3
|
+
|
4
|
+
1. Ir a la web del proyecto: https://github.com/dvarrui/darts-of-teacher
|
5
|
+
2. Leer la documentación para instalar el programa.
|
6
|
+
3. Aprender a usar la herramienta:
|
7
|
+
* Leer la documentación.
|
8
|
+
* Consultar los ejemplos para saber cómo empezar.
|
9
|
+
* Ver los vídeos de YouTube y/o
|
10
|
+
* Consultar con <dvarrui@gmail.com>.
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
# Ejemplo 01
|
3
|
+
|
4
|
+
Vamos crear un concepto sobre los personajes de StarWars.
|
5
|
+
|
6
|
+
## Input
|
7
|
+
|
8
|
+
Creamos el fichero [`starwars.xml`](./starwars.xml),
|
9
|
+
con el concepto `obiwan` con una definición.
|
10
|
+
|
11
|
+
> Entendemos por `definición` una descripción textual que identifica de
|
12
|
+
forma inequívoca al concepto al que se refiere.
|
13
|
+
|
14
|
+
## Ejecución
|
15
|
+
|
16
|
+
Para ejecutar *darts* usando como entrada el fichero las definiciones del concepto,
|
17
|
+
hacemos:
|
18
|
+
|
19
|
+
`./darts file docs/es/ejemplos/01/starwars.xml`,
|
20
|
+
|
21
|
+
Vemos que aparece en pantalla la siguiente [información](./starwars.xml-log.txt).
|
22
|
+
|
23
|
+
## Output
|
24
|
+
|
25
|
+
Dentro del directorio `output`, se han creado varios ficheros de salida.
|
26
|
+
Entre ellos, el fichero [starwars-gift.txt](./starwars-gift.txt) con las preguntas
|
27
|
+
en formato Gift, preparadas para cargarse en un cuestionario como los de Moodle.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
# Ejemplo 02
|
3
|
+
|
4
|
+
En el ejemplo anterior usamos un fichero en formato XML, en este ejemplo vamos
|
5
|
+
a usar el mismo contenido pero usando formato HAML.
|
6
|
+
|
7
|
+
HAML produce un XML equivalente. La diferencia está en que no hay etiquetas
|
8
|
+
de cierre, las etiquetas comenzan por % y para crear anidamiento se usan 2 espacios.
|
9
|
+
|
10
|
+
## Input
|
11
|
+
|
12
|
+
Vamos ahora el fichero fichero del ejercicio anterior [`starwars.haml`](./starwars.haml)
|
13
|
+
pero en formato HAML, con el concepto `obiwan` con una definición.
|
14
|
+
|
15
|
+
> Entendemos por `definición` una descripción textual que identifica de
|
16
|
+
forma inequívoca al concepto al que se refiere.
|
17
|
+
|
18
|
+
## Ejecución
|
19
|
+
|
20
|
+
Para ejecutar *darts* usando como entrada el fichero las definiciones del concepto,
|
21
|
+
hacemos:
|
22
|
+
|
23
|
+
`./darts file docs/es/ejemplos/02/starwars.haml`,
|
24
|
+
|
25
|
+
Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
|
26
|
+
|
27
|
+
## Output
|
28
|
+
|
29
|
+
Dentro del directorio `output`, se han creado varios ficheros de salida.
|
30
|
+
Entre ellos, el fichero [starwars-gift.txt](./starwars-gift.txt) con las preguntas
|
31
|
+
en formato Gift, preparadas para cargarse en un cuestionario como los de Moodle.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
# Ejemplo 03
|
3
|
+
|
4
|
+
Vamos a ampliar las definiciones del concepto `obiwan`.
|
5
|
+
|
6
|
+
## Input
|
7
|
+
|
8
|
+
Hemos modificado el fichero [`starwars.haml`](./starwars.haml),
|
9
|
+
ampliando las definiciones del concepto `obiwan`.
|
10
|
+
|
11
|
+
Además hemos incluido
|
12
|
+
una definición de tipo `image_url`. Esto es, un URL a una imagen, la cual
|
13
|
+
identifica de forma inequívoca el conceto al cual se refiere.
|
14
|
+
|
15
|
+
> Por tanto, podemos tener definiciones de texto y URL a una imagen.
|
16
|
+
|
17
|
+
## Ejecución
|
18
|
+
|
19
|
+
Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
|
20
|
+
|
21
|
+
`./darts file docs/es/ejemplos/03/starwars.haml`
|
22
|
+
|
23
|
+
Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
|
24
|
+
|
25
|
+
## Output
|
26
|
+
|
27
|
+
Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
|
28
|
+
format Gift, preparadas para cargarse en Moodle.
|
29
|
+
|
30
|
+
> Podemos comprobar como al aumentar las definiciones aumenta significativamente
|
31
|
+
el número de preguntas que se generan.
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
# Ejemplo 04
|
3
|
+
|
4
|
+
Vamos a incluir más conceptos que tengan que ver con personajes de starwars
|
5
|
+
dentro del mismo mapa.
|
6
|
+
|
7
|
+
## Input
|
8
|
+
|
9
|
+
Consultar el fichero [`starwars.haml`](./starwars.haml) de entrada,
|
10
|
+
con los nuevos conceptos.
|
11
|
+
|
12
|
+
Hemos incluido en cada concepto una etiqueta con el nombre "tags". tags es una
|
13
|
+
lista de términos que ayuda a definir el concepto. Es como una nube de palabras.
|
14
|
+
Esta lista (tags) se usa para evaluar cuańto de cerca está la definición de un
|
15
|
+
concepto con respecto a otro semánticamente. Bueno, es una aproximación.
|
16
|
+
|
17
|
+
Esta valor de distancia semántica entre conceptos ayuda a formar preguntas
|
18
|
+
más difíciles para el alumno, proponiéndole varias alternativas, no al azar, sino
|
19
|
+
aquellas que tengan una "semántica" más parecida.
|
20
|
+
|
21
|
+
Cuantos más conceptos tenga el mapa, más complejas serán las preguntas y más
|
22
|
+
difícil responder al alumno.
|
23
|
+
|
24
|
+
## Ejecución
|
25
|
+
|
26
|
+
Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
|
27
|
+
|
28
|
+
`./darts file docs/es/ejemplos/04/starwars.haml`
|
29
|
+
|
30
|
+
Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
|
31
|
+
|
32
|
+
## Output
|
33
|
+
|
34
|
+
Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
|
35
|
+
format Gift, preparadas para cargarse en Moodle.
|
36
|
+
|
37
|
+
Podemos comprobar como al incluir más conceptos aumentan las preguntas.
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
# Ejemplo 05
|
3
|
+
|
4
|
+
Vamos a ampliar aún más el mapa conceptual añadiendo definiciones a todos
|
5
|
+
los conceptos del mapa.
|
6
|
+
|
7
|
+
## Input
|
8
|
+
|
9
|
+
Hemos modificado el fichero [`starwars.haml`](./starwars.haml),
|
10
|
+
añadiendo definiciones al resto de conceptos del mapa.
|
11
|
+
|
12
|
+
## Ejecución
|
13
|
+
|
14
|
+
Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
|
15
|
+
|
16
|
+
`./darts file docs/es/ejemplos/05/starwars.haml`
|
17
|
+
|
18
|
+
Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
|
19
|
+
|
20
|
+
## Output
|
21
|
+
|
22
|
+
Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
|
23
|
+
format Gift, preparadas para cargarse en Moodle.
|
24
|
+
|
25
|
+
Al incluir más conceptos aumenta el número de preguntas que se generan.
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
# Ejemplo 06
|
3
|
+
|
4
|
+
Vamos a ampliar aún más el concepto `obiwan`, pero ahora vamos a incluir
|
5
|
+
nueva información en forma de "tablas".
|
6
|
+
|
7
|
+
## Input
|
8
|
+
|
9
|
+
Hemos modificado el fichero [`starwars.haml`](./starwars.haml),
|
10
|
+
ampliando la información del concepto `obiwan` con "tablas". Éstas sirven
|
11
|
+
para incluir nueva información que acompaña al concepto pero
|
12
|
+
que no puede ser "definición" porque no identifica al concepto
|
13
|
+
(No es un valor único de dicho concepto).
|
14
|
+
|
15
|
+
> Usamos **definiciones** para representar información que sólo posee dicho concepto.
|
16
|
+
Es informacion única para él.
|
17
|
+
> Usamos las **tablas** para representar información asociada al concepto pero
|
18
|
+
no de forma única. Estos datos se pueden repetir en otros conceptos del mapa conceptual.
|
19
|
+
|
20
|
+
Por ejemplo, vamos a añadir "tabla" con información de "atributo,valor".
|
21
|
+
Esto es un conjunto de atributos del personaje "obiwan" junto con el valor de
|
22
|
+
cada uno.
|
23
|
+
|
24
|
+
Las "tablas" pueden tener tienen uno o dos campos. Cada campo tiene que tener
|
25
|
+
un nombre.
|
26
|
+
|
27
|
+
> En el futuro se podrán hacer tablas con más de 2 campos. Por ahora, no.
|
28
|
+
|
29
|
+
## Ejecución
|
30
|
+
|
31
|
+
Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
|
32
|
+
|
33
|
+
`./darts file docs/es/ejemplos/06/starwars.haml`
|
34
|
+
|
35
|
+
Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
|
36
|
+
|
37
|
+
## Output
|
38
|
+
|
39
|
+
Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
|
40
|
+
format Gift, preparadas para cargarse en Moodle.
|
41
|
+
|
42
|
+
> Podemos comprobar como al incluir las tablas sigue aumentando
|
43
|
+
el número de preguntas que se generan.
|
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
# Ejemplos
|
3
|
+
|
4
|
+
|Ejemplo | Descripción |
|
5
|
+
|-------- |------------ |
|
6
|
+
|[ejemplo 01](01/README.md) | Crear un concepto con una definición |
|
7
|
+
|[ejemplo 02](02/README.md) | Cambiar XML por HAML |
|
8
|
+
|[ejemplo 03](03/README.md) | Añadimos más definiciones y una imagen al concepto |
|
9
|
+
|[ejemplo 04](04/README.md) | Incluimos más conceptos dentro del mismo mapa pero sin definirlos |
|
10
|
+
|[ejemplo 05](05/README.md) | Añadimos definiciones a todos los conceptos del mapa |
|
11
|
+
|[ejemplo 06](06/README.md) | Usamos tablas para añadir más información a un concepto |
|
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
*Extra configuration params*
|
3
|
+
===========================
|
4
|
+
|
5
|
+
=begin
|
6
|
+
lConfig={
|
7
|
+
#category => :none,
|
8
|
+
#formula_weights => [1,1,1],
|
9
|
+
#outputdir => 'output',
|
10
|
+
#logname => 'default.log',
|
11
|
+
#verbose => true,
|
12
|
+
#:show_mode => :default
|
13
|
+
:outputname => 'asir1-idp1314-gift.txt',
|
14
|
+
:lesson_file => 'asir1-idp1314-lesson.txt',
|
15
|
+
:lesson_separator => ' |',
|
16
|
+
:inputdirs => 'input/idp',
|
17
|
+
:process_file => 'idp-u1.xml'
|
18
|
+
}
|
19
|
+
=end
|
20
|
+
|
21
|
+
|
22
|
+
Los parámetros más importantes son:
|
23
|
+
* **:inputdirs**: Una lista de todos los directorios de entrada separados
|
24
|
+
por comas. Por defecto será *input*. Se aconseja hacer subdirectorios
|
25
|
+
dentro de input para organizar los ficheros XML, e incluir los subdirectorios
|
26
|
+
dentro de este parámetro.
|
27
|
+
* **:process_file**: Como los directorios de entrada pueden contener un número
|
28
|
+
elevado de ficheros XML (Cosa además muy recomendable), este parámetro
|
29
|
+
indica el nombre del fichero XML que se desea procesar en este momento.
|
30
|
+
|
31
|
+
El resto no es obligatorio especificarlos, y de podrían dejar los valores por defecto.
|
32
|
+
|
33
|
+
Ejemplo de script con más parámetros:
|
34
|
+
|
35
|
+
require_relative 'sys/interviewer'
|
36
|
+
|
37
|
+
lConfig={
|
38
|
+
:category => :none,
|
39
|
+
:formula_weights => [1,1,1],
|
40
|
+
:outputdir => 'output',
|
41
|
+
:outputname => 'default.txt',
|
42
|
+
:logname => 'default.log',
|
43
|
+
:verbose => true,
|
44
|
+
:show_mode => :full
|
45
|
+
:lesson_file => 'lesson.txt',
|
46
|
+
:lesson_separator => ' |',
|
47
|
+
:inputdirs => 'input/idp,input/etc',
|
48
|
+
:process_file => 'commands.xml'
|
49
|
+
}
|
50
|
+
|
51
|
+
Interviewer.instance.run(lConfig)
|
52
|
+
|
53
|
+
Pero si quieres saber más, ahí van otros parámetros que podemos configurar
|
54
|
+
al ejecutar la herramienta:
|
55
|
+
* **:outputdir**: Nombre del directorio de salida. Por defecto será *output*.
|
56
|
+
* **:outputname**: Nombre del fichero de salida donde se guardarán las preguntas
|
57
|
+
generadas.
|
58
|
+
* **:lesson_file**: Cuando se indica este parámetro se crea un fichero de
|
59
|
+
salida con el contenido de los conceptos en modo texto.
|
60
|
+
* **:lesson_separator**: Por defecto es |. Es un caracter separador para las
|
61
|
+
distintas columnas de las tablas.
|
62
|
+
* **:category**: Nombre de la categoría Moodle donde se cargarán las preguntas.
|
63
|
+
Por defecto no se establece ninguna categoría Moodle.
|
64
|
+
* **:formula_weights**: Son pesos que se utilizarán en la fórmula que calcula
|
65
|
+
la proximidad o cercanía entre dos conceptos diferentes.
|
66
|
+
* **:logname**: Nombre del fichero de log. Este fichero registra las acciones
|
67
|
+
realizadas por script. Por defecto toma el valor *default.log*.
|
68
|
+
* **:verbose**: Si es *true* se emiten mensajes por pantalla de los pasos
|
69
|
+
realizados. Por defecto toma el valor *true*.
|
70
|
+
* **:show_mode**: Cuando la herramienta termina muestra por pantalla un resumen
|
71
|
+
de los datos procesados. El valor por defecto es *:default*. Además acepta
|
72
|
+
los valores *:none* para no mostrar salida, y *:resume* que muestra un
|
73
|
+
breve resumen.
|
74
|
+
|
data/lib/asker.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rainbow'
|
4
|
+
|
5
|
+
require_relative 'asker/project'
|
6
|
+
require_relative 'asker/data/concept'
|
7
|
+
require_relative 'asker/data/world'
|
8
|
+
require_relative 'asker/ai/concept_ai'
|
9
|
+
require_relative 'asker/formatter/concept_string_formatter'
|
10
|
+
require_relative 'asker/exporter/main'
|
11
|
+
require_relative 'asker/loader/project_loader'
|
12
|
+
require_relative 'asker/loader/input_loader'
|
13
|
+
require_relative 'asker/checker'
|
14
|
+
|
15
|
+
# This class does all the job
|
16
|
+
# * start
|
17
|
+
# * load_input_data
|
18
|
+
# * create_output_files, show_create_output_files
|
19
|
+
# * create_questions
|
20
|
+
# * show_final_results
|
21
|
+
class Asker
|
22
|
+
# Initialize atributes
|
23
|
+
def initialize
|
24
|
+
@concepts_ai = []
|
25
|
+
@concepts = []
|
26
|
+
@codes = []
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Start working
|
31
|
+
# @param args (Hash)
|
32
|
+
def start(args = {})
|
33
|
+
load_input_data(args)
|
34
|
+
create_output_files
|
35
|
+
show_final_results
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Load input data
|
40
|
+
# @param args (Hash)
|
41
|
+
def load_input_data(args)
|
42
|
+
ProjectLoader.load(args)
|
43
|
+
Project.instance.open
|
44
|
+
data = InputLoader.load(Project.instance.get(:inputdirs).split(','))
|
45
|
+
@concepts = data[:concepts]
|
46
|
+
@codes = data[:codes]
|
47
|
+
Project.instance.verbose "\n[INFO] Loading data from Internet"
|
48
|
+
@world = World.new(@concepts)
|
49
|
+
ConceptScreenExporter.export_all(@concepts)
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# Create output files
|
54
|
+
# * Gift
|
55
|
+
# * YAML
|
56
|
+
# * TXT Doc
|
57
|
+
def create_output_files
|
58
|
+
show_create_output_files
|
59
|
+
create_questions
|
60
|
+
ConceptDocExporter.new(@concepts).export
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# Checking input file syntax
|
65
|
+
# @param filepath (String)
|
66
|
+
def self.check(filepath)
|
67
|
+
Checker.check(filepath)
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def show_create_output_files
|
73
|
+
p = Project.instance
|
74
|
+
p.verbose "\n[INFO] Creating output files"
|
75
|
+
p.verbose " ├── Gift questions file => #{Rainbow(p.outputpath).bright}"
|
76
|
+
p.verbose " ├── YAML questions file => #{Rainbow(p.yamlpath).bright}"
|
77
|
+
p.verbose " └── Lesson file => #{Rainbow(p.lessonpath).bright}"
|
78
|
+
end
|
79
|
+
|
80
|
+
##
|
81
|
+
# Create questions for every "concept"
|
82
|
+
# Export output to:
|
83
|
+
# * GIFT format file
|
84
|
+
# * YAML format file
|
85
|
+
# Create questions for every "code"
|
86
|
+
# Export output to GIFT format file
|
87
|
+
def create_questions
|
88
|
+
@concepts.each do |concept|
|
89
|
+
concept_ai = ConceptAI.new(concept, @world)
|
90
|
+
concept_ai.make_questions
|
91
|
+
@concepts_ai << concept_ai
|
92
|
+
end
|
93
|
+
ConceptAIGiftExporter.export_all(@concepts_ai)
|
94
|
+
ConceptAIYAMLExporter.export_all(@concepts_ai)
|
95
|
+
CodeGiftExporter.export_all(@codes) # UNDER DEVELOPMENT
|
96
|
+
end
|
97
|
+
|
98
|
+
def show_final_results
|
99
|
+
ConceptAIScreenExporter.export_all(@concepts_ai)
|
100
|
+
CodeScreenExporter.export_all(@codes)
|
101
|
+
Project.instance.close
|
102
|
+
end
|
103
|
+
end
|