fix: campo CITE AS seleciona nota de rodapé errada e quebra espaçamento sem volume - #1350
Conversation
…to sem volume
extract_cite_as_part_one pegava a primeira <fn fn-type="other"> do
documento, sem checar o <label>. fn-type="other" e uma categoria
generica do JATS usada para qualquer tipo de nota (institucional,
declaracao de uso de IA, codigos JEL, politica de plagio, registro
ZooBank), entao o campo CITE AS do PDF - que deveria ser uma citacao
bibliografica - imprimia conteudo errado em 7 de 26 artigos do corpus
de teste, incluindo um caso (a29.xml) em que a nota correta existia no
mesmo fn-group mas nao era a primeira.
Passa a percorrer todas as <fn fn-type="other"> do documento e so usa
a que tiver label (ou, na ausencia dele, inicio do texto do <p>)
sinalizando citacao ("Como citar:", "CITE AS:", "How to cite this
article"); nada e retornado quando nenhuma nota corresponde. Tambem
troca part_one.text por extracao de texto completa (itertext), que
antes cortava a citacao no primeiro elemento filho (ex: um DOI dentro
de <ext-link> logo apos o texto).
Corrige tambem docx_cite_as_pipe: cite_as_part_two montava
"{volume}: {location}" sem checar se volume existia, deixando um ':'
solto quando o XML nao tem <volume> (ex: "Cadernos Pagu : e236720.").
Extrai _format_cite_as_part_two, que omite o segmento de volume e seu
separador nesse caso.
Issue: scieloorg#1349
There was a problem hiding this comment.
A correção resolve a seleção da primeira fn-type="other", mas o resultado ainda não produz uma referência bibliográfica cientificamente correta.
Quando existe uma nota editorial de “Como citar”, ela já contém a referência completa e deve ser usada integralmente, sem acrescentar novamente periódico, volume e localização. No estado atual, casos como a8 e a29 ficam duplicados ou concatenados sem espaço; em a3, o resultado começa com CITE AS: Como citar:.
Quando a nota não existe, como em a7 e a28, os PDFs originais mostram que o comportamento esperado não é deixar o campo vazio nem gerar apenas Periódico volume: localização. Deve ser construída uma referência completa a partir dos metadados — autores, ano, título, periódico, volume/número, páginas ou e-location e DOI — segundo um formato explicitamente definido.
Também considero frágil identificar a nota apenas por 'cit' in signal.lower(), pois isso admite falsos positivos e pode ignorar uma citação cujo label seja genérico, mas cujo p comece com “Como citar”.
Solicito ajustar o PR e a issue #1349 para definir e testar estes dois caminhos:
- nota editorial explícita: utilizar a citação completa uma única vez;
- ausência da nota: gerar uma referência bibliográfica completa e determinística a partir dos metadados.
Os testes devem validar o texto final do DOCX, incluindo pelo menos a3, a7, a8, a28 e a29, e não apenas extrator e renderer isoladamente.
O que esse PR faz?
Corrige a issue #1349: o campo CITE AS do rodapé da página 1 tinha dois problemas.
extract_cite_as_part_onepegava a primeira<fn fn-type="other">do documento, sem checar o<label>.fn-type="other"é uma categoria genérica do JATS usada para qualquer tipo de nota (institucional, declaração de uso de IA, códigos JEL, política de plágio, registro ZooBank), então o CITE AS - que deveria ser uma citação bibliográfica - imprimia conteúdo errado em 7 de 26 artigos do corpus de teste, incluindo um caso (a29.xml) em que a nota correta existia no mesmofn-groupmas não era a primeira.docx_cite_as_pipemontavacite_as_part_twocomof'{volume}: {location}'sem checar sevolumeexistia, deixando um:solto quando o XML não tem<volume>(ex: "Cadernos Pagu : e236720.").Onde a revisão poderia começar?
packtools/sps/formats/pdf/pipeline/xml.py, funçãoextract_cite_as_part_one, epacktools/sps/formats/pdf/pipeline/docx.py, novo helper_format_cite_as_part_twoe seu uso emdocx_cite_as_pipe.Como este poderia ser testado manualmente?
a11.xmldo corpus de teste, cuja primeira<fn fn-type="other">é uma nota institucional.CITE AS: Trabalho realizado na Universidade Federal de Pernambuco - UFPE - Recife (PE), Brasil.Audiology - Communication Research 28: e2725.CITE AS: Audiology - Communication Research 28: e2725.a18.xml(sem<volume>).CITE AS: Cadernos Pagu : e236720.Depois:CITE AS: Cadernos Pagu e236720.pytest tests/sps/formats/pdf/pipeline/test_xml.py tests/sps/formats/pdf/pipeline/test_docx.pycobre os dois casos com 6 testes de regressão novos.Algum cenário de contexto que queira dar?
Achado revisando o PR #1326: o
@pitangainnovarenotou o espaçamento quebrado sem volume no CITE AS e sugeriu abrir uma issue separada, já que "o problema não é só esse". Investigando a fundo, a causa maior é a seleção da nota errada (fn-type="other"sendo tratado como sinônimo de "nota de citação", o que não é garantido pelo JATS).Validado contra as 26 amostras do corpus de teste: 6 casos que vazavam conteúdo errado (a10, a11, a12, a20, a24, a28) agora retornam vazio corretamente; a29 passou a capturar a nota real de citação em vez de uma URL do ZooBank; os 3 casos que já funcionavam (a8, a17, a30) continuam corretos e ganharam texto completo (antes truncado por usar
.textem vez de itertext).Screenshots
a11.xml (nota institucional sendo usada como citação):
a18.xml (sem volume, espaçamento quebrado):
Quais são os tickets relevantes?
Issue #1349
Referências
Comentário original do @pitangainnovare: #1326 (review)
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?