Moodle: ficheros realimentación calificación

Revisado 26 octubre 2024

Resumen

Se comentan los detalles para subir ficheros de realimentación en la calificación de tareas moodle.
El planteamiento inicial es hacerlo asociado a exámenes escritos de modo que el fichero sea el examen corregido, para que el alumno pueda consultar la corrección viendo sus errores: la realimentación es la clave para entender los errores y mejorar, y poder ver la corrección con tiempo, no solo un tiempo en clase que es lo habitual, aporta transparencia a la calificación.

Detalles

Los exámenes en física y química se hacen manuscritos ya que lo habitual es hacer desarrollos con diagramas y ecuaciones y vía online no es viable.
Al no usar libro de texto y usar aula virtual de EducaMadrid implementada en moodle, las calificaciones de los exámenes las pongo en el aula virtual a través del calificador, creando una tarea ya que es más flexible que un ítem de calificación.
Desde hace tiempo pensaba que era una buena idea que los alumnos tuvieran una copia de sus exámenes (siempre les doy acceso a enunciado y resolución, y siempre dejo que hagan fotos de los exámenes corregidos si quieren), pero hasta 2024-2025 no lo lo he realizado por primera vez con cierta automatización que evite hacerlo uno a uno.

Al inicio de 2024-2025 realicé una formación en el centro y compartí la idea

EducaMadrid-CalificaciónEnAulasVirtuales.pdf

Realimentación avanzada
En Moodle existe la posibilidad de añadir como realimentación un fichero pdf, lo que lleva a una posibilidad que aporta transparencia: subir al aula virtual el examen escaneado corregido en pdf, y entregar el examen físico al alumno.
twitter p_trivino/status/1639701181260877825

Un script en shell no aplica a windows, y el vídeo habla de realimentación tras corrección sobre el pdf, por lo que no aplica a mi caso que sigo corrigiendo en papel.
Dentro de que no es algo sencillo, intento detallarlo.

Permitir ficheros de realimentación en moodle

Para poder subir ficheros en una actividad tipo tarea, dentro de
"Configuración" > "Tipos de realimentación"
deben estar marcadas las opciones Archivos de retroalimentación y Hoja de calificaciones externa
Una vez activas, en "Calificar todas las tareas" aparece un desplegable "Acción sobre las calificaciones"
con opciones
"Descargar hoja de calificaciones" y _"Subir múltiples archivos de realimentación en un ZIP"

Subir ficheros de realimentación en moodle

Es lo que en la presentación comentaba como Si son muchos se pueden subir todos a la vez.

Una vez que se tiene el zip, al elegir la opción y tras eligir el fichero, luego da la opción de importar, visualizando antes qué fichero o ficheros se va a subir o a actualizar para cada alumno

Formato del zip con archivos de realimentación

En el vídeo se descargan las entregas el zip y ya tiene una estructura de directorios, pero si no hay entregas la estructura no existe y hay que crearla.
La idea básica es que el fichero con calificaciones se descarga en csv, con varios campos:

Primer campo "Identificador", que tiene contenido "ParticipanteXXXXXX" siendo XXXXXX un número
Segundo campo "Nombre completo", que tiene de contenido el nombre del estudiante, con espacios

La estructura del zip es una carpeta para cada alumno con nombre

"Nombre compleo" + "_" + "XXXXXX" + "_assignsubmission_file"

Generación de estructura de directorios

Importando el csv en LibreOffice, se puede crear mediante una macro.
Hago y pruebo esta macro en linux antes de probar el script

 1Sub CrearDirectorios()
 2    Dim oDoc As Object
 3    Dim oSheet As Object
 4    Dim i As Long
 5    Dim nombreDir As String
 6    Dim rutaBase As String
 7    Dim parteNumerica As String
 8    Dim valorCol1 As String
 9    Dim valorCol2 As String
10    Dim oFile As Object
11
12    oDoc = ThisComponent
13    oSheet = oDoc.CurrentController.ActiveSheet
14    rutaBase = "/home/enrique/Descargas/pruebamoodle/" ' Poner la ruta base acabada en /
15    
16    ' Recorremos las filas de la hoja (asumiendo que los datos empiezan en la fila 0)
17    For i = 0 To oSheet.Rows.Count - 1
18        valorCol1 = oSheet.getCellByPosition(0, i).String ' Primera columna (A)
19        valorCol2 = oSheet.getCellByPosition(1, i).String ' Segunda columna (B)
20        
21        ' Extraer la parte numérica de valorCol1
22        parteNumerica = ""
23        For j = 1 To Len(valorCol1)
24            If IsNumeric(Mid(valorCol1, j, 1)) Then
25                parteNumerica = parteNumerica & Mid(valorCol1, j, 1)
26            End If
27        Next j
28        
29        ' Crear el nombre del directorio
30        If parteNumerica <> "" Then
31            nombreDir = valorCol2 & "_" & parteNumerica & "_assignsubmission_file"
32            ' Crear el directorio
33            Call CrearDirectorio(rutaBase & nombreDir)
34        End If
35    Next i
36End Sub
37
38Sub CrearDirectorio(ruta As String)
39    Dim oFile As Object
40    oFile = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
41    
42    ' Comprobar si el directorio ya existe
43    If Not oFile.Exists(ruta) Then
44        oFile.CreateFolder(ruta) ' Usamos CreateFolder para crear el directorio
45    End If
46End Sub

Separación de pdfs escaneados

Es la tarea que lleva más tiempo: se puede utilizar una herramienta (pdftk, masterpdfeditor, ...) y separar a mano tras ver cuántas hojas son de cada alumno, y poner a mano el nombre de cada alumno en el fichero pdf (poner el nombre en el fichero ayuda a verificar que el pdf se pone en la carpeta correcta y a la hora de subir el zip a verificar que cada alumno tiene su pdf correcto)

En la presentación cito un script que tiene fuente en github, que indica Copyright (C) 2020 Marcos Chavarría Teijeiro pero que contactado indica que es libre

chavaone/exam-split.sh

El script tiene ayuda en el código; parte del csv y busca una cadena, asignando esas páginas como inicio de cada examen

 1	echo "Usage: ./exam-split [OPTIONS] file.pdf"
 2	echo ""
 3	echo "Cadena option is mandatory."
 4	echo ""
 5	echo "OPTIONS:"
 6	echo -e "\t -s|--string STRING: Text that should identify each exam first page."
 7	echo -e "\t -c|--csv CSV_FILE: CSV File generated by Moodle which contents student names and ids."
 8	echo -e "\t -g|--geometry: ImageMagick geometry parameter."
 9	echo -e "\t -o|--output: Output folder name."
10	echo -e "\t -z|--zip: Compress the Moodle folders in a ZIP file."
11	echo -e "\t --help: Show this message."
12	echo -e "\t --debug: Show DEBUG info."

También cita qué programas deben estar instalados:

Busco las líneas de pdf-stapler y miro como cambiarlas para usar pdftk que sí tengo instalado y es un proyecto actual

Código anterior:

1pdf_stapler_bin=`which pdf-stapler`
2if [ -z $pdf_stapler_bin ]
3then
4	echo "You must have PDF Stapler installed."
5	exit
6fi

debe pasar a ser

1pdftk_bin=`which pdftk`
2if [ -z "$pdftk_bin" ]; then
3    echo "You must have pdftk installed."
4    exit 1
5fi

Código anterior:

1pdf-stapler sel $1 $oldpage-$((newpage - 1)) ${TMP_PATH}/${FILE_PATH}_pdfs/$oldnumber.pdf

debe pasar a ser

1pdftk "$1" cat $oldpage-$((newpage - 1)) output "${TMP_PATH}/${FILE_PATH}_pdfs/${oldnumber}.pdf"

Código anterior:

1pdf-stapler sel $1 ${oldpage}-`ls -1 ${TMP_PATH}/${FILE_PATH}_fullimgs/ | wc -l` ${TMP_PATH}/${FILE_PATH}_pdfs/$oldnumber.pdf #creamos o último ficheiro.

debe pasar a ser

1pdftk "$1" cat ${oldpage}-$(ls -1 "${TMP_PATH}/${FILE_PATH}_fullimgs/" | wc -l) output "${TMP_PATH}/${FILE_PATH}_pdfs/${oldnumber}.pdf"

Comentario sobre funcionamiento tras hablar con el autor:

La idea es incluir un pequeño texto en la cabecera de la portada que incluya una palabra clave (MATES) y el número del CSV. El script lo que hace es recortar un rectángulo de la parte superior de cada página donde debería estar esa palabra clave. A continuación hace OCR e intenta buscar la palabra clave. Si la encuentra almacena el número de esa página y también el número que detecta.
El proceso era corregirlos, escanearlos, descargar el csv con de moodle y mientras se pasan las notas al CSV editar el PDF (con Xournal++) para incluír el número del CSV, y luego pasar el programa para dividir

Es casi transparente para los alumnos, porque no tiene que haber nada salvo un hueco en el que no escribir.

Mi planteamiento sería hacer una hoja portada impresa de cada examen con el nombre del alumno, y al corregir poner cada portada delante antes de escanear, sin ser necesario ordenarlos, lo que lo haría totalmente transparente para el alumno que hace el examen sin ninguna limitación, y en el procesado permitiría identificar primera página y asociar examen al alumno al reconocer su nombre vía OCR sin editar el PDF.

Otra opción es poner en el csv un campo con número de páginas de cada alumno y ordenar los exámenes, hacer que el programa trocee esos números de páginas asumiendo ese orden y no sería necesario ni hacer OCR.