Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add BOPA (Asturias) in ETLS module #76

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

anajsana
Copy link

This PR creates a new folder to extract and load BOPA docs in the ETLS module. Files include:

  • scrapper.py (WIP)
  • metadata.py (WIP)
  • README.md
  • defs.py
  • load.py (TBD)

Please note: Scrapper.py needs further iteration to successfully be integrated into the ETLS architecture. Right now, the scraper is storing the data with metadata tags in a JSON locally.

Copy link
Collaborator

@ntkog ntkog left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Te paso la review @anajsana .
Cualquier duda, me dices :-)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En la medida de lo posible, cuantos más metadatos podamos sacar del boletín, más juego nos dará después para combinar datos. Si hay algún metadato que no se puede rellenar, porque no sea posible rellenarlo, se declara pero luego cuando se escrapea el documento, se pone como cadena vacía.

En este fichero, lo que solemos hacer es apoyarnos en pydantic para asegurarnos de que lo que vayamos a insertar en qdrant sea correcto, (que cada metadato tenga el tipo declarado aquí)

Para que luego podamos hacer búsquedas en Qdrant sin tener que añadir código de adaptación, lo ideal es que todas las colleciones, en la sección de metadatos tengan el mismo nombre.

Puedes consultar los nombres de los metadatos del ETL del BOE para hacerte una idea.

En este caso concreto, te propongo unos cambios de nombre( marcados en los comentarios).

Te pongo un pantallazo de referencia de una de las disposiciones del BOPA, y los datos que se pueden extraer:

Screenshot_20240313_203502
Screenshot_20240313_202945


# Metadata (TBD)

disposition_date: str
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fecha_disposicion: str = ""

disposition_date: str
reference_number: str
section_name: str
department_name: str
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

departamento: str

# Metadata (TBD)

disposition_date: str
reference_number: str
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

numero_oficial: str = ""

reference_number: str
section_name: str
department_name: str
content: str
Copy link
Collaborator

@ntkog ntkog Mar 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Este campo no es necesario aquí. El content se procesará como embedding y no lo incluímos en los metadatos.

Copy link
Collaborator

@ntkog ntkog Mar 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En este fichero, tenemos una serie de convenciones que no hemos documentado aún (sorry).

Te pongo de referencia el del BOCM

En scrapper.py hay que seguir la siguiente convención "no escrita":

Esta clase implementa al menos dos métodos:

download_day

En este método, concretamente se saca una lista de los enlaces del sumario del día ( _list_links_day) y sobre cada uno de los enlaces, se llama a download_document

download_document

Este método se encarga de hacer la petición a la url que se le pasa como parámetro, para guardar en fichero temporal la parte de texto, extraer todos metadatos que recoge _extract_metadata

Load.py

Al tenerlo implementado así, luego hay un proceso jobs.py , que se encarga de ir llamando a cada uno de los etl's para hacer el scrapeo.

En el caso del BOCM, se implementa en load.py

Espero que te ayude la explicación.
En cualquier caso, si algo no ha quedado claro, avísame porfa.

@ntkog
Copy link
Collaborator

ntkog commented Mar 13, 2024

Una cosilla más:
En principio sólo hace falta escrapear las disposiciones generales (propias de Asturias Sección I) , y las de administración local (IV).

Las de Autoridades y Personal y las de otros Anuncios no las estamos recogiendo en otros boletines.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants