asker-tool 2.1.2 → 2.1.7
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 +4 -4
- data/{LICENSE → LICENSE.txt} +0 -0
- data/README.md +17 -18
- data/bin/asker +1 -0
- data/lib/asker.rb +43 -74
- data/lib/asker/ai/ai.rb +4 -0
- data/lib/asker/ai/code/base_code_ai.rb +104 -0
- data/lib/asker/{code/ai → ai/code}/code_ai_factory.rb +11 -1
- data/lib/asker/{code/ai → ai/code}/javascript_code_ai.rb +2 -5
- data/lib/asker/ai/code/problem_code_ai.rb +176 -0
- data/lib/asker/{code/ai → ai/code}/python_code_ai.rb +2 -5
- data/lib/asker/{code/ai → ai/code}/ruby_code_ai.rb +14 -7
- data/lib/asker/{code/ai → ai/code}/sql_code_ai.rb +2 -5
- data/lib/asker/ai/concept_ai.rb +1 -0
- data/lib/asker/ai/stages/stage_t.rb +76 -76
- data/lib/asker/application.rb +19 -3
- data/lib/asker/checker.rb +152 -53
- data/lib/asker/cli.rb +19 -22
- data/lib/asker/data/code.rb +73 -0
- data/lib/asker/data/column.rb +31 -21
- data/lib/asker/data/concept.rb +42 -45
- data/lib/asker/data/data_field.rb +14 -0
- data/lib/asker/data/row.rb +75 -52
- data/lib/asker/data/table.rb +89 -42
- data/lib/asker/data/world.rb +58 -32
- data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +6 -6
- data/lib/asker/displayer/concept_ai_displayer.rb +132 -0
- data/lib/asker/displayer/concept_displayer.rb +29 -0
- data/lib/asker/displayer/stats_displayer.rb +14 -0
- data/lib/asker/exporter/code_gift_exporter.rb +10 -11
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +23 -11
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +9 -7
- data/lib/asker/exporter/concept_doc_exporter.rb +9 -15
- data/lib/asker/exporter/output_file_exporter.rb +18 -0
- data/lib/asker/files/config.ini +37 -0
- data/lib/asker/files/example-code.haml +0 -0
- data/lib/asker/files/example-concept.haml +29 -0
- data/lib/asker/files/language/du/templates.yaml +50 -0
- data/lib/asker/files/language/en/connectors.yaml +44 -0
- data/lib/asker/files/language/en/mistakes.yaml +37 -0
- data/lib/asker/files/language/en/templates.yaml +29 -0
- data/lib/asker/files/language/es/connectors.yaml +92 -0
- data/lib/asker/files/language/es/mistakes.yaml +82 -0
- data/lib/asker/files/language/es/templates.yaml +29 -0
- data/lib/asker/files/language/fr/connectors.yaml +92 -0
- data/lib/asker/files/language/fr/mistakes.yaml +82 -0
- data/lib/asker/files/language/fr/templates.yaml +29 -0
- data/lib/asker/files/language/javascript/connectors.yaml +11 -0
- data/lib/asker/files/language/javascript/mistakes.yaml +30 -0
- data/lib/asker/files/language/javascript/templates.yaml +3 -0
- data/lib/asker/files/language/math/connectors.yaml +2 -0
- data/lib/asker/files/language/math/mistakes.yaml +2 -0
- data/lib/asker/files/language/math/templates.yaml +1 -0
- data/lib/asker/files/language/python/connectors.yaml +11 -0
- data/lib/asker/files/language/python/mistakes.yaml +26 -0
- data/lib/asker/files/language/python/templates.yaml +3 -0
- data/lib/asker/files/language/ruby/connectors.yaml +11 -0
- data/lib/asker/files/language/ruby/mistakes.yaml +33 -0
- data/lib/asker/files/language/ruby/templates.yaml +3 -0
- data/lib/asker/files/language/sql/connectors.yaml +6 -0
- data/lib/asker/files/language/sql/mistakes.yaml +11 -0
- data/lib/asker/files/language/sql/templates.yaml +2 -0
- data/lib/asker/formatter/concept_string_formatter.rb +9 -8
- data/lib/asker/formatter/question_gift_formatter.rb +9 -1
- data/lib/asker/lang/lang.rb +18 -12
- data/lib/asker/lang/lang_factory.rb +26 -5
- data/lib/asker/lang/text_actions.rb +87 -69
- data/lib/asker/loader/code_loader.rb +3 -3
- data/lib/asker/loader/content_loader.rb +9 -5
- data/lib/asker/loader/file_loader.rb +2 -11
- data/lib/asker/loader/haml_loader.rb +15 -0
- data/lib/asker/loader/image_url_loader.rb +5 -8
- data/lib/asker/loader/input_loader.rb +23 -7
- data/lib/asker/loader/project_loader.rb +32 -29
- data/lib/asker/logger.rb +3 -4
- data/lib/asker/project.rb +28 -52
- data/lib/asker/skeleton.rb +73 -0
- metadata +62 -73
- data/docs/changelog/v2.1.md +0 -99
- data/docs/commands.md +0 -15
- data/docs/contributions.md +0 -18
- data/docs/history.md +0 -40
- data/docs/idea.md +0 -44
- data/docs/inputs/README.md +0 -39
- data/docs/inputs/code.md +0 -69
- data/docs/inputs/concepts.md +0 -142
- data/docs/inputs/jedi.md +0 -68
- data/docs/inputs/tables.md +0 -112
- data/docs/inputs/templates.md +0 -87
- data/docs/install/README.md +0 -38
- data/docs/install/manual.md +0 -26
- data/docs/install/scripts.md +0 -26
- data/docs/revise/asker-file.md +0 -41
- data/docs/revise/buenas-practicas/01-convocatoria.md +0 -30
- data/docs/revise/buenas-practicas/02-formulario.md +0 -35
- data/docs/revise/buenas-practicas/03-descripcion.md +0 -63
- data/docs/revise/buenas-practicas/04-resultados.md +0 -17
- data/docs/revise/buenas-practicas/05-reproducir.md +0 -10
- data/docs/revise/ejemplos/01/README.md +0 -27
- data/docs/revise/ejemplos/02/README.md +0 -31
- data/docs/revise/ejemplos/03/README.md +0 -31
- data/docs/revise/ejemplos/04/README.md +0 -37
- data/docs/revise/ejemplos/05/README.md +0 -25
- data/docs/revise/ejemplos/06/README.md +0 -43
- data/docs/revise/ejemplos/README.md +0 -11
- data/docs/revise/projects.md +0 -74
- data/lib/asker/code/ai/base_code_ai.rb +0 -48
- data/lib/asker/code/code.rb +0 -53
- data/lib/asker/exporter/concept_ai_screen_exporter.rb +0 -115
- data/lib/asker/exporter/concept_screen_exporter.rb +0 -25
- data/lib/asker/exporter/main.rb +0 -9
|
@@ -1,31 +0,0 @@
|
|
|
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.
|
|
@@ -1,37 +0,0 @@
|
|
|
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.
|
|
@@ -1,25 +0,0 @@
|
|
|
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.
|
|
@@ -1,43 +0,0 @@
|
|
|
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.
|
|
@@ -1,11 +0,0 @@
|
|
|
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 |
|
data/docs/revise/projects.md
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
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
|
-
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
require_relative '../../lang/lang_factory'
|
|
3
|
-
require_relative '../../ai/question'
|
|
4
|
-
|
|
5
|
-
class BaseCodeAI
|
|
6
|
-
def name
|
|
7
|
-
File.basename(@data_object.filename)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def num
|
|
11
|
-
@num += 1
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def clone_array(array)
|
|
15
|
-
out = []
|
|
16
|
-
array.each { |item| out << item.dup }
|
|
17
|
-
out
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def lines_to_s(lines)
|
|
21
|
-
out = ''
|
|
22
|
-
lines.each_with_index do |line,index|
|
|
23
|
-
out << "%2d: #{line}\n"%(index+1)
|
|
24
|
-
end
|
|
25
|
-
out
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def lines_to_html(lines)
|
|
29
|
-
out = ''
|
|
30
|
-
lines.each_with_index do |line,index|
|
|
31
|
-
out << "%2d: #{line}</br>"%(index+1)
|
|
32
|
-
end
|
|
33
|
-
out
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def find_make_methods
|
|
37
|
-
list = self.public_methods.sort
|
|
38
|
-
list.select! { |name| name.to_s.start_with? 'make_'}
|
|
39
|
-
list.delete(:make_questions)
|
|
40
|
-
list
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def make_questions
|
|
44
|
-
list = find_make_methods
|
|
45
|
-
list.each { |m| @questions += self.send m }
|
|
46
|
-
@questions
|
|
47
|
-
end
|
|
48
|
-
end
|
data/lib/asker/code/code.rb
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
require_relative 'ai/code_ai_factory'
|
|
2
|
-
require_relative '../project'
|
|
3
|
-
require_relative '../formatter/code_string_formatter'
|
|
4
|
-
|
|
5
|
-
# Contains code data input
|
|
6
|
-
class Code
|
|
7
|
-
attr_reader :dirname, :filename, :type
|
|
8
|
-
attr_accessor :process, :features
|
|
9
|
-
attr_reader :lines, :questions
|
|
10
|
-
|
|
11
|
-
def initialize(dirname, filename, type)
|
|
12
|
-
@dirname = dirname
|
|
13
|
-
@filename = filename
|
|
14
|
-
@type = type
|
|
15
|
-
@filepath = File.join(@dirname, @filename)
|
|
16
|
-
@process = false
|
|
17
|
-
@features = []
|
|
18
|
-
@lines = load(@filepath)
|
|
19
|
-
@questions = []
|
|
20
|
-
@code_ai = CodeAIFactory.get(self)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def process?
|
|
24
|
-
@process
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def make_questions
|
|
28
|
-
return unless process?
|
|
29
|
-
@questions += @code_ai.make_questions
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def lines_to_s(lines)
|
|
33
|
-
out = ''
|
|
34
|
-
lines.each_with_index do |line, index|
|
|
35
|
-
out << format("%2d| #{line}\n", (index + 1))
|
|
36
|
-
end
|
|
37
|
-
out
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def debug
|
|
41
|
-
out = CodeStringFormatter.to_s(self)
|
|
42
|
-
p = Project.instance
|
|
43
|
-
p.verbose out
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
private
|
|
47
|
-
|
|
48
|
-
def load(filepath)
|
|
49
|
-
return if filepath.nil?
|
|
50
|
-
content = File.read(filepath)
|
|
51
|
-
content.split("\n")
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'terminal-table'
|
|
4
|
-
|
|
5
|
-
# Show ConceptAI info on screen
|
|
6
|
-
class ConceptAIScreenExporter
|
|
7
|
-
def self.export_all(concepts_ai)
|
|
8
|
-
@concepts_ai = concepts_ai
|
|
9
|
-
project = Project.instance
|
|
10
|
-
return if project.show_mode == :none
|
|
11
|
-
|
|
12
|
-
# Create table HEAD
|
|
13
|
-
screen_table = Terminal::Table.new do |st|
|
|
14
|
-
st << ['Concept','Questions','Entries','xFactor',
|
|
15
|
-
'd','b','f','i','s','t']
|
|
16
|
-
st << :separator
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# Create table BODY
|
|
20
|
-
total = {}
|
|
21
|
-
total[:q] = total[:e] = total[:c] = 0
|
|
22
|
-
total[:sd] = total[:sb] = total[:sf] = 0
|
|
23
|
-
total[:si] = total[:ss] = total[:st] = 0
|
|
24
|
-
|
|
25
|
-
@concepts_ai.each do |concept_ai|
|
|
26
|
-
if concept_ai.process?
|
|
27
|
-
e = concept_ai.texts.size
|
|
28
|
-
concept_ai.tables.each { |t| e += t.fields.size * t.rows.size }
|
|
29
|
-
|
|
30
|
-
sd = concept_ai.questions[:d].size
|
|
31
|
-
sb = concept_ai.questions[:b].size
|
|
32
|
-
sf = concept_ai.questions[:f].size
|
|
33
|
-
si = concept_ai.questions[:i].size
|
|
34
|
-
ss = concept_ai.questions[:s].size
|
|
35
|
-
st = concept_ai.questions[:t].size
|
|
36
|
-
t = sd + sb + sf + si + ss + st
|
|
37
|
-
|
|
38
|
-
if e == 0
|
|
39
|
-
factor = 'Unkown'
|
|
40
|
-
else
|
|
41
|
-
factor = (t.to_f/e.to_f).round(2).to_s
|
|
42
|
-
end
|
|
43
|
-
screen_table.add_row [Rainbow(concept_ai.name(:screen)).green.bright,
|
|
44
|
-
t, e, factor, sd, sb, sf, si, ss, st]
|
|
45
|
-
|
|
46
|
-
total[:q] += t ; total[:e] += e; total[:c] += 1
|
|
47
|
-
total[:sd] += sd; total[:sb] += sb; total[:sf] += sf
|
|
48
|
-
total[:si] += si; total[:ss] += ss; total[:st] += st
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
return if total[:c] == 0 # No concepts to be process?
|
|
52
|
-
|
|
53
|
-
# Add row with excluded questions
|
|
54
|
-
export_excluded_questions(screen_table, @concepts_ai)
|
|
55
|
-
|
|
56
|
-
# Create table TAIL
|
|
57
|
-
screen_table.add_separator
|
|
58
|
-
screen_table.add_row [Rainbow("TOTAL = #{total[:c]}").bright,
|
|
59
|
-
Rainbow(total[:q].to_s).bright,
|
|
60
|
-
Rainbow(total[:e].to_s).bright,
|
|
61
|
-
Rainbow((total[:q].to_f/total[:e].to_f).round(2)).bright,
|
|
62
|
-
total[:sd], total[:sb], total[:sf],
|
|
63
|
-
total[:si], total[:ss], total[:st]]
|
|
64
|
-
export_notes
|
|
65
|
-
project.verbose screen_table.to_s + "\n"
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def self.export_excluded_questions(screen_table, concepts_ai)
|
|
69
|
-
# Create table BODY
|
|
70
|
-
total = {}
|
|
71
|
-
total[:q] = total[:c] = 0
|
|
72
|
-
total[:sd] = total[:sb] = total[:sf] = 0
|
|
73
|
-
total[:si] = total[:ss] = total[:st] = 0
|
|
74
|
-
|
|
75
|
-
concepts_ai.each do |concept_ai|
|
|
76
|
-
if concept_ai.process?
|
|
77
|
-
sd = concept_ai.excluded_questions[:d].size
|
|
78
|
-
sb = concept_ai.excluded_questions[:b].size
|
|
79
|
-
sf = concept_ai.excluded_questions[:f].size
|
|
80
|
-
si = concept_ai.excluded_questions[:i].size
|
|
81
|
-
ss = concept_ai.excluded_questions[:s].size
|
|
82
|
-
st = concept_ai.excluded_questions[:t].size
|
|
83
|
-
t = sd + sb + sf + si + ss + st
|
|
84
|
-
|
|
85
|
-
total[:q] += t ; total[:c] += 1
|
|
86
|
-
total[:sd] += sd; total[:sb] += sb; total[:sf] += sf
|
|
87
|
-
total[:si] += si; total[:ss] += ss; total[:st] += st
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
screen_table.add_row [Rainbow('Excluded questions').yellow.bright,
|
|
91
|
-
total[:q], '-', '-',
|
|
92
|
-
total[:sd], total[:sb],
|
|
93
|
-
total[:sf], total[:si],
|
|
94
|
-
total[:ss], total[:st]]
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def self.export_notes
|
|
98
|
-
p = Project.instance
|
|
99
|
-
p.verbose "\n[INFO] Showing CONCEPT statistics\n"
|
|
100
|
-
p.verbose ' * Exclude questions: ' +
|
|
101
|
-
Application.instance.config['questions']['exclude'].to_s
|
|
102
|
-
p.verbose ' * Annotations:'
|
|
103
|
-
p.verbose ' ├── (d) Definitions <= Concept.def'
|
|
104
|
-
p.verbose ' ├── (b) Table Matching <= ' \
|
|
105
|
-
'Concept.table.rows.columns'
|
|
106
|
-
p.verbose ' ├── (f) Tables 1 Field <= Concept.table.fields.size==1'
|
|
107
|
-
p.verbose ' ├── (i) Images URL <= ' \
|
|
108
|
-
"Concept.def{:type => 'image_url'}"
|
|
109
|
-
p.verbose ' ├── (s) Sequences <= ' \
|
|
110
|
-
"Concept.table{:sequence => '...'}"
|
|
111
|
-
p.verbose ' └── (t) Table Rows&Cols <= ' \
|
|
112
|
-
'Concept.table.rows.columns'
|
|
113
|
-
p.verbose "\n"
|
|
114
|
-
end
|
|
115
|
-
end
|