-
Notifications
You must be signed in to change notification settings - Fork 32
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
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this 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 :-)
There was a problem hiding this comment.
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:
|
||
# Metadata (TBD) | ||
|
||
disposition_date: str |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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":
- tiene que haber una clase, en este caso BOPAScrapper que hereda de BaseScrapper
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.
Una cosilla más: Las de Autoridades y Personal y las de otros Anuncios no las estamos recogiendo en otros boletines. |
This PR creates a new folder to extract and load BOPA docs in the ETLS module. Files include:
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.