[Silver Pipeline] - Parte 001 - Cria extratores e normalizadores de dados#649
Conversation
| return None | ||
|
|
||
|
|
||
| def normalize_text(text: str | None) -> str | None: |
There was a problem hiding this comment.
Em search_gateway.option_normalization e harvest.language_normalizer tem funções que cumprem o mesmo proposito dessas, é interessante colocar todas essas funções em um diretório unico para evitar duplicação de código.
There was a problem hiding this comment.
Ótimo. Proponho mover todas as funções de normalização para o core (Algo como core/normalization.py). Há outras em indicator que posso mover pra lá tbm, em algum momento.
Ou vc entende que devemos ter outra ideia?
| self.assertEqual(scalar_or_list(["a", "b"]), ["a", "b"]) | ||
|
|
||
|
|
||
| class LanguageNormalizerTests(SimpleTestCase): |
There was a problem hiding this comment.
Há casos em que o valor do idioma vem em outros idiomas, por ex: Português. É o caso de adicionar uma tradução no valor do idioma para sempre inglês depois da normalização do valor. Outros exemplos de valores: "spanish sign language", "spanish castilian", "en us"
| ids = doc.get("ids") if isinstance(doc.get("ids"), dict) else {} | ||
| biblio = doc.get("biblio") if isinstance(doc.get("biblio"), dict) else {} | ||
|
|
||
| for key in ("isbn", "eisbn", "isbns", "eisbns"): |
There was a problem hiding this comment.
Dois for que interam sobre a mesma tupla. Realizar tudo no mesmo for
| values.append(raw_value) | ||
|
|
||
| for location_key in ("primary_location", "best_oa_location"): | ||
| location = doc.get(location_key) if isinstance(doc.get(location_key), dict) else {} |
There was a problem hiding this comment.
Na extração de isbns e issns há o acesso de algumas chaves em comum, não é o caso de criar uma função que extrai os mesmo valores para os dois casos ou são acessos diferentes? Talvez modularizar essas funções
|
|
||
| return titles | ||
|
|
||
|
|
There was a problem hiding this comment.
Não é um extrator.
There was a problem hiding this comment.
Esta função extrai o campo title. Mas achei outros casos que não são extratores, de fato. Vou fazer uns ajustes.
Obrigado.
| return value[0] if value else None | ||
| return value | ||
|
|
||
|
|
There was a problem hiding this comment.
Este não é de fato. Irá para um utilitário (além de outros).
O que esse PR faz?
Adiciona a base técnica de helpers puros para o ETL: normalização de DOI, ISBN, ISSN, idioma, país, texto, listas e extração de identificadores/metadados comuns de payloads SciELO/OpenAlex.
Onde a revisão poderia começar?
etl/normalizers.pye depoisetl/extractors.py.Como este poderia ser testado manualmente?
Rodar:
Algum cenário de contexto que queira dar?
Este PR prepara a base para a geração do índice Silver, separando helpers puros antes da introdução de models, pipeline, OpenSearch, tasks e admin.
Screenshots
N/A.
Quais são tickets relevantes?
Relacionado a #645.
Referências