Giter VIP home page Giter VIP logo

repository-reviewer's People

Contributors

bassimat avatar jcmiguel avatar

Stargazers

 avatar

Watchers

 avatar

repository-reviewer's Issues

Corrección de maquetación de tabs en QuerierPage

Detectado en Pull Request #27

Al maquetar las pestañas de "Búsqueda Básica" y "Búsqueda Avanzada" en QuerierPage, se observa que el ancho no se ajusta al total disponible en la pantalla. Se debe corregir este punto para que la interfaz sea responsiva.

Armar un motor interactivo de fichaje de artículos

Podría ser interesante disponer de un comando que permita fichar artículos de forma interactiva. Es decir algo como:

prompt$ ./indexer.py --index-card --to=index.csv
Fichaje de artículos
 Ingrese los datos pedidos a continuación
 > Nombre de archivo: ...10-Giuste-2022-XAI Pandemics.pdf
 > Título: ...Explainable Artificial Intelligence Methods in Combating Pandemics: A Systematic Review
 > Autor(es): ...F. Giuste; W. Shi; Y. Zhu; T. Naren; M. Isgut; Y. Sha; L. Tong; M. Gupte; M. D. Wang
 > Medio de publicación: ...IEEE Reviews in Biomedical Engineering
 > Año de publicación: ...2022
 > Fecha de búsqueda: ...Nov 2022
 > Abstract: ... <copy-paste here>
 > Palabras clave: ...Explainable Artificial Intelligence, COVID-19, Explanation Generation, Explanation Representation, Explanation Evaluation, Medical Imaging, Electronic Health Records
 > Referencias importantes: ...
 > Fortalezas: ...
 > Debilidades: ...
 > Oportunidades: ...
¡Ficha generada con éxito!

Al guardar estos archivos en index.csv, luego se podría tener un comando que nos permita buscar una ficha en concreto, por nombre de archivo u otro campo:

prompt$ ./indexer.py --get-index-card 10-Giuste-2022-XAI Pandemics.pdf```
Ficha encontrada:
 > Nombre de archivo: 10-Giuste-2022-XAI Pandemics.pdf
 > Título: Explainable Artificial Intelligence Methods in Combating Pandemics: A Systematic Review
 > Autor(es): F. Giuste; W. Shi; Y. Zhu; T. Naren; M. Isgut; Y. Sha; L. Tong; M. Gupte; M. D. Wang
 > Medio de publicación: IEEE Reviews in Biomedical Engineering
 > Año de publicación: 2022
 > Fecha de búsqueda: Nov 2022
 > Abstract: <copy-paste here>
 > Palabras clave: Explainable Artificial Intelligence, COVID-19, Explanation Generation, Explanation Representation, Explanation Evaluation, Medical Imaging, Electronic Health Records
 > Referencias importantes:
 > Fortalezas:
 > Debilidades:
 > Oportunidades:

A futuro, incluso, podría utilizar este motor de comandos para poder iterar y obtener estadísticas entre todas las fichas registradas: cuántas veces aparece la palabra clave XAI, cuánto artículos son de tal autor, cuántos artículos son de 2019, etc.

Agregar "Indexer Page" en la GUI

Se debe agregar una página en la GUI para poder efectuar el fichaje de artículos

Tener en cuenta al efectuar esta tarea incorporar manejo de excepciones en la GUI, de una forma similar a la siguiente para que sea consistente con lo implementado para querier_page:

      indexer = Indexer()
      try:
        if indexer.configure() is True:
            # Do some indexer.action(...)
      except Exception:
        # Do something...

Problema de refresco de pantalla en GUI

Detectado en Pull Request #27

Al efectuar una búsqueda, la invocación a la función querier() congela la pantalla hasta que termine su ejecución. Esto afecta al desempeño de la interfaz gráfica, dado que puede hacer pensar al usuario que el programa colapsó y no responde.

Incorporar motor de cadenas de búsqueda

Agregar una funcionalidad para que, introduciendo como parámetro de entrada una cadena de búsqueda, la misma se traduzca en los parámetros necesarios para cada API en todos los repositorios.

Incorporar validación cuando no hay resultados de búsqueda

Cuando se realiza una búsqueda que no devuelve resultados desde la interfaz, se obtiene este error:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\juanc\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "D:\ArchivosPersonales\Workspace\repository-reviewer\venv\lib\site-packages\customtkinter\windows\widgets\ctk_button.py", line 554, in _clicked
    self._command()
  File "D:\ArchivosPersonales\Workspace\repository-reviewer\gui\querier_page.py", line 95, in querier_tab_search_btn_event
    querier.search(debug=True)
  File "D:\ArchivosPersonales\Workspace\repository-reviewer\engine\querier.py", line 111, in search
    self.append_partial_res(repo.search())
  File "D:\ArchivosPersonales\Workspace\repository-reviewer\historic\search.py", line 38, in append_partial_res
    self._report_data = self._report_data.merge_reports( results )
  File "D:\ArchivosPersonales\Workspace\repository-reviewer\historic\report.py", line 116, in merge_reports
    compound[item] = self._merge_list_or_tuple(other, item)
  File "D:\ArchivosPersonales\Workspace\repository-reviewer\historic\report.py", line 155, in _merge_list_or_tuple
    for idx in range(len(target)):
TypeError: object of type 'NoneType' has no len()

Es posible que un error similar ocurra cuando se invoca la aplicación desde consola.

Desarrollar interfaz gráfica

Actualmente la aplicación se ejecuta por consola. Se podría desarrollar una interfaz gráfica con PyQT u otras herramientas para proveer otra forma de utilizar la aplicación.

Agregar más repositorios a la plantilla de búsqueda

PubMED

  • Registrarse y solicitar API-key
  • Actualizar config.yaml y probar URL
  • Traducir el diccionario a los parámetros de su API

ERIK

  • Registrarse y solicitar API-key
  • Actualizar config.yaml y probar URL
  • Traducir el diccionario a los parámetros de su API

DOAJ

  • Registrarse y solicitar API-key
  • Actualizar config.yaml y probar URL
  • Traducir el diccionario a los parámetros de su API

Agregar try-except en querier.py

Se agregó el manejo de excepciones en la gui, pero falta incorporarlo en querier.py.

El cambio podría ser solamente incorporar una pieza de código como la siguiente:

    try:
        querier = Querier(args.__dict__)
        querier.configure()
        querier.search(__debug_flag)
    except Exception:
        traceback.print_exc()
        
    return 0

NOTA: el cambio debe impactarse en querier.py y no en engine/querier.py.

Excepcion lanzada cuando se alcanza el limite de consultas por API

Se encontro que cuando se alcanza el limite diario en IEEE, el repositorio devuelve el codigo http 403 (forbidden). Esto produce una excepcion en el codigo que finaliza su ejecucion. Esta es la traza que pude extraer durante la ejecucion:

2023-03-20 20:10:49,595 - ieee - DEBUG - ieee_def - <Response [403]>
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/requests/models.py", line 971, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/jcmiguel/Documentos/Repos/repository-reviewer/./example.py", line 72, in <module>
    id.search()
  File "/home/jcmiguel/Documentos/Repos/repository-reviewer/repos/ieee_def.py", line 34, in search
    total_records_count = ans.json()['total_records']
  File "/usr/lib/python3.10/site-packages/requests/models.py", line 975, in json
    raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Fin de ejecución

Mantención de un historial de búsqueda y un resumen de sus resultados

Sería interesante que en la etapa de análisis, cuando el investigador está descubriendo el área de dominio y probando la combinación de términos que mejor encamine su búsqueda, esta aplicación lo asista permitiendo comparar los resultados obtenidos.

Ejemplo de un ítem del historial:

  • cadena de búsqueda
  • nro de resultados obtenidos
    • nro de resultados por repositorio
  • nro de resultados inspeccionados/revisados
  • etc.

Otro issue podría ser la obtención de un reporte del historial que se pueda ordenar por sus campos

Indexer: solucionar issue de índices

# FIXME: Esta línea rompe si el archivo existe pero no tiene contenido.
-        new_ficha = pd.DataFrame(new_dict, index=[fichas.index[-1] + 1])
+        new_ficha = pd.DataFrame(new_dict, index=[len(fichas) + 1])

Acumulación de resultados en DataFrame tras sucesivas búsquedas desde la GUI

Cada vez que se realiza una búsqueda, lo resultados se apendean en el DataFrame repo.articles_df que es estático (perteneciente a la clase y no a la instancia). Por lo tanto, persiste los resultados búsqueda tras búsqueda. Esto era funcional solo en la ejecución por consola ya que el programa terminaba luego de cada búsqueda.

Ejemplo para reproducir el defecto:

Realizar la siguiente búsqueda más de una vez según los siguientes campos:

  • Title: continual learning
  • Abstract: MCU

Adecuación de reportes para integración con gestores de 3ros

Existen aplicaciones de terceros que permiten ordenar, filtrar y catalogar referencias bibliográficas.
Sería sensato implementar una funcionalidad que permita a esta aplicación integrarse con otras, delimitando el trabajo y dando valor al usuario final a lo largo del proceso de investigación.

Recargar archivo del histórico cuando se accede a la pantalla correspondiente.

Cuando se realiza una búsqueda desde la GUI y se intenta consultar los resultados en el historial, esta búsqueda no se muestra. Sin embargo, el registro queda guardado correctamente en el archivo historic.csv.

Posiblemente falte recargar el archivo para que incluya este resultado reciente. Cuando se reinicia la aplicación, el archivo se vuelve a levantar y este resultado se muestra satisfactoriamente.

Incorporación de criterios de inclusión/exclusión como parte de la aplicación

¿Podría encararse el desarrollo de una funcionalidad que permita realizar esto?

Algunas cuestiones a tener en cuenta:

  • Un criterio de inclusión/exclusión por fecha de publicación equivale a incorporar un filtro de fecha, lo cual ya es un argumento existente en la aplicación.
  • Un criterio de inclusión/exclusión por lenguaje de publicación equivaldría a incorporar un argumento de lenguaje y traducirlo en todas las apis que dispongan este parámetro.

Es decir, los criterios quedarían implícitos en la cadena de búsqueda y en los argumentos de ejecución. ¿No está resuelto esto ya?

Aplicar un filtrado de duplicados al resultado de búsquedas

Desarrollo de funcionalidad para interfaz de consola

Tener en cuenta que un artículo puede estar publicado en distintos repositorios y no debería aparecer más de una vez en el reporte de artículos.
Para esto habrá que decidir:

  • De cual repo se toma primero.
  • Que criterio utilizamos para determinar que es un duplicado. Campo, coincidencia, etc.

El motor de detección de duplicados deberá basarse en una variable para decidir de qué forma actuará.

  • El comportamiento por defecto podría ser:
    • Los artículos considerados duplicados no se agregan al table_articles.csv, sino a un potencial_duplicated.csv (debería tener una clave foranea que permita asociarlo al artículo que duplica.
  • Otras opciones podrían aplicar para resolver conflictos en el front-end. (a desarrollarse en #36)

Extender la funcionalidad de ingreso de campos en el indexer

Descripción

Este issue tiene 2 puntos de apoyo:

Autocompletado de campos automáticos

Por un lado, se comenta que las funciones relativas al ingreso de campos se podrías extender para autocompletar con la información disponible de los articulos a fichar, sin tener que ingresarla a mano por consola.

Mejora de la usabilidad en la edición de fichas

Sobre el issue #12, en la segunda entrega referente a la edición de una ficha #22 se explora la oportunidad de modificar la usabilidad en la edición:

La edición no debería implicar ingresar todo nuevamente, sino modificar campos en particular

Se valoran 3 alternativas (en orden de preferencia):

  1. En caso de no ingresar un valor de entrada, dejar ese ítem como estaba y continuar la edición con los siguientes
  2. Poder indicar un ítem opcional en el método index_an_article( ) para modificar solo ese ítem.
  3. Dejarlo así como está, aunque creo que alguna de las alternativas anteriores vendría bien para el autocompletado del issue #14.

Discusión relacionada:

#22 (comment)

Pérdida de datos en dataframe

Al efectuar búsquedas en IEEE y Scopus, los resultados de la última búsqueda sustituyen a los de la primera en el archivo de salida.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.