Spaces:
Build error
Build error
import gradio as gr | |
import json | |
from flask import jsonify | |
from sentence_transformers import SentenceTransformer, InputExample, util | |
from codeScripts.utils import save_json, load_json, create_file_path | |
from plentas import Plentas | |
import pandas as pd | |
import zipfile | |
import os | |
def Main(configuration, uploadedFile): | |
error = "" | |
modelResult = "" | |
configuration_dict = json.loads(configuration) | |
try: | |
uploadedFilePath = uploadedFile.name | |
config_json = load_json("configV2.json") | |
#configuring plentas methodology | |
response = Plentas(config_json[0], [answersTodict(uploadedFilePath), createTeacherJson(configuration_dict)]) | |
# #overwriting the custom settings for the settings from the api | |
response.setApiSettings(configuration) | |
modelResult = jsonify(response.processApiData()) | |
except Exception as e: | |
error = "Oops: " + str(e) | |
return [error, modelResult] | |
def createTeacherJson(configuration): | |
""" | |
This function extracts the information about the subquestions and subanswers and puts them in the correct format. | |
Inputs: | |
config: The configured info from the api. | |
Outputs: | |
teachersJson: The generated dictionary with the subquestions. | |
""" | |
teachersJson = {"enunciado": "", "minipreguntas":[], "keywords":""} | |
#5 is the maximum number of permitted subquestions in the configuration2 page | |
for i in range(5): | |
try: | |
teachersJson["minipreguntas"].append({ | |
"minipregunta": configuration["minip" + str(i+1)], | |
"minirespuesta": configuration["minir" + str(i+1)] | |
}) | |
except: | |
break | |
return teachersJson | |
def extractZipData(ruta_zip): | |
""" | |
This function extracts the students's answers from the zip file (the one the teacher has in the task section). | |
Inputs: | |
ruta_zip: The path inherited from answersTodict | |
""" | |
#defining the path where the extracted info is to be stored | |
ruta_extraccion = create_file_path("StudentAnswers/", doctype= 1) | |
#extracting the info | |
archivo_zip = zipfile.ZipFile(ruta_zip, "r") | |
try: | |
archivo_zip.extractall(pwd=None, path=ruta_extraccion) | |
except: | |
pass | |
archivo_zip.close() | |
def removeHtmlFromString(string): | |
""" | |
This function removes the html tags from the student's response. | |
Inputs: | |
-string: The student's response | |
Outputs: | |
-new_string: The filtered response | |
""" | |
string = string.encode('utf-8', 'replace') | |
string = string.decode('utf-8', 'replace') | |
new_string = "" | |
skipChar = 0 | |
for char in string: | |
if char == "<": | |
skipChar = 1 | |
elif char == ">": | |
skipChar = 0 | |
else: | |
if not skipChar: | |
new_string = new_string+char | |
new_string = new_string.encode('utf-8', 'replace') | |
new_string = new_string.decode('utf-8', 'replace') | |
return new_string | |
def answersTodict(zip_path): | |
""" | |
This function extracts the students's answers and stacks them in one specific format so that it can be processed next. | |
Inputs: | |
ruta_zip: The path where the zip file is stored | |
Outputs: | |
studentAnswersDict: The dictionary with all the responses | |
""" | |
#extracting the data | |
extractZipData(zip_path) | |
studentAnswersDict = [] | |
#stacking the information of each extracted folder | |
for work_folder in os.listdir(create_file_path("StudentAnswers/", doctype= 1)): | |
for student, indx in zip(os.listdir(create_file_path("StudentAnswers/" + work_folder, doctype= 1)), range(len(os.listdir(create_file_path("StudentAnswers/" + work_folder, doctype= 1))))): | |
student_name = student.split("(") | |
student_name = student_name[0] | |
try: | |
#opening the file | |
#fichero = open(create_file_path("StudentAnswers/" + work_folder + "/" + student + "/" + 'comments.txt', doctype= 1)) | |
#where the actual response is | |
fichero = open(create_file_path("StudentAnswers/" + work_folder + "/" + student + "/" + 'Adjuntos del envio/Respuesta enviada', doctype= 1), encoding='utf-8') | |
#reading it | |
lineas = fichero.readlines() | |
#removing html | |
lineas[0] = removeHtmlFromString(lineas[0]) | |
#saving it | |
studentAnswersDict.append({"respuesta":lineas[0], "hashed_id":student_name, "TableIndex":indx}) | |
except: | |
studentAnswersDict.append({"respuesta":"", "hashed_id":student_name, "TableIndex":indx}) | |
#saving the final dictionary | |
save_json(create_file_path('ApiStudentsDict.json', doctype= 1),studentAnswersDict) | |
return studentAnswersDict | |
configuration = gr.inputs.Textbox(lines=10, placeholder="JSON de Configuración") | |
zipFileInput = gr.inputs.File(label="ZIP file") | |
#dataFrameOutput = gr.outputs.Dataframe(headers=["Resultados"], max_rows=20, max_cols=None, overflow_row_behaviour="paginate", type="pandas", label="Resultado") | |
labelOutput = gr.outputs.Label(num_top_classes=None, type="auto", label="") | |
labelError = gr.outputs.Label(num_top_classes=None, type="auto", label="") | |
iface = gr.Interface(fn=Main | |
, inputs=[configuration, zipFileInput] | |
, outputs=[labelError, labelOutput] | |
, title = "PLENTAS" | |
) | |
iface.launch(share = False,enable_queue=True, show_error =True) |