fix: extrai texto de abstract sem wrapper <p>/<sec> - #1272
Merged
robertatakenaka merged 1 commit intoAug 3, 2026
Merged
Conversation
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
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que esse PR faz?
Abstract.text(e, por consequência,Abstract.data["text"]) só liatitle/pdentro 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_migrationanteriores à 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ó (viaitertext()), 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, propertyAbstract.texte 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 classeAbstractTextWithoutPWrapperTestcobrem: texto solto com título, texto solto sem título,data["text"]paratrans-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 detests/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), oscms-uploadpode voltar a consumirAbstract.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
"text"emAbstract.data(regressão de Implementa validação completa de abstracts conforme SPS 1.10 #1064)Segurança da informação (NSI.04)
Este PR manipula dados sensíveis ou pessoais (LGPD)?
Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?
Este PR introduz, atualiza ou remove dependências de terceiros?
Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?
Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?
Este PR expõe novos endpoints, telas ou serviços?
Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?