def elegirPaper(user): papers = list(Paper.objects(on_revision=user)) if papers: paper = random.choice( papers ) #permite elegir un elementos de una lista (en este caso la lista de papers) if paper.inclusion1 is None: number = 1 else: number = 2 #print("opcion1") return paper, number papers = list( Paper.objects( Q(inclusion2__exists=False) & Q(user_inclusion1__ne=user) & Q(on_revision__exists=False) & (Q(isOnlyReference=False) | Q(isOnlyReference__exists=False)))) if papers: paper = random.choice(papers) if paper.inclusion1 is None: number = 1 else: number = 2 #print("opcion2") return paper, number else: return None, None
def mostrarPantallaCuracionBibliografica(): conectarBd() papers = Paper.objects( Q(inclusion1=True) & Q(inclusion2=True) & Q(bibliographyIsLoaded__exists=False)) count_papers = len(papers) if count_papers > 0: st.success("Se encontraron disponibles " + str(count_papers) + " papers para cargar.") st.markdown("## ¿Desea realizar la carga ahora?") cargar = st.button("Cargar") if cargar: automatizarCarga(papers) else: st.error("No hay papers disponibles para cargar en este momento.")
def verificarUsuario(): if os.path.exists("user_selected"): user = f = open("user_selected", "r").read() st.sidebar.write("Usuario: " + user) if st.sidebar.button("Cambiar Usuario"): os.remove("user_selected") return user else: if os.path.exists("user_session"): with open('user_session', 'rb') as fp: opciones = pickle.load(fp) else: opciones = op.opciones.copy() conectarBd() with st.spinner("Conectando con la Base de Datos..."): for paper in Paper.objects(): if paper.user_inclusion1 is not None: opciones["users"].add(paper.user_inclusion1) if paper.user_inclusion2 is not None: opciones["users"].add(paper.user_inclusion2) with open('user_session', 'wb') as fp: pickle.dump(opciones, fp, protocol=pickle.HIGHEST_PROTOCOL) options = list(opciones["users"]) options.append("Otro") options = ["Seleccionar..."] + options st.markdown("#### Usuario") user = st.selectbox( label= "Seleccione su nombre de entre la lista de usuarios. Si usted no se encuentra en la lista elija 'Otro' y carguelo manualmente por única vez.", options=options) if user == "Otro": user = st.text_input( label="Ingrese un usuario para agregar a la base de datos.") if st.button("Guardar Usuario"): f = open("user_selected", "w") f.write(user) f.close() os.remove("user_session") return user
def buscarOpcionesCargadas(): opciones = op.opciones.copy() for paper in Paper.objects(): opciones["research_goal_list"].update(paper.research_goal) opciones["practical_contibution_list"].add(paper.practical_contibution) tasks = paper.visual_tasks if tasks is None: continue for task in tasks: opciones["visual_tasks_list"].add(task.name) opciones["data_capture_conditions_list"].add( task.data_capture_condition) opciones["electromagnetic_spectrum_list"].add( task.electromagnetic_spectrum) opciones["camera_types_list"].add(task.camera_types) opciones["viticultural_objects_list"].update( task.viticultural_objects) opciones["algorithms_list"].update(task.algorithms) opciones["viticultural_variable_list"].update( task.viticultural_variable) opciones["varietal_list"].update(task.variety) opciones["irrigation_conduction_list"].update(task.driving_systems) for feature in task.visual_features: if feature.type == "Handcrafted": opciones["visual_features_handcrafted_list"].add( feature.name) elif feature.type == "Latent": opciones["visual_features_latent_list"].add(feature.name) else: opciones["visual_features_deep_list"].add(feature.name) return opciones # disconnect() # connect('literatureReview') # for paper in Paper.objects: # print(paper.doi)
def mostrarSeccionExtracción(user): conectarBd() col1, col2 = st.beta_columns(2) opciones = buscarOpcionesCargadas() seccion = st.sidebar.radio(label="Secciones", options=[ "Seleccionar artículo", "Características de la investigación", "Tareas visuales" ]) if st.sidebar.button("Enviar"): guardarExtraccion() if st.sidebar.button("Cargar otro paper"): reiniciarCarga() if seccion == "Seleccionar artículo": if os.path.exists("paper_selected"): st.markdown( "#### Ya se ha seleccionado el paper cuyos datos extraer") with open('paper_selected', 'r') as fp: data = json.load(fp) st.json(data) if st.button("Seleccionar otro paper"): os.remove("paper_selected") else: st.markdown("## Seleccionar artículo para extraer datos.") doi = st.text_input( label= "Ingrese el doi del artículo en su formato url. Por ejemplo: doi.org/10.1109/CVPR.2016.609" ) if st.button(label="Buscar"): paper = None try: badflag = False paper = Paper.objects.get(doi=doi) st.success("Se encontró un paper con título:\n" + '**"' + paper.title + '"**') goals = paper.research_goal if goals: st.error( "El paper encontrado tiene cargadas el objetivo de la investigación" ) st.write("Objetivo de la investigación: ") for goal in goals: st.write(paper.research_goal) badflag = True if paper.practical_contibution is not None: st.error( "El paper encontrado tiene cargadas Aportes Prácticos de la investigación" ) st.write("Aporte práctico: " + paper.practical_contibution) badflag = True if paper.viticultural_aspects is not None: st.error( "El paper encontrado tiene cargadas Aspectos Vitícolas de la investigación" ) st.write("Aspectos Vitícolas: " + paper.viticultural_aspects) badflag = True tasks = paper.visual_tasks if tasks: st.error( "El paper encontrado tiene cargadas las tareas visuales" ) visual_to_show = [] for task in paper.visual_tasks: visual_to_show.append(json.loads(task.to_json())) st.write(visual_to_show) badflag = True if not badflag: st.success( "El paper seleccionado esta en condiciones para llevar adelante la carga\n" ) with open('paper_selected', 'w') as fp: json.dump(paper.to_json(), fp) st.write( "Continue con la extracción y los datos ingresados se asociarán a este paper." ) st.json(paper.to_json()) else: st.error( "El paper seleccionado NO esta en condiciones para llevar adelante la carga. Contactese con el administrador de su Base de Datos.\n" ) except Paper.MultipleObjectsReturned: st.write( "Al parecer, hay más de un paper con el doi ingresado." ) papers = Paper.objects(doi=doi) names = [] for paper in papers: names.append(paper.title) name = st.selectbox( label="Elija el que usted quiera analizar", options=names) paper = Paper.objects(doi=doi, names=name)[0] except Paper.DoesNotExist: st.error( "No existe ningun paper con el doi ingresado en la base de datos." ) if seccion == "Tareas visuales": if os.path.exists("tareas_def"): st.markdown("#### Ya se han cargado los datos de esta sección") with open('tareas_def', 'r') as fp: tasks = json.load(fp) st.json(tasks) if st.button("Cargar más tareas"): os.remove("tareas_def") if st.button("Eliminar datos cargados"): os.remove("tareas") os.remove("tareas_def") else: st.markdown("## Extraer datos del paper seleccionado.") st.markdown("### Tareas Visuales de alto Nivel") st.markdown( "Los siguientes campos deberán completarse para **cada una** de las tareas visuales que se llevan a cabo mediante CV en el paper." ) st.markdown( "Una vez que se hayan completado los campos necesarios, presione **'Cargar Tarea'** para salvar los datos y pasar a la siguiente tarea visual (si es que hay más de una)." ) col1, col2 = st.beta_columns(2) with col1: st.markdown("#### Nombre de la tarea") options = list(opciones["visual_tasks_list"]) options.append("Otra") task = st.selectbox( label= "Seleccione una tarea visual de alto nivel. Si la que se quiere ingresar no se encuentra en la lista elija 'Otra' y carguela manualmente", options=options) if task == "Otra": task = st.text_input( label= "Ingrese una tarea visual para agregar a la base de datos." ) sub = st.radio("Subsecciones", [ "Información Vitícola", "Dataset", "Features", "Algoritmos" ]) if st.button("1) Agregar tarea visual a la lista"): cargarTarea(task) mostrarTareas() if st.button("2) Guardar lista de tareas"): copyfile("tareas", "tareas_def") time.sleep(1) st.success("¡Se han guardado los datos de esta sección! ") with open('tareas_def', 'r') as fp: tasks = json.load(fp) st.json(tasks.to_json()) st.write( "Seguí completando los campos de otras secciones o presioná 'Enviar' en la barra lateral si ya completaste todas las secciones." ) if st.button("Eliminar tareas visuales cargadas"): os.remove("tareas") st.success( "¡Se han eliminado las tareas visuales cargadas hasta el momento! " ) with col2: if sub == "Información Vitícola": if os.path.exists("viticulture"): st.markdown( "#### Ya se han cargado los datos de esta sección") with open('viticulture', 'r') as fp: data = json.load(fp) st.json(data) if st.button("Eliminar datos cargados"): os.remove("viticulture") else: st.markdown("#### Objetos Vitícolas") options = list(opciones["viticultural_objects_list"]) options.append("Otros") objs = st.multiselect( label= "Seleccione todos los objetos vitícolas sobre los que se aplica la tarea visual de alto nivel. Si algún objeto no se encuentra en la lista elija 'Otros' y carguelo manualmente", options=options) if "Otros" in objs: objs2 = st.text_input( label= "Ingrese objetos vitícolas para agregar a la base de datos separados por comas" ) st.markdown("#### Variables Vitícolas") options = list(opciones["viticultural_variable_list"]) options.append("Otras") vars = st.multiselect( label= "Seleccione todas las variables vitícolas que se midieron mediante esta tarea visual. Si alguna variable vitícola no se encuentra en la lista elija 'Otras' y carguela manualmente", options=options) if "Otras" in vars: vars2 = st.text_input( label= "Ingrese variables vitícolas para agregar a la base de datos separados por comas" ) var_details = st.text_area( label= "Ingrese algun comentario destacable sobre la manera en que se aplicó esta tarea visual a la medición de la variable en caso de ser necesario." ) monitor = st.checkbox( "¿Se monitoriza la medición de estas variables a lo largo del tiempo?" ) guardar = st.button("Guardar") if guardar: if "Otras" in vars: if "Otros" in objs: cargarInfoViticola(objs, vars, var_details, monitor, objs2.split(','), vars2.split(',')) else: cargarInfoViticola(objs, vars, var_details, monitor, vars2=vars2.split(',')) else: if "Otros" in objs: cargarInfoViticola(objs, vars, var_details, monitor, objs2.split(',')) else: cargarInfoViticola(objs, vars, var_details, monitor) if sub == "Dataset": st.markdown("#### Dataset") if os.path.exists("dataset"): st.markdown( "#### Ya se han cargado los datos de esta sección") with open('dataset', 'r') as fp: data = json.load(fp) st.json(data) if st.button("Eliminar datos cargados"): os.remove("dataset") else: bench = st.checkbox( "¿El dataset utilizado es de benchmarking?") if not bench: format = st.selectbox( label= "Seleccione los elementos de los que se compone el dataset", options=list(opciones["dataset_format_list"])) options = list( opciones["electromagnetic_spectrum_list"]) options.append("Otra") electromagnetic = st.selectbox( label= "Indique qué sección del espectro electromagnetico se capturó en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente", options=options) if electromagnetic == "Otra": electromagnetic = st.text_input( label= "Ingrese una sección del espectro electromagnetico para agregar a la base de datos." ) options = list(opciones["camera_types_list"]) options.append("Otra") camera = st.selectbox( label= "Indique con qué tipo/arreglo de cámara se capturó el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente", options=options) if camera == "Otra": camera = st.text_input( label= "Ingrese una sección del espectro electromagnetico para agregar a la base de datos." ) camera_details = st.text_area( label= "Ingrese algun comentario destacable sobre el hardware utilizado en caso de que lo crea conveniente" ) options = list( opciones["data_capture_conditions_list"]) options.append("Otra") condition = st.selectbox( label= "Seleccione las condiciones en que se capturó el dataset. Si la que se quiere ingresar no se encuentra en la lista elija 'Otra' y carguela manualmente", options=options) if condition == "Otra": condition = st.text_input( label= "Ingrese una condición de captura nueva para agregar a la base de datos." ) options = list(opciones["varietal_list"]) options.append("Otros") # varietal = st.st.multiselect(label="Seleccione el/los varietales correspondientes observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",options=options) # if varietal == "Otra": # varietal = st.text_input(label="Ingrese una condición de captura nueva para agregar a la base de datos.") varietales = st.multiselect( label= "Seleccione el/los varietales correspondientes observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente", options=options) if "Otros" in varietales: varietales2 = st.text_input( label= "Ingrese varietales para agregar a la base de datos, separados por comas" ) options = list( opciones["irrigation_conduction_list"]) options.append("Otros") # irrigation = st.multiselect(label="Seleccione el/los sistemas de conducción observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente",options=options) # if irrigation == "Otra": # irrigation = st.text_input(label="Ingrese una condición de captura nueva para agregar a la base de datos.") irrigations = st.multiselect( label= "Seleccione el/los sistemas de conducción observados en el dataset. Si ninguna de las opciones lo satisface, elija 'Otra' y carguela manualmente", options=options) if "Otros" in irrigations: irrigations2 = st.text_input( label= "Ingrese sistemas de conducción para agregar a la base de datos, separados por comas" ) dataset_details = st.text_area( label= "Ingrese algun comentario destacable sobre la captura del dataset en caso de ser necesario." ) link = st.checkbox("¿Se encuentra disponible?") if link: link = st.text_input( label="Ingrese la url para acceder al dataset." ) if st.button("Guardar"): if bench: #objs=varietales #vars=irrigations #cargarDataset(bench,link) if "Otros" in irrigations: if "Otros" in varietales: cargarDataset( bench, link, varietales, irrigations, varietales2=varietales2.split(','), irrigations2=irrigations2.split( ',')) #cargarInfoViticola(objs,vars,var_details,monitor,varietales2.split(','),irrigations2.split(',')) else: cargarDataset( bench, link, varietales, irrigations, irrigations2=irrigations2.split( ',')) #cargarInfoViticola(objs,vars,var_details,monitor,irrigations2=irrigations2.split(',')) else: if "Otros" in varietales: cargarDataset( bench, link, varietales, irrigations, varietales2=varietales2.split(',')) #cargarInfoViticola(objs,vars,var_details,monitor,varietales2.split(',')) else: cargarDataset(bench, link, varietales, irrigations) #cargarInfoViticola(objs,vars,var_details,monitor) else: #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details) if "Otros" in irrigations: if "Otros" in varietales: cargarDataset( bench, link, varietales, irrigations, format, electromagnetic, camera, camera_details, condition, dataset_details, varietales2=varietales2.split(','), irrigations2=irrigations2.split( ',')) #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details) else: cargarDataset( bench, link, varietales, irrigations, format, electromagnetic, camera, camera_details, condition, dataset_details, irrigations2=irrigations2.split( ',')) #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details) else: if "Otros" in varietales: cargarDataset( bench, link, varietales, irrigations, format, electromagnetic, camera, camera_details, condition, dataset_details, varietales2=varietales2.split(',')) #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details) else: cargarDataset(bench, link, varietales, irrigations, format, electromagnetic, camera, camera_details, condition, dataset_details) #cargarDataset(bench,link,format,electromagnetic,camera,camera_details,condition,dataset_details) if sub == "Features": if os.path.exists("features_def"): st.markdown( "#### Ya se han cargado los datos de esta sección") feat = pd.read_csv('features_def') st.dataframe(feat) if st.button("Cargar más datos"): os.remove("features_def") if st.button("Eliminar datos cargados"): os.remove("features") os.remove("features_def") else: st.markdown("#### Features") st.markdown( "Las features son representaciones de los datos visuales crudos que son más propicias para una tarea informática y se obtienen a través de un proceso a menudo creativo. " ) feature_type = st.selectbox( "Elija un tipo de features a ingresar", options=list(opciones["visual_features_types"])) if st.checkbox( "Ver más info sobre los tipos de features..."): st.markdown("Existen 3 tipos:") st.markdown( "- **Classic hand-crafted features**: Estas features están diseñadas por expertos humanos tratando de mantener invariante una propiedad específica de los datos. Estas features son fácilmente interpretables y caracterizan aspectos fundamentales de las imágenes como el color, la textura y la forma.\n- **Features latentes** : Estas features consisten en representaciones del objeto ocultas en un subespacio de dimensionalidad inferior al de los datos crudos y son encontradas automáticamente por algoritmos de optimización.\n- **Deep Features**: Estas features consisten en representaciones jerárquicas extraídas mediante una red neuronal multicapa. En este tipo de features, el conocimiento del experto se concentra en el diseño de la red que se encargará de aprender la mejor forma de representar los datos a medida que aprende a realizar la tarea para la cual los necesita." ) if feature_type == "Handcrafted": options = list( opciones["visual_features_handcrafted_list"]) options.append("Otras") features_hand = st.multiselect( label= "Seleccione todas las handcrafted features utilizadas para esta tarea visual de alto nivel. Si alguna feature de este estilo no se encuentra en la lista elija 'Otras' y carguelas manualmente", options=options) if "Otras" in features_hand: features_hand2 = st.text_input( label= "Ingrese handcrafted features para agregar a la base de datos **separadas por comas**" ) if st.button( "1) Agregar Handcrafted Features a la lista" ): if "Otras" in features_hand: cargarFeatures("Handcrafted", features_hand, features_hand2) else: cargarFeatures("Handcrafted", features_hand) elif feature_type == "Latent": options = list( opciones["visual_features_latent_list"]) options.append("Otras") features_lat = st.multiselect( label= "Seleccione todas las latent features utilizadas para esta tarea visual de alto nivel. Si alguna feature de este estilo no se encuentra en la lista elija 'Otras' y carguelas manualmente", options=options) if "Otras" in features_lat: features_lat2 = st.text_input( label= "Ingrese latent features para agregar a la base de datos **separadas por comas**" ) if st.button( "1) Agregar Latent Features a la lista"): if "Otras" in features_lat: cargarFeatures("Latent", features_lat, features_lat2) else: cargarFeatures("Latent", features_lat) elif feature_type == "Deep": options = list( opciones["visual_features_deep_list"]) options.append("Otras") features_deep = st.multiselect( label= "Seleccione todas las deep features utilizadas para esta tarea visual de alto nivel. Si alguna feature de este estilo no se encuentra en la lista elija 'Otras' y carguelas manualmente", options=options) if "Otras" in features_deep: features_deep2 = st.text_input( label= "Ingrese latent features para agregar a la base de datos separadas por comas" ) if st.button( "1) Agregar Deep Features a la lista"): if "Otras" in features_deep: cargarFeatures("Deep", features_deep, features_deep2) else: cargarFeatures("Deep", features_deep) if st.button("2) Guardar lista completa"): copyfile("features", "features_def") st.success( "¡Se han guardado los datos de esta sección! ") data = pd.read_csv('features_def') st.dataframe(data) st.write( "Seguí completando los campos de otras secciones o presioná 'Enviar' en la barra lateral si ya completaste todas las secciones." ) if st.button("Eliminar afiliaciones cargadas"): os.remove("features") st.success( "¡Se han eliminado las afiliaciones cargadas hasta el momento! " ) if sub == "Algoritmos": if os.path.exists("algorithms"): st.markdown( "#### Ya se han cargado los datos de esta sección") with open('algorithms', 'r') as fp: data = json.load(fp) st.json(data) if st.button("Eliminar datos cargados"): os.remove("algorithms") else: st.markdown("#### Algoritmos") options = list(opciones["algorithms_list"]) options.append("Otros") algs = st.multiselect( label= "Seleccione todos los algoritmos de machine learning que se usaron para esta tarea visual. Si algún algoritmo no se encuentra en la lista elija 'Otros' y carguelo manualmente", options=options) if "Otros" in algs: algs2 = st.text_input( label= "Ingrese algoritmos de machine learning para agregar a la base de datos separados por comas" ) guardar = st.button("Guardar") if guardar and not "Otros" in algs: cargarAlgoritmos(algs) if guardar and "Otros" in algs: cargarAlgoritmos(algs, algs2.split(',')) if seccion == "Características de la investigación": if os.path.exists("caracteristicas"): st.markdown("#### Ya se han cargado los datos de esta sección") with open('caracteristicas', 'r') as fp: data = json.load(fp) st.json(data) if st.button("Eliminar datos cargados"): os.remove("caracteristicas") else: st.markdown("## Extraer datos del paper seleccionado.") st.markdown("#### Objetivo de la investigación") options = list(opciones["research_goal_list"]) options.append("Otros") goals = st.multiselect( label= "Seleccione los objetivos que persiguieron los autores con esta investigación. Si ninguno de los objetivos de la lista lo convence, elija 'Otro' y carguelo manualmente", options=options) if "Otros" in goals: goals2 = st.text_input( label= "Ingrese objetivos para agregar a la base de datos separados por comas." ) st.markdown("#### Aporte práctico") options = list(opciones["practical_contibution_list"]) options.append("Otro") practical = st.selectbox( label= "Seleccione el tipo de contribución práctica de este paper. Si alguna contribución práctica no se encuentra en la lista elija 'Otras' y carguela manualmente", options=options) if practical == "Otro": practical = st.text_input( label= "Ingrese una contribución práctica para agregar a la base de datos." ) st.markdown("#### Aspectos Vitícolas") options = list(opciones["viticultural_aspects_list"]) options.append("Otro") aspects = st.selectbox( label= "Seleccione los aspectos vitícolas que intenta resolver este paper. Si algun aspecto no se encuentra en la lista elija 'Otros' y carguela manualmente", options=options) if aspects == "Otro": aspects = st.text_input( label= "Ingrese un aspecto vitícola para agregar a la base de datos." ) guardar = st.button("Guardar") if guardar and not "Otros" in goals: cargarCaracterísticas(goals, practical, aspects) if guardar and "Otros" in goals: cargarCaracterísticas(goals, practical, aspects, goals2.split(','))
def automatizarCarga(papers): papers_before = len(Paper.objects) authors_before = len(Author.objects) inst_before = len(Institution.objects) fin_inst_before = len(Finantial_Institution.objects) total = len(papers) inicio_msg = st.success( "Se iniciará la carga de información bibliográfica de **" + str(total) + "** papers.") my_bar = st.progress(.0) loaded = 0 exitos = [] fallos = [] for paper in papers: with open('mensajes.txt', 'a') as f: try: test = get_entity(paper.doi, EntityType.PUBLICATION, OutputType.JSON) exitos.append(test['title'][0]) #st.write(test['title'][0]) except: fallos.append(paper.title) f.write('Fallo la Busqueda del Paper \n') if test['created']['date-parts'][0][1] is not None: paper.publication_month = test['created']['date-parts'][0][1] paper.save() if test['created']['date-parts'][0][0] is not None: paper.publication_year = test['created']['date-parts'][0][0] #Guardando Autores y autores affiliation if 'author' in test: affiliation_list = [] for autor in test['author']: try: name_author = autor['given'] + ' ' + autor['family'] except: continue try: author_ = Author.objects.get(name=name_author) except Author.MultipleObjectsReturned: f.write("Hubo un problema con el Autor: " + name_author + "\n") continue except Author.DoesNotExist: if 'ORCID' in autor and 'authenticated-orcid' in autor: author_ = Author(orcid=autor['ORCID'], authenticated_orcid=autor[ 'authenticated-orcid'], name=name_author, familyName=autor['family'], firstName=autor['given']).save() f.write("Se guardó el Autor: " + name_author + "\n") else: author_ = Author(name=name_author, familyName=autor['family'], firstName=autor['given']).save() f.write("Se guardó el Autor: " + name_author + "\n") if autor['affiliation'] != []: for institucion in autor['affiliation']: try: institution_ = Institution.objects.get( name=institucion['name']) except Institution.MultipleObjectsReturned: f.write( "Hubo un problema con la Institución : " + institucion['name'] + "\n") continue except Institution.DoesNotExist: f.write("Se guardó la Institución : " + institucion['name'] + "\n") institution_ = Institution( name=institucion['name']).save() affiliation = Author_Affiliation( institution=institution_, author=author_, sequence=autor['sequence']) affiliation_list.append(affiliation) else: affiliation = Author_Affiliation( author=author_, sequence=autor['sequence']) affiliation_list.append(affiliation) paper.author_affiliations = affiliation_list #Obteniendo Finantial_Institution funder_list = [] if 'funder' in test: for funder_ in test['funder']: try: if 'DOI' in funder_: funder = Finantial_Institution.objects.get( doi=funder_['DOI']) else: funder = Finantial_Institution.objects.get( name=funder_['name']) except Finantial_Institution.MultipleObjectsReturned: f.write( "Hubo un problema con la institución financiera: " + funder_['name'] + "\n") continue except Finantial_Institution.DoesNotExist: if 'DOI' in funder_: funder = Finantial_Institution( doi=funder_['DOI'], name=funder_['name']).save() f.write("Se guardó la Institución : " + funder_['name'] + "\n") else: funder = Finantial_Institution( name=funder_['name']).save() f.write("Se guardó la Institución : " + funder_['name'] + "\n") funder_list.append(funder) paper.finantial_institutions = funder_list else: f.write("El paper " + paper.doi + " no fue financiado por ninguna institución. \n") #Obteniendo reference reference_list = [] if 'reference' in test: for reference_ in test['reference']: try: if 'DOI' in reference_: paper_ref = Paper.objects.get( doi=reference_['DOI']) else: continue except Paper.MultipleObjectsReturned: f.write( "Hubo un problema con el paper de referencia: " + reference_['DOI'] + "\n") continue except Paper.DoesNotExist: if 'article-title' in reference_ and 'DOI' in reference_: paper_ref = Paper( doi=reference_['DOI'], title=reference_['article-title'], abstract=' ', isOnlyReference=True).save() f.write("Se guardó el paper de referencia: " + reference_['DOI'] + "\n") else: f.write("Paper de referencia no tiene title: " + "\n") reference_list.append(reference_['DOI']) else: f.write("Paper de referencia no tiene DOI: " + "\n") paper.references = reference_list paper.bibliographyIsLoaded = True paper.save() f.close() loaded += 1 my_bar.progress(loaded / total) my_bar.empty() inicio_msg.empty() papers_after = len(Paper.objects) authors_after = len(Author.objects) inst_after = len(Institution.objects) fin_inst_after = len(Finantial_Institution.objects) exitosDF = pd.DataFrame() exitosDF["Título"] = pd.Series(exitos) fallosDF = pd.DataFrame() fallosDF["Título"] = pd.Series(fallos) st.success("Se procesaron exitosamente **" + str(len(exitos)) + "** papers") st.success("Se ingresaron **" + str(papers_after - papers_before) + " nuevas referencias** a la base de datos") st.success("Se ingresaron **" + str(authors_after - authors_before) + " nuevos autores** a la base de datos") st.success("Se ingresaron **" + str(inst_after - inst_before) + " nuevas instituciones** a la base de datos") st.success("Se ingresaron **" + str(fin_inst_after - fin_inst_before) + " nuevas instituciones financiadoras** a la base de datos") st.dataframe(exitosDF) st.error("La API CrossRef no tenía registros de **" + str(len(fallos)) + "** papers") st.dataframe(fallosDF)
def crearPaper(): badflag = False if not os.path.exists("affiliations_def"): error = InputError("Faltan los autores!!") st.sidebar.write(error) badflag = True if not os.path.exists("publication"): error = InputError("Faltan los datos de publicación!!") st.sidebar.write(error) badflag = True if not os.path.exists("financement"): error = InputError("Faltan los datos de financiamiento!!") st.sidebar.write(error) badflag = True if badflag: return False with open('publication', 'r') as fp: pub_data = json.load(fp) finan_data = pd.read_csv('financement') aff_data = pd.read_csv('affiliations') #manejo de instituciones financieras finantial_institutions_list = [] for index, row in finan_data.iterrows(): try: f_inst = Finantial_Institution.objects.get(name=row["Name"]) finantial_institutions_list.append(f_inst) except Finantial_Institution.MultipleObjectsReturned: st.write("Hubo un problema con la institución: " + row["Name"]) continue except Finantial_Institution.DoesNotExist: st.write("Se guardó la institución: " + row["Name"]) #fin_ins = Finantial_Institution(name = row["Name"], country = row["Country"]).save() #finantial_institutions_list.append(fin_ins) #manejo de afiliaciones affiliations = [] for index, row in aff_data.iterrows(): #autor try: author = Author.objects.get(name=row["Autor"]) except Author.MultipleObjectsReturned: st.write("Hubo un problema con el autor: " + row["Autor"]) continue except Author.DoesNotExist: st.write("Se guardó al autor " + row["Autor"] + " con id " + str(row["Scopus_id"])) author = Author(name=row["Autor"], scopusID=str(row["Scopus_id"])).save() #institucion try: institution = Institution.objects.get(name=row["Institución"]) except Institution.MultipleObjectsReturned: st.write("Hubo un problema con la institución: " + row["Institución"]) continue except Institution.DoesNotExist: st.write("Se guardó la institución " + row["Institución"]) institution = Institution(name=row["Institución"]).save() aff = Author_Affiliation(institution=institution, author=author) affiliations.append(aff) #crea el paper new_paper = Paper(title=pub_data["Titulo"], abstract=pub_data["Abstract"], doi=pub_data["DOI"], keywords=pub_data["Keywords"], publication_month=pub_data["Mes_Publicacion"], publication_year=pub_data["Año_Publicacion"], finantial_institutions=finantial_institutions_list, author_affiliations=affiliations).save() with open('paper', 'w') as fp: json.dump(new_paper.to_json(), fp) st.sidebar.success("¡Se han guardado los datos de este paper! ") st.sidebar.json(new_paper.to_json()) return True
def mostrarAvance(users_distribution): opciones = op.opciones.copy() users = list(opciones["users"]) revisions = {} for user in users: revisions[user] = 0 cantidadRevisiones = 0 cantidadRevisados = 0 cantidadSinRevisar = 0 incluidos = 0 conflictos = 0 soloUnaSeleccion = 0 excluidos = 0 for paper in Paper.objects( Q(isOnlyReference=False) | Q(isOnlyReference__exists=False)): isOnlyReference = False #por las dudas que quede algun paper cargado desde antes de que exista este atributo cantidadRevisiones += 2 if paper.inclusion1 is not None: revisions[paper.user_inclusion1] += 1 cantidadRevisados += 1 if paper.inclusion2 is not None: if paper.user_inclusion2 == paper.user_inclusion1: del paper.inclusion2 del paper.user_inclusion2 del paper.criteria_inclusion2 del paper.comments2 soloUnaSeleccion += 1 paper.save() else: revisions[paper.user_inclusion2] += 1 cantidadRevisados += 1 if paper.inclusion1 and paper.inclusion2: incluidos += 1 if not paper.inclusion1 and not paper.inclusion2: excluidos += 1 if paper.inclusion1 != paper.inclusion2: conflictos += 1 else: soloUnaSeleccion += 1 else: cantidadSinRevisar += 1 progress = cantidadRevisados / cantidadRevisiones finish = st.progress(progress) st.write("Progreso: " + str(cantidadRevisados) + "/" + str(cantidadRevisiones) + "=" + str(round(progress * 100, 2)) + "%") st.write("Sin Revisar: " + str(cantidadSinRevisar)) if users_distribution: st.set_option('deprecation.showPyplotGlobalUse', False) y = np.arange(len(users)) plt.barh(y, width=list(revisions.values())) plt.yticks(y, list(revisions.keys())) plt.xticks(list(revisions.values())) st.pyplot(plt.show()) if st.checkbox("Ver Resultados Preliminares"): st.set_option('deprecation.showPyplotGlobalUse', False) eje_x = ['Incluidos', 'Excluidos', 'Conflictos', 'En Revisión'] eje_y = [incluidos, excluidos, conflictos, soloUnaSeleccion] plt.bar(eje_x, eje_y) plt.yticks(eje_y) st.pyplot(plt.show()) if st.button("Ver conflictos"): dataConflictos = [] for paper in Paper.objects( Q(inclusion1=True) & Q(inclusion2=False)): dataConflictos.append([ paper.doi, paper.user_inclusion1, paper.inclusion1, paper.user_inclusion2, paper.inclusion2 ]) for paper in Paper.objects( Q(inclusion1=False) & Q(inclusion2=True)): dataConflictos.append([ paper.doi, paper.user_inclusion1, paper.inclusion1, paper.user_inclusion2, paper.inclusion2 ]) conflictosDF = pd.DataFrame(data=dataConflictos, columns=("doi", "Revisor 1", "Veredicto 1", "Revisor 2", "Veredicto 2")) st.dataframe(conflictosDF) if st.button("Ver incluidos"): dataIncluidos = [] for paper in Paper.objects( Q(inclusion1=True) & Q(inclusion2=True)): dataIncluidos.append([ paper.doi, paper.title, paper.user_inclusion1, paper.user_inclusion2 ]) incluidosDF = pd.DataFrame(data=dataIncluidos, columns=("doi", "Título", "Revisor 1", "Revisor 2")) st.dataframe(incluidosDF)