asker-tool 2.1.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +18 -19
- data/bin/asker +2 -1
- data/lib/asker/ai/ai.rb +10 -3
- data/lib/asker/ai/ai_calculate.rb +20 -6
- 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 +12 -2
- data/lib/asker/ai/question.rb +28 -6
- data/lib/asker/ai/stages/base_stage.rb +45 -6
- data/lib/asker/ai/stages/stage_b.rb +100 -50
- data/lib/asker/ai/stages/stage_d.rb +75 -90
- data/lib/asker/ai/stages/stage_f.rb +64 -36
- data/lib/asker/ai/stages/stage_i.rb +79 -92
- data/lib/asker/ai/stages/stage_s.rb +41 -36
- data/lib/asker/ai/stages/stage_t.rb +149 -108
- data/lib/asker/application.rb +24 -7
- data/lib/asker/checker.rb +149 -52
- data/lib/asker/cli.rb +37 -32
- data/lib/asker/data/code.rb +76 -0
- data/lib/asker/data/column.rb +31 -21
- data/lib/asker/data/concept.rb +108 -65
- data/lib/asker/data/data_field.rb +14 -0
- data/lib/asker/data/row.rb +75 -52
- data/lib/asker/data/table.rb +91 -42
- data/lib/asker/data/template.rb +3 -1
- data/lib/asker/data/world.rb +61 -32
- data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +13 -6
- data/lib/asker/displayer/concept_ai_displayer.erb +10 -0
- data/lib/asker/displayer/concept_ai_displayer.rb +133 -0
- data/lib/asker/displayer/concept_displayer.rb +34 -0
- data/lib/asker/displayer/stats_displayer.rb +22 -0
- data/lib/asker/exporter/code_gift_exporter.rb +10 -11
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +21 -13
- data/lib/asker/exporter/concept_ai_moodle_exporter.rb +44 -0
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +14 -9
- data/lib/asker/exporter/concept_doc_exporter.rb +21 -14
- data/lib/asker/exporter/data_gift_exporter.rb +29 -0
- data/lib/asker/exporter/output_file_exporter.rb +21 -0
- data/lib/asker/files/{config.ini → asker.ini} +48 -1
- data/lib/asker/files/example-concept.haml +24 -8
- data/lib/asker/files/language/du/connectors.yaml +81 -0
- data/lib/asker/files/language/du/mistakes.yaml +82 -0
- data/lib/asker/files/language/du/templates.yaml +29 -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 +84 -0
- data/lib/asker/files/language/es/templates.yaml +29 -0
- data/lib/asker/files/language/fr/connectors.yaml +76 -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 +13 -9
- data/lib/asker/formatter/moodle/matching.erb +38 -0
- data/lib/asker/formatter/moodle/multichoice.erb +49 -0
- data/lib/asker/formatter/moodle/shortanswer.erb +30 -0
- data/lib/asker/formatter/moodle/truefalse.erb +47 -0
- data/lib/asker/formatter/question_gift_formatter.rb +30 -20
- data/lib/asker/formatter/question_moodle_formatter.rb +27 -0
- data/lib/asker/lang/lang.rb +18 -12
- data/lib/asker/lang/lang_factory.rb +32 -5
- data/lib/asker/lang/text_actions.rb +87 -69
- data/lib/asker/loader/code_loader.rb +4 -4
- data/lib/asker/loader/content_loader.rb +16 -12
- data/lib/asker/loader/directory_loader.rb +3 -3
- data/lib/asker/loader/embedded_file.rb +42 -0
- data/lib/asker/loader/file_loader.rb +3 -12
- data/lib/asker/loader/haml_loader.rb +15 -0
- data/lib/asker/loader/image_url_loader.rb +9 -11
- data/lib/asker/loader/input_loader.rb +24 -8
- data/lib/asker/loader/project_loader.rb +42 -30
- data/lib/asker/logger.rb +30 -6
- data/lib/asker/project.rb +28 -117
- data/lib/asker/skeleton.rb +40 -29
- data/lib/asker.rb +68 -79
- metadata +57 -74
- data/docs/changelog/v2.1.md +0 -99
- data/docs/commands.md +0 -12
- 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 -38
- 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,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
|
@@ -1,25 +0,0 @@
|
|
1
|
-
|
2
|
-
require_relative '../formatter/concept_string_formatter'
|
3
|
-
|
4
|
-
# Show Concept Data on screen
|
5
|
-
module ConceptScreenExporter
|
6
|
-
def self.export_all(concepts)
|
7
|
-
project = Project.instance
|
8
|
-
return if project.show_mode == :none
|
9
|
-
msg = "\n[INFO] Showing concept data <"
|
10
|
-
msg += Rainbow(project.show_mode.to_s).bright + '>'
|
11
|
-
project.verbose msg
|
12
|
-
|
13
|
-
case project.show_mode
|
14
|
-
when :resume
|
15
|
-
s = "* Concepts (#{concepts.count}): "
|
16
|
-
concepts.each { |c| s += c.name + ', ' }
|
17
|
-
project.verbose s
|
18
|
-
when :default
|
19
|
-
# Only show Concepts with process attr true
|
20
|
-
concepts.each do |c|
|
21
|
-
project.verbose ConceptStringFormatter.to_s(c) if c.process?
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/asker/exporter/main.rb
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
|
2
|
-
require_relative 'code_gift_exporter'
|
3
|
-
require_relative 'code_screen_exporter'
|
4
|
-
|
5
|
-
require_relative 'concept_ai_gift_exporter'
|
6
|
-
require_relative 'concept_ai_screen_exporter'
|
7
|
-
require_relative 'concept_ai_yaml_exporter'
|
8
|
-
require_relative 'concept_doc_exporter'
|
9
|
-
require_relative 'concept_screen_exporter'
|