asker-tool 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|