Descrição do problema
extract_body_data (packtools/sps/formats/pdf/pipeline/xml.py) monta a lista de seções do corpo a partir de:
body_sections = xml_tree.xpath(
'.//sec[not(ancestor::abstract) and not(ancestor::trans-abstract)]'
)
body = xml_tree.find('.//body')
if body is not None and body.find('.//sec') is None:
body_sections = [body] + body_sections
O fallback que trata <body> como uma seção extra só entra em ação quando o documento não tem nenhum <sec> em lugar nenhum (caso da #1351). Quando o artigo tem <sec> normalmente, mas também tem um <boxed-text> como filho direto de <body> (irmão dos <sec>, não aninhado dentro de nenhum deles - um "quadro" ou "destaque" fora do fluxo normal de seções), esse <boxed-text> nunca é visitado por extract_body_data: não é um <sec>, e o fallback não dispara porque já existem outros <sec> no documento. O conteúdo inteiro do quadro - título, texto, listas - some do PDF sem nenhum aviso.
Passos para reproduzir o problema
anp/v84n11/1678-4227-anp-84-11-s00461827165.xml (anexo a34.xml): logo após os <sec> normais do corpo, há um <boxed-text> filho direto de <body> com <caption><title>TEACHING POINTS</title></caption> e uma <list list-type="order"> de 3 itens.
- Gerar o PDF - o quadro "TEACHING POINTS" com os 3 pontos de ensino (comuns em artigos de caso clínico dessa revista) não aparece em lugar nenhum do documento.
Comportamento esperado
Um <boxed-text> que seja filho direto de <body> (fora de qualquer <sec>) deveria ser tratado como um bloco de conteúdo próprio no PDF (por exemplo, como uma seção sem título ou como um destaque visualmente diferenciado), preservando seu <caption>/<title> e conteúdo (parágrafos, listas), em vez de ser descartado.
Anexos
Caso encontrado por uma auditoria de cobertura estrutural rodada contra um corpus real de 593 artigos (pacote fornecido pela Roberta, layout_roberta/pacote_xml_pdf_csv/). Confirmado em pelo menos 2 dos 593 artigos, ambos da revista anp (Arquivos de Neuro-Psiquiatria), que usa esse padrão de quadro "TEACHING POINTS" em relatos de caso.
O arquivo que evidencia o caso foi adicionado ao corpus de amostras reais (layout_examples_rafael/corpus/) como a34.xml, junto com o PDF real do periódico como referência (a34.ground_truth.pdf) e o PDF gerado pelo código atual (a34.generated.pdf) evidenciando a perda.
Função envolvida: extract_body_data (packtools/sps/formats/pdf/pipeline/xml.py).
Ambiente utilizado
packtools, gerador de PDF (packtools/sps/formats/pdf/), observado ao rodar extract_body_data contra um corpus de 593 artigos reais.
Contexto e relação com a #1351
A #1351 tratou o caso de <body> sem nenhum <sec> (artigo inteiro sem seções). Este é um caso diferente: o artigo tem seções normalmente, mas um bloco de conteúdo específico (<boxed-text>) fica fora delas - por isso o fallback da #1351 não cobre este caso.
Descrição do problema
extract_body_data(packtools/sps/formats/pdf/pipeline/xml.py) monta a lista de seções do corpo a partir de:O fallback que trata
<body>como uma seção extra só entra em ação quando o documento não tem nenhum<sec>em lugar nenhum (caso da #1351). Quando o artigo tem<sec>normalmente, mas também tem um<boxed-text>como filho direto de<body>(irmão dos<sec>, não aninhado dentro de nenhum deles - um "quadro" ou "destaque" fora do fluxo normal de seções), esse<boxed-text>nunca é visitado porextract_body_data: não é um<sec>, e o fallback não dispara porque já existem outros<sec>no documento. O conteúdo inteiro do quadro - título, texto, listas - some do PDF sem nenhum aviso.Passos para reproduzir o problema
anp/v84n11/1678-4227-anp-84-11-s00461827165.xml(anexoa34.xml): logo após os<sec>normais do corpo, há um<boxed-text>filho direto de<body>com<caption><title>TEACHING POINTS</title></caption>e uma<list list-type="order">de 3 itens.Comportamento esperado
Um
<boxed-text>que seja filho direto de<body>(fora de qualquer<sec>) deveria ser tratado como um bloco de conteúdo próprio no PDF (por exemplo, como uma seção sem título ou como um destaque visualmente diferenciado), preservando seu<caption>/<title>e conteúdo (parágrafos, listas), em vez de ser descartado.Anexos
Caso encontrado por uma auditoria de cobertura estrutural rodada contra um corpus real de 593 artigos (pacote fornecido pela Roberta,
layout_roberta/pacote_xml_pdf_csv/). Confirmado em pelo menos 2 dos 593 artigos, ambos da revistaanp(Arquivos de Neuro-Psiquiatria), que usa esse padrão de quadro "TEACHING POINTS" em relatos de caso.O arquivo que evidencia o caso foi adicionado ao corpus de amostras reais (
layout_examples_rafael/corpus/) comoa34.xml, junto com o PDF real do periódico como referência (a34.ground_truth.pdf) e o PDF gerado pelo código atual (a34.generated.pdf) evidenciando a perda.Função envolvida:
extract_body_data(packtools/sps/formats/pdf/pipeline/xml.py).Ambiente utilizado
packtools, gerador de PDF (packtools/sps/formats/pdf/), observado ao rodarextract_body_datacontra um corpus de 593 artigos reais.Contexto e relação com a #1351
A #1351 tratou o caso de
<body>sem nenhum<sec>(artigo inteiro sem seções). Este é um caso diferente: o artigo tem seções normalmente, mas um bloco de conteúdo específico (<boxed-text>) fica fora delas - por isso o fallback da #1351 não cobre este caso.