Skip to content

fix: extrai texto de abstract sem wrapper <p>/<sec> - #1272

Merged
robertatakenaka merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/abstract-text-without-p-wrapper
Aug 3, 2026
Merged

fix: extrai texto de abstract sem wrapper <p>/<sec>#1272
robertatakenaka merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/abstract-text-without-p-wrapper

Conversation

@Rossi-Luciano

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Abstract.text (e, por consequência, Abstract.data["text"]) só lia title/p dentro de <sec> ou <p> soltos sob o abstract, e retornava vazio quando o texto do resumo estava solto diretamente sob <abstract>/<trans-abstract>, fora de <p>/<sec>.

Isso ocorre em alguns XMLs legados migrados (ex.: coleção URY), convertidos por versões do scielo_migration anteriores à correção em scieloorg/scielo_migration@2905ea5. Esse padrão nunca foi lido pelo packtools — independe da regressão da chave "text" corrigida em #1261 (já lançada em 4.16.9).

Este PR adiciona o fallback que faltava: quando não há <sec> nem <p> com conteúdo, extrai o texto bruto do nó (via itertext()), removendo o texto do <title> quando presente. O comportamento existente é preservado — um abstract só com <title>, sem texto solto, continua retornando "" (coberto por teste de regressão).

Onde a revisão poderia começar?

packtools/sps/models/v2/abstract.py, property Abstract.text e o novo helper _raw_text_excluding_title.

Como este poderia ser testado manualmente?

python -m pytest tests/sps/models/v2/test_abstract.py -q — 4 novos testes na classe AbstractTextWithoutPWrapperTest cobrem: texto solto com título, texto solto sem título, data["text"] para trans-abstract, e a garantia de que título sozinho (sem texto solto) continua retornando "".

Rodei a suíte completa de tests/sps/models/v2/test_abstract.py (18 testes) e as suítes de tests/sps/validation/test_article_abstract.py + tests/sps/models/test_article_abstract.py (73 passed, 1 skipped) sem regressões.

Algum cenário de contexto que queira dar?

Esse fix resolve, no packtools, a causa raiz de scieloorg/scms-upload#1031 no lado que ainda faltava: a chave "text" já tinha sido restaurada em #1261, mas o caso de texto sem <p> nunca foi tratado. Com este PR mergeado (e uma nova tag), o scms-upload pode voltar a consumir Abstract.data["text"] diretamente, sem a lógica de fallback local adicionada como workaround em scieloorg/scms-upload#1034 — que será revertida assim que esta correção estiver disponível.

Quais são os tickets relevantes?

Referências


Segurança da informação (NSI.04)

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Não aplicável a este PR — sem novas dependências nem superfície de ataque nova

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado

Abstract.text (e, por consequência, Abstract.data["text"]) só lia
title/p de <sec> ou <p> soltos, e retornava vazio quando o resumo
legado tinha texto solto diretamente sob <abstract>/<trans-abstract>,
fora de <p>/<sec>. Isso ocorre em alguns XMLs migrados (ex.: coleção
URY) convertidos por versões do scielo_migration anteriores à correção
em scieloorg/scielo_migration@2905ea5.

Adiciona fallback: quando não há <sec> nem <p> com conteúdo, extrai o
texto bruto do nó via itertext(), removendo o texto do <title> quando
presente. Comportamento existente é preservado (title sozinho, sem
texto solto, continua retornando "").

Refs: scieloorg/scms-upload#1031, scieloorg/scms-upload#1034

@robertatakenaka robertatakenaka left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Parece ok

@robertatakenaka
robertatakenaka merged commit fe1ada8 into scieloorg:master Aug 3, 2026
2 checks passed
Rossi-Luciano added a commit to Rossi-Luciano/scms-upload that referenced this pull request Aug 3, 2026
document.py voltava a extrair texto de abstract manualmente
(packtools.sps.validation.models.abstract.Abstract + XPath e fallback
próprios) porque o packtools 4.16.8 não expunha a chave "text" e nunca
lia resumos sem wrapper <p>/<sec> (caso legado da coleção URY).

Os dois problemas foram corrigidos no packtools:
- chave "text" restaurada em scieloorg/packtools#1261 (4.16.9)
- texto sem <p>/<sec> extraído em scieloorg/packtools#1272 (4.16.11)

Com o pin subindo para 4.16.11, get_abstracts() volta a usar
XMLAbstracts(self.xmltree).get_abstracts() diretamente, transparente,
como antes deste bug — sem duplicar lógica de extração que pertence ao
packtools, conforme apontado no review de scieloorg#1034.

Refs: scieloorg#1031, scieloorg/packtools#1261, scieloorg/packtools#1272
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