scieloorg / articles_meta

Webservices para recuperar metadados de artigos SciELO armazenados no MongoDB
BSD 2-Clause "Simplified" License
7 stars 17 forks source link

[xmlrsps] Erro ao recuperar XML de alguns artigos #217

Closed patymori closed 4 years ago

patymori commented 4 years ago

Descrição do problema

Ao tentar recuperar XMLs de artigos em formato xmlrsps via REST API, os seguintes erros são retornados:


This page contains the following errors:

error on line 2 at column 45211: Failed to parse QName

Below is a rendering of the page up to the first error.



This page contains the following errors:

error on line 2 at column 69430: Namespace prefix w for st on city is not defined

Below is a rendering of the page up to the first error.


Exemplo de artigos: http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0100-204X2009000800027&body=true&format=xmlrsps http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S1679-39512010000100011&body=true&format=xmlrsps http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0103-65132012000400004&body=true&format=xmlrsps http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S1984-70332013000100002&body=true&format=xmlrsps http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0011-52582003000200002&body=true&format=xmlrsps http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0104-530X2000000300004&body=true&format=xmlrsps http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0102-311X2001000100021&body=true&format=xmlrsps http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S1413-82712009000100006&body=true&format=xmlrsps

Lista de PIDs com problemas nos anexos [1], [2] e [3]

Passos para reproduzir o problema

  1. Acesse os links citados acima
  2. Observe o erro apresentado

Comportamento esperado

Os XMLs no formato SPS deveriam retornar sem problemas.

Screenshots ou vídeos

n/a.

Anexos

[1] - pids_conversion_err_parse_qname.txt [2] - pids_conversion_err_namespace_prefix_w.txt [3] - pids_starttag_error.txt [4] - pids_name_mixed_citations.txt

joffilyfe commented 4 years ago

Primeira análise do problema

Os problemas descritos nesta issue tem relação direta com o elemento <mixed-citation>. São aproximadamente 400 artigos com problemas neste elemento.

O erro em questão tem a ver com a exibição/formação de tags inválidas ou mal formadas. Alguns exemplos da má formação:

Até onde pude ver estes dados também estão errados nas bases de parágrafo (não olhei todos os artigos).

Consequências

Mesmo que o problema esteja em uma única referência o LXML não consegue fazer a leitura / parser do XML. Por esse motivo nós deixamos de migrar ao menos 400 artigos.

Proposta de solução

Ao que me parece, a melhor forma de solução passa por uma intervenção manual e a eventual correção das citações problemáticas. Porém este trabalho pode ser muito oneroso (é preciso localizar cada ponto de erro) e consequentemente pode tomar muito tempo.

Uma segunda alternativa passa por forçarmos a não recuperação [1] do HTML na hora de formatar as <mixed-citations> e assim garantiríamos que apenas as citações válidas seriam apresentadas.

Em articlemeta/export_rsps.py:

diff --git a/articlemeta/export_rsps.py b/articlemeta/export_rsps.py
index a026663..cfb7dd9 100644
--- a/articlemeta/export_rsps.py
+++ b/articlemeta/export_rsps.py
@@ -71,14 +71,18 @@ class XMLCitation(object):
         def transform(self, data):
             raw, xml = data

-            parser = ET.HTMLParser()
+            parser = ET.HTMLParser(recover=False)

Um problema dessa segunda abordagem é que nós quebramos o mandamento de não perder conteúdo.

O que vocês acham @patymori @robertatakenaka @gustavofonseca @jamilatta?

patymori commented 4 years ago

@joffilyfe e demais.

Acho que esses casos poderiam passar por uma intervenção de correção dos dados. Pelo trabalho de mapeamento feito na construção do último relatório e na classificação dos problemas, acredito que podemos pensar em uma estratégia de correção desses dados para que a migração seja concluída, minimizando o trabalho oneroso de correção. Ou seja, não faria nenhum tipo de tratamento no Article Meta e trabalharia com os dados que conseguimos extrair dele para as correções.

gustavofonseca commented 4 years ago

@joffilyfe e demais.

Acho que esses casos poderiam passar por uma intervenção de correção dos dados. Pelo trabalho de mapeamento feito na construção do último relatório e na classificação dos problemas, acredito que podemos pensar em uma estratégia de correção desses dados para que a migração seja concluída, minimizando o trabalho oneroso de correção. Ou seja, não faria nenhum tipo de tratamento no Article Meta e trabalharia com os dados que conseguimos extrair dele para as correções.

Você fala sobre corrigir manualmente os 400 artigos?

patymori commented 4 years ago

Você fala sobre corrigir manualmente os 400 artigos?

No meu entendimento seria possível fazermos correções até automatizadas caso necessário mas que não estariam nas aplicações, especialmente no Article Meta. É possível atuarmos com scripts de correção ou algo assim, já que o problema é conhecido, está classificado e está nos dados a serem migrados, não nas aplicações.

robertatakenaka commented 4 years ago

@joffilyfe o erro não está no dado:

26. Cohen J. The Earth is Round (p&lt;.05). <i>Am Psychol</i> 1994; 49: 997-1003.

http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0100-879X2012001200022&body=true

O erro está no AM, ao gerar o body, no formato xmlrsps. Deve haver uma terceira alternativa.

Olhando o código:

class MixedCitationPipe(plumber.Pipe):
        def precond(data):
            raw, xml = data

            if not raw.mixed_citation:
                raise plumber.UnmetPrecondition()

        @plumber.precondition(precond)
        def transform(self, data):
            raw, xml = data

            parser = ET.HTMLParser()

            mc = ET.parse(StringIO(raw.mixed_citation), parser)
            mixed_citation = mc.find('body/p/.') if mc.find('body/p/.') is not None else mc.find('body/.')

            mixed_citation.tag = 'mixed-citation'

            xml.append(utils.convert_all_html_tags_to_jats(mixed_citation))

            return data

Fazendo cada etapa com:

26. Cohen J. The Earth is Round (p&lt;.05). <i>Am Psychol</i> 1994; 49: 997-1003.
In [16]: from io import StringIO

In [17]: from lxml import etree as ET

In [18]: text = """<root><text><p>26. Cohen J. The Earth is Round (p&lt;.05). <i>Am Psychol</i> 1994; 49: 997-1003.</p></text></root>"""

In [19]: mc = ET.parse(StringIO(text), parser)

In [20]: ET.tostring(mc)
Out[20]: b'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">\n<html><body><root><text><p>26. Cohen J. The Earth is Round (p&lt;.05). <i>Am Psychol</i> 1994; 49: 997-1003.</p></text></root></body></html>'

In [21]: 

O problema também não está em:

utils.convert_all_html_tags_to_jats(mixed_citation)

resultado:

b'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">\n<html><body><root><text><p>26. Cohen J. The Earth is Round (p&lt;.05). <italic>Am Psychol</italic> 1994; 49: 997-1003.</p></text></root></body></html>'

Me parece que o dado já chega errado neste pipeline: https://github.com/scieloorg/xylose/blob/648b74eafe63ff56720da00e7a3f94c789bb6591/xylose/scielodocument.py#L3102

In [36]: def mixed_citation(text):
    ...:     print("")
    ...:     print(text)
    ...:     data = html_decode(text).strip()
    ...:     print(data)
    ...:     cleaned = CLEANUP_MIXED_CITATION.sub('', data)
    ...:     print(cleaned)
    ...:     for pattern, value in REPLACE_TAGS_MIXED_CITATION:
    ...:         cleaned = pattern.sub(value, cleaned)
    ...:         print(cleaned)
    ...:     return cleaned
    ...:
    ...:

In [37]: mixed_citation(text)

<root><text><p>26. Cohen J. The Earth is Round (p&lt;.05). <i>Am Psychol</i> 1994; 49: 997-1003.</p></text></root>
<root><text><p>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</p></text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>
Out[37]: '<root><text>26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.</text></root>'

Vejo que o erro está aqui:

 data = html_decode(text).strip()

O html_decode é o mesmo que html.unescape.

A solução seria impedir que html.unescape convertesse as entidades &amp;, &lt; e &gt;.

joffilyfe commented 4 years ago

O html_decode é o mesmo que html.unescape.

A solução seria impedir que html.unescape convertesse as entidades &amp;, &lt; e &gt;.

Olhando para esse exemplo @robertatakenaka eu acho que nós temos um problema que eu não sei definir. Ao executar o comando [1]

curl http://articlemeta.scielo.org/api/v1/article/\?body\=false\&format\=json\&collection\=scl\&code\=S0100-879X2012001200022 | grep "26. Cohen"

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

"mixed": "<p align=\"LEFT\"><font face=\"Arial\"><span lang=\"EN\">26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.    ",

Nós temos o dado da referência 26 já convertido em (p<.05) e não no formato (p&lt;.05) sugerido por você. Me parece que essa conversão das tags acontece antes mesmo da execução desse pipeline.

Também alterei o código do xylose dentro do meu virtualenv (.venv/src/xylose/xylose/scielodocument.py) e mandei imprimir na tela o valor da citação antes mesmo da conversão (print(self.data['mixed'])) e o resultado foi esse:

<p align="LEFT"><font face="Arial"><span lang="EN">26. Cohen J. The Earth is Round (p<.05). <i>Am Psychol</i> 1994; 49: 997-1003.    

EDIT:

Eu olhei nos arquivos MST deste artigo e o dado está no formato (p&lt;.05).

robertatakenaka commented 4 years ago

@joffilyfe na minha análise informei onde está o problema. É no xylose, em raw.mixed_citation.

Precisamente em https://github.com/scieloorg/xylose/blob/648b74eafe63ff56720da00e7a3f94c789bb6591/xylose/scielodocument.py#L3105

O html_decode é o mesmo que html.unescape.

A solução seria impedir que html.unescape convertesse as entidades &amp;, &lt; e &gt;.

O dado está correto:

26. Cohen J. The Earth is Round (p&lt;.05). <i>Am Psychol</i> 1994; 49: 997-1003.

Olhe em: http://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0100-879X2012001200022&body=true

joffilyfe commented 4 years ago

@joffilyfe na minha análise informei onde está o problema. É no xylose, em raw.mixed_citation. ...

Mas @robertatakenaka o problema também está no dado. Como eu afirmei acima o dado está errado no banco do Mongodb. Execute o find no articlemeta ...find({"code": "S0100-879X2012001200022"}, {"citations.mixed": 1}) e veja que a citação 25 tem o dado já transformado!

Interface REST

Screen Shot 2020-04-13 at 19 07 39

MongoDB

Screen Shot 2020-04-13 at 19 08 17
robertatakenaka commented 4 years ago

@joffilyfe verdade

patymori commented 4 years ago

Seria possível somente nesses casos de falha pegarmos o dado correto da base de parágrafos e corrigir pontualmente o XML? Assim, a gente não precisaria fazer essa correção no AM e na base mongo.

gustavofonseca commented 4 years ago

As mixed-citations registradas no AM não vêm do isis2mongo, mas da execução de https://github.com/scieloorg/articles_meta/blob/master/processing/load_mixedcitations.py, certo? Qual a chance do problema observado pela @robertatakenaka também ser a causa deste dado errado no MongoDB?

joffilyfe commented 4 years ago

Seria possível somente nesses casos de falha pegarmos o dado correto da base de parágrafos e corrigir pontualmente o XML? Assim, a gente não precisaria fazer essa correção no AM e na base mongo.

Acho que essa pode ser uma melhor solução, @patymori. Pode ser até a mais rápida a ser feita.

As mixed-citations registradas no AM não vêm do isis2mongo, mas da execução de https://github.com/scieloorg/articles_meta/blob/master/processing/load_mixedcitations.py, certo? Qual a chance do problema observado pela @robertatakenaka também ser a causa deste dado errado no MongoDB?

De inicio eu acredito que o problema seja exatamente esse, @gustavofonseca. Na linha #174 o código faz um decode das entidades.

gustavofonseca commented 4 years ago

Na linha #174 o código faz um decode das entidades.

Esse html_decode é pegadinha. Se vc olhar a implementação da função ela só remove caracteres de controle, surrogates etc.

joffilyfe commented 4 years ago

Na linha #174 o código faz um decode das entidades.

Esse html_decode é pegadinha. Se vc olhar a implementação da função ela só remove caracteres de controle, surrogates etc.

Bem observado @gustavofonseca, o nome da função me levou ao erro. Acabei de fazer um teste utilizando a citação problemática do artigo S0100-879X201200120002 e o load_mixedcitations do articlemeta.

O código de fato não transforma as entidades e a citação carregada fica no formato esperado:

{'mixed': '<p align="LEFT"><font face="Arial"><span lang="EN">26. Cohen J. The Earth is Round (p&lt;.05). <i>Am Psychol</i> 1994; 49: 997-1003.    ', 'pid': 'S0100-879X2012001200022', 'collection': 'scl', 'order': 25}

Isso me leva a crer que o dado foi transformado em algum momento anterior a carga dos dados no ArticleMeta.

@gustavofonseca, @robertatakenaka o que vocês acham da ideia da @patymori?

gustavofonseca commented 4 years ago

Seria possível somente nesses casos de falha pegarmos o dado correto da base de parágrafos e corrigir pontualmente o XML? Assim, a gente não precisaria fazer essa correção no AM e na base mongo.

Você diz aplicar o comando do ds-migração que popula as mixed-citations para estes 400 artigos?

gustavofonseca commented 4 years ago

Talvez seja possível especificando um parser mais robusto, na lxml. Algo como:

parser = etree.XMLParser(recover=True)
etree.parse(xml, parser=parser)
joffilyfe commented 4 years ago

Seria possível somente nesses casos de falha pegarmos o dado correto da base de parágrafos e corrigir pontualmente o XML? Assim, a gente não precisaria fazer essa correção no AM e na base mongo.

Você diz aplicar o comando do ds-migração que popula as mixed-citations para estes 400 artigos?

É isso, não é, @patymori?

Talvez seja possível especificando um parser mais robusto, na lxml. Algo como:

parser = etree.XMLParser(recover=True)
etree.parse(xml, parser=parser)

Obrigado.

patymori commented 4 years ago

Você diz aplicar o comando do ds-migração que popula as mixed-citations para estes 400 artigos?

É isso, não é, @patymori?

@gustavofonseca e @joffilyfe Poderia ser sim. Não havia pensado exatamente isso mas acredito que poderia ser. Caso não caiba alterar o update para resolver esse tipo de problema, sugiro criar um comando expecífico para isso, algo como fix.

joffilyfe commented 4 years ago

Introdução

O problema descrito neste ticket impacta diretamente a todos os usuários consumidores dos XMLs no formato xml rsps. Para que haja uma solução definitiva do problema será necessário atuar em duas frentes, sendo elas: atualização/correção dos dados na base do ArticleMeta e correção da função html_decode do xylose.

A primeira fase do problema pode ser resolvida utilizando um script para extração das mixed citations dos artigos problemáticos e importando o resultado via load_mixedcitations (do próprio articlemeta). A segunda fase do problema pode ser resolvida atualizando o xylose com a substituição do html_decode por algo como o código aqui.

Apesar de conhecermos os locais dos problemas, suas causas e termos opções de resoluções diretamente em sua fonte, esse texto verifica a viabilidade de correção dos XMLs diretamente na migração.

Investigação de resolução

A sugestão dada pela @robertatakenaka leva em consideração que o html.unscape não deveria converter três entidades específicas (<, > e &), para tanto será necessário criar uma função que converta todas as entidades do html5 mas que não converta algumas proíbidas.

Para que sejamos capazes de atualizar todas as citações dos artigos problemáticos é necessário ter clareza sobre os seguintes tópicos:

  1. O LXML não consegue fazer o parser de XMLs mal formados.
  2. Se o LXML não consegue fazer o parser dos XMLs mal formados então como vamos navegar em sua árvore e alterar os trechos defeituosos?
  3. Para solucionar o ponto 2 é necessário ativar a recuperação durante a fase de leitura (recover=True).
  4. Forçar a recuperação dos XMLs pode ocasionar em perda de dados
    • There is also no guarantee that the resulting tree will contain all data from the original document. The parser may have to drop seriously broken parts when struggling to keep parsing. Especially misplaced meta tags can suffer from this, which may lead to encoding problems.

Dito isso, ativaremos a recuperação de XMLs durante o update das citações e modificaremos a chamada para utilizar um código seguro na conversão das entidades html.

O código seguro em proposição foi produzido a partir do módulo html do próprio Python com a diferença de que nós podemos banir a conversão de algumas entidades.

Testes

Utilizando o artigo exemplo mais acima (S0100-879X2012001200022) iniciei a atualização com o recover de leitura ativado. O resultado do XML recuperado para a citação B26 foi o seguinte:

      <ref id="B26"><mixed-citation>26. Cohen J. The Earth is Round (p.05&gt;Am Psychol 1994; 49: 997-1003.</mixed-citation>.05&gt;</ref>
      <element-citation publication-type="journal">
      ....

Perceba que no esforço para recuperar a tag mal formada, o LXML adicionou um .05&gt; após o fechamento da tag mixed-citation, obviamente isso está errado, esse dado não existe neste trecho.

Seguindo com o comando de atualização [1], o resultado final para a citação B26 foi:

      <ref id="B26">
      <label>26</label><mixed-citation>26. Cohen J. The Earth is Round (p&lt;.05). <italic>Am Psychol</italic> 1994; 49: 997-1003.</mixed-citation></ref>

      <element-citation publication-type="journal">
        <article-title>The Earth is Round (p: 05)</article-title>
        <source>Am Psychol</source>
        <date>
          <year>1994</year>
        </date>
        <fpage>997</fpage>
        <lpage>1003</lpage>
        <volume>49</volume>
        <person-group person-group-type="author">
          <name>
            <surname>Cohen</surname>
            <given-names>J</given-names>
          </name>
        </person-group>
      </element-citation>
    </ref-list>
    <ref id="B27">
      <mixed-citation>27. Portney LG, Watkins MP. <italic>Foundations of clinical research: applications to practice</italic>. 3rd edn. Upper Saddle River: Prentice Hall; 2008.</mixed-citation>
....

Note que o elemento element-citation foi removido de dentro do elemento ref e a lista de citações foi encerrada antes da hora. Apesar de termos uma mixed-citation válida e correta nós agora temos um XML menos válido do que anteriormente.

Comandos

[1] - ds_migracao mixed-citations update xml/conversion/S0100-879X2012001200022.en.xml --override

O que vocês acham, @patymori, @robertatakenaka, @jamilatta e @gustavofonseca?

gustavofonseca commented 4 years ago

Excelente análise @joffilyfe. E pensando sobre a abordagem de atuar diretamente na fonte, carregando dados melhores no articlemeta via load_mixedcitation, você estima que o resultado final no XML seria melhor?

joffilyfe commented 4 years ago

Excelente análise @joffilyfe. E pensando sobre a abordagem de atuar diretamente na fonte, carregando dados melhores no articlemeta via load_mixedcitation, você estima que o resultado final no XML seria melhor?

Acabei de realizar um teste local com 285 artigos (da lista [1] - pids_conversion_err_parse_qname.txt) e 270 deles foram corrigidos. Os outros 15 tiveram algum problema na hora de carregar as referências na base do articlemeta, por exemplo:

2020-04-17 13:47:05,561 - __main__ - DEBUG - Auditing mixed citation
2020-04-17 13:47:05,561 - __main__ - ERROR - Document did not pass in auditory scl S0104-530X2000000300004 3

Acredito que ao solucionar os problemas de carga na base do Article Meta nós teremos todos os artigos corrigidos e funcionando como o esperado :)

joffilyfe commented 4 years ago

Quero adicionar mais informações referentes aos dados da nossa base. Dos 285 artigos, alguns poucos possuem problemas de fato na base mst. Pelo que eu pude perceber, esses 15 artigos problemáticos tem relação com o dado <http at ... que deveria ser &lt; at .... Acho que um jeito de solucionar isso é fazer uma conversão forçada para as "tags" <http ...>.

O comando abaixo ajuda a verificar os dados diretamente dos paráfrafos extraídos das bases MST. O collapse abaixo mostra todos os parágrafos com problemas para essa lista de 15 artigos problemáticos.

echo 'S0101-74382010000300002' \
    'S0104-87752007000200020' \
    'S1806-11172009000400014' \
    'S0103-20032011000100004' \
    'S0103-20032011000100007' \
    'S1984-29612008000300003' \
    'S0103-20032011000100006' \
    'S0103-20032011000100008' \
    'S1414-98932012000300013' \
    'S0103-20032011000100009' \
    'S0100-204X2012000100004' \
    'S1984-29612009000100004' \
    'S1984-29612009000100011' \
    'S0103-17592010000600004' \
    'S1984-63982001000100005' \
    'S0104-87752008000100005' \
    | xargs -n1 bash -c 'cat ~/spf/document-store-migracao/xml/paragraphs/$0.json | jq ".v704[0]._"' \
    | awk '/\<http/ {print $0; printf "========================================\n"}'
Click to expand! ``` "

(14)Fernandes, P. (2004). When assumptions go unquestioned. Disponível em . Acessado em 23/10/2007. " ======================================== "
19 CATALOGO methodico dos livros existentes na bibliotheca da marinha organizado segundo o systema de Mr. Brunet. RJ, Ti. de Francisco de Paula Brito, 1858. Disponível em:<http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso em: 12 jun. 2003). " ======================================== "
20 DECRETO N. 8336 – de 17 de dezembro de 1881 (...). Regulamento para a Bibliotheca do Exercito, a que se refere o decreto desta data. Disponível em:<http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso em: 12 jun. 2003). " ======================================== "
21 CATALOGO dos livros do Gabinete Portugues de Leitura no RJ seguido de um supplemento das obras entradas no gabinete depois de começada a impressão. RJ, Typ. Commercial de Fº. de Q. Regadas, Praça da Constituição, MDCCCLVIII. Disponível em: <http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso em: 12 jun. 2003). " ======================================== "
22 ESTATUTOS da Real Bibliotheca, mandados ordenar por sua Majestade. Rio de Janeiro: Na Regia Typographia, 1821. Disponível em: <http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso em: 1º out. 2001). " ======================================== "
32 A Biblioteca Municipal do Império, criada em 1878, tinha por objetivo não ser \"aristocrática como se tem por ahi escripto noutras circunstancias e em respeito do nosso primeiro estabelecimento desta espécie, o que nos parece contrario aos reclamos da civilização actual e antinomico com os intuitos gerais de nossa forma de existencia social...”. CATÁLOGO da Biblioteca Municipal. Publicação Official. Rio de Janeiro: Typ. Central de Browm e Evaristo, 1878. Disponível em:<http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso: em 9 mai. 2005). " ======================================== "
35 CATALOGO methodico dos livros existentes na bibliotheca da marinha organizado segundo o systema de Mr. Brunet. RJ, Ti. de Francisco de Paula Brito, 1858, p. 1. Disponível em:<http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso em: 12 jun. 2003). " ======================================== "
36 CATÁLOGO da Bibliotheca do Exercito Brazileiro precedido de seu regulamento e leis que lhe dizem respeito acompanhado de um índice alphabetico dos autores organizado pelo bibliotecário Joaquim Alves da Costa Mattos, official da Ordem da Rosa, cavalleiro da de Christo, condecorado com as medalhas de mentor militar das Ca[??], do Estado oriental do Uruguay de 1864 – 1865, RJ, Imprensa Nacional, 1885. p. VII. Disponível em: <http://www.unicamp.br/iel/memoria/Acervo/index.htm>(Acesso em: 12 jun. 2003). " ======================================== "
53 DECRETO N. 8336 – de 17 de dezembro de 1881 (...) Regulamento para a Bibliotheca do Exercito, a que se refere o decreto desta data. Art. 1º, p. IX. Disponível em: <http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso em: 12 jun. 2003). " ======================================== "
61 CATALOGO dos livros do Gabinete Portugues de Leitura no RJ seguido de um supplemento das obras entradas no gabinete depois de começada a impressão. RJ, Typ. Commercial de F. de º Q. Regadas, Praça da Constituição, MDCCCLVIII. art. 15, p. V. Disponível em:<http://www.unicamp.br/iel/memoria/Acervo/index.htm> (Acesso em: 12 jun. 2003). " ======================================== "

[16] R. Langhi e R. Nardi, Revista Latino-Americana de Educação em Astronomia 2, (2005), disponível em http://www.astro.iag.usp.br/˜foton/relea/index.html.

" ======================================== "

[34] A. Damineli, Supernovas -Boletim Brasileiro de Astronomia n. 467, (2008). Disponível em http://www.boletimsupernovas.com.br/. Acesso em 30/6/2008. " ======================================== "
2 Este levantamento iniciou-se com os estudos de Bretones e Megid Neto, encontrando, até então, um total de 16 dissertações e teses [28]. Uma busca de demais trabalhos sobre este tema, em setembro de 2008, no Banco de Teses da CAPES, utilizando-se como palavras-chave \"ensino\"e \"astronomia\", apresentou um total de 36 itens. A lista de seus resumos pode ser encontrada na homepage do Observatório Didático Astronômico, da UNESP (Bauru): http://unesp.br/astronomia, no menu downloads ou na homepage do autor: http://sites.google.com/site/proflanghi. " ======================================== "
5 Visando facilitar a consulta, os autores elaboraram uma lista completa de todos estes estabelecimentos, atualizada até o momento da redação deste texto. Os dados dos estabelecimentos que trabalham com a astronomia, nos âmbitos de sua popularização, e educação formal, informal e não formal - planetários, observatórios, estabelecimentos amadores e profissionais (clubes e associações), e universidades - foram baseados em trabalhos anteriores [26, 44-50], mas principalmente na homepage do Ano Internacional da Astronomia [51], e não é completo em si mesmo, pois constantes modificações cadastrais estão sendo realizadas. Esta listagem provisória poderá ser consultada na homepage do Observatório Didático Astronômico, da UNESP (Bauru): http://unesp.br/astronomia, no menu downloads ou na homepage do autor: http://sites.google.com/site/proflanghi.

" ======================================== "

BRASIL. Ministério das Relações Exteriores. Departamento de Promoção Comercial. Brazil Trade Net. Disponível em: . Acesso em: 4 abr. 2008a. " ======================================== "

________. Produção agrícola municipal. Rio de Janeiro, 2008. Disponível em: . Acesso em: 16 ago. 2008. " ======================================== "

CENTRO DE DESENVOLVIMENTO DO AGRONEGóCIO -CEDAGRO. Coeficientes técnicos. Disponível em: Acesso em: 14/06/2008. " ======================================== "

CENTRO DE INTELIGêNCIA EM FLORESTAS – CI Florestas. Mercado internacional. Disponível em: .Acesso em: 15/04/2010. " ======================================== "

ENDOM, M. A. Economic Analysis of Large Scale Logging. Working Paper, nº. 3, 1999. Disponível em: . Acesso em: 07/07/2008. " ======================================== "

HADI, P. U.; BUDHI, G. S. Analysis of the Economic Efficiency and Comparative Advantage of the Sumatran Smallholder Rubber Using \"PAM\" Method. Working Paper, nº. 4, 1997. Disponível em: . Acesso em 22/08/2008. " ======================================== "

NELSON, A. W. Applications of the Policy Analysis Matrix (PAM). Working Paper, 1991. Disponível em: . Acesso em: 08/07/2008. " ======================================== "

FLORIDA STATE UNIVERSITY. Primer design. Disponível em:< www.bio.fsu.edu/seq-fac/ PrimerDesign.html>. Acesso em: 15 jan. 2004. " ======================================== "

IPECE – INSTITUTO DE PESQUISA E ESTRATéGICA ECONôMICA DO CEARá. Perfil básico municipal: Baturité. 2007a. Disponível em: . Acesso em 20 dez. 2008. " ======================================== "

_______. Perfil básico municipal: Iguatu. 2007b. Disponível em: . Acesso em: 20 dez. 2008. " ======================================== "

_______. Perfil básico municipal: Quixadá. 2007c. Disponível em: . Acesso em: 20 dez. 2008. " ======================================== "

_______. Anuário Estatístico do Ceará 2007. 2008. Disponível em: . Acesso em: 20 dez. 2008. " ======================================== "

LIMA NETO, P. C. Extensão rural e agricultura familiar. 1999. Disponível em: . Acesso em: 10 fev. 2007. " ======================================== "

Ministério do Desenvolvimento Agrário -MDA. Perguntas e Respostas sobre o PRONAF.2005.Disponívelem: . Acesso em: 27 dez. 2008. " ======================================== "

BANSE, M.; van MEIJL, H.; WOLTJER, G. The impact of first and second generation biofuels on global agricultural production, trade and land use. In: 11th Annual GTAP Conference, Helsinki, Finland, June 2008. Disponível em: . Acesso em: 10 ago. 2008. " ======================================== "

BIRUR, D. K.; HERTEL, T. W.; TYNER, W. E. Impact of biofuel production on world agricultural markets: a computable general equilibrium analysis. GTAP working paper n.53, Global Trade Analysis Project, West Lafayette, 2008. Disponível em: . Acesso em: 5 fev. 2009. " ======================================== "

EICKHOUT, B.; VAN MEIJL, H.; TABEAU, A.; STEHFEST, E. The impact of environmental and climate constraints on global food supply. GTAP working paper 47, Global Trade Analysis Project, West Lafayette, 2008. Disponível em: . Acesso em: 5 fev. 2009. " ======================================== "

ENERGY INFORMATION ADMINISTRATION – EIA, 2008. Disponível em: . Acesso em: 6 fev. 2009. " ======================================== "

EUROPEAN COMMISSION. Impact Assessment of the Renewable Energy Roadmap – March 2007, Directorate-General for Agriculture and Rural Development, European Commission, AGRI G-2/WM D, 2007. Disponível em: . Acesso em: 10 ago. 2008. " ======================================== "

GLOBAL TRADE ANALYSIS PROJECT – GTAP, 2001. Disponível em . Acesso em: 30 jun. 2004. " ======================================== "

GOLUB, A.; HERTEL, T. W.; LEE, H.; RAMANKUTTY, N. Modeling Land Supply and Demand in the Long Run. In: 9th Annual Conference on Global Economic Analysis, Addis Ababa, Ethiopia, 15 -17 June 2006. Disponível em: . Acesso em: 11 ago. 2008. " ======================================== "

GOLUB, A.; HERTEL, T. W.; SOHNGEN, B. Land use modeling in recursively-dynamic GTAP framework. GTAP working paper 48, Global Trade Analysis Project, West Lafayette, 2008. Disponível em . Acesso em: 9 fev. 2009. " ======================================== "

GOUEL, C.; HERTEL, T. W. Introducing forest access cost fuctions into a general equilibrium model. GTAP Research Memorandum 8, Global Trade Analysis Project, West Lafayette, 2006. Disponível em . Acesso em: 15 mar. 2007. " ======================================== "

LEE, H.; HERTEL, T. W.; SOHNGEN, B.; RAMANKUTTY, N. Towards an Integrated Land Use Data Base for Assessing the Potential for Greenhouse Gas Mitigation. GTAP Technical Paper 25, Global Trade Analysis Project, West Lafayette, 2005. Disponível em: . Acesso em: 15 mar. 2007. " ======================================== "

MACHADO, R. B.; RAMOS NETO, M. B.; PEREIRA, P. G. P.; CALDAS, E. F., GONÇALVES, D. A.; SANTOS, N. S.; TABOR, K.; STEININGER, M. Estimativas de perda da área do Cerrado brasileiro. Relatório técnico não publicado. Conservação Internacional, Brasília, DF. 2004. Disponível em: . Acesso em: 22 mar. 2008. " ======================================== "

REILLY, J.; PALTSEV, S. Biomass energy and competition for land. MIT Joint Program on the Science and Policy of Global Change, Report 145, Cambridge, Massachusetts, 2007. Disponível em: . Acesso em: 15 jan. 2008. " ======================================== "

RUTHERFORD, T. F. GTAP6inGAMS: The dataset and static model. 42 p., 2005, mimeo. Disponível em: . Acesso em: 9 out. 2006. " ======================================== "

RUTHERFORD, T. F.; PALTSEV, S. V. GTAPinGAMS and GTAP-EG: global datasets for economic research and illustrative models. Working Paper, Department of Economics, University of Colorado, 64 p., 2000. Disponível em: . Acesso em: 11 set. 2002. " ======================================== "

SOHNGEN, B. Global Timber Market and Forestry data Project, 2007. Disponível em: . Acesso em: 8 fev. 2008. " ======================================== "

UNITED STATES CONGRESS. Energy Independence and Security Act of 2007, 2007. Disponívelem: . Acesso em: 9 mar. 2008. " ======================================== "

VALOR ECONÔMICO. \"Produção de etanol precisará aumentar 12 vezes para substituir 10% da gasolina\", Valor Online, 12/03/2007. Disponível em: . Acesso em: 23 mai. 2007. " ======================================== "

Nascimento Sobrinho, C. L. et al. (2006). Condições de trabalho e saúde dos médicos em Salvador, Brasil. Rev. Assoc. Med. Bras. (online), 52(2), 97-102. doi: 10.1590/ S0104-42302006000200019. Recuperado em 29 de janeiro, 2011 de Noronha, A. P. P., & Fernandes, D. C. (2007). Estresse laboral e raciocínio inferencial: um estudo correlacional. Psicol.: Ciênc. e Prof. (online), 27(4), 596-607. Recuperado em 24 de janeiro, 2011 de Paschoal, T., & Tamayo, A. (2004). Validação da escala de estresse no trabalho. Estud. Psicol. (online), 9(1), 45-52. doi: 10.1590/S1413-294X2004000100006. Recuperado em 27 de janeiro, 2001 de Santos, L. C., Goulart Junior, E., Canêo, L. C., Lunardelli, C. F., & Carvalho, P. L. T. de. (2010). Psicologia e profissão: neurose profissional e a atuação do psicólogo organizacional frente à questão. Psicol.: Ciênc. e Prof. (online), 30(2), 248-261. Recuperado em 24 de janeiro, 2011 de Secco, I. A. de O., Robazzi, M. L. do C. C., Souza, F. E., Alves de, & Shimizu, D. S. (2010). Cargas psíquicas de trabalho e desgaste dos trabalhadores de enfermagem de hospital de ensino do Paraná, Brasil. SMAD, Rev. Eletrônica Saúde Mental Álcool Drog. (Ed. port.) (online), 6(1), 1-17. Recuperado em 29 de janeiro, 2011 de CONTROLADORIA GERAL DA UNIÃO – CGU. Várias tabelas. Disponível em: Acesso em: 20 ago. 2008

" ======================================== "

FUNDAÇÃO GETÚLIO VARGAS – FGV. FGVDADOS. Várias tabelas. Disponível em: Acesso em: 30 jul. 2008

" ======================================== "

INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA – IBGE. Sistema IBGE de recuperação Automática –SIDRA. Várias tabelas. Disponível em: . Acesso em: 29 ago. 2008. " ======================================== "

MS. Ministério da Saude. Programa Nacional de Controle da Tuberculose- PNCT. Disponível em . Acesso em: 06 ago. 2008. " ======================================== "

UNITED STATES DEPARTMENT OF AGRICULTURE, ANIMAL AND PLANT HEALTH INSPECTION SERVICE (USDA-APHIS). Animal health report. Agriculture Information Bulletin n.801. 2006. 192p. Disponível em: Acesso em: 26 out. 2008. " ======================================== "

SEGOVIA,J.F.O.;GONÇALVES,M.C.A.;CARVALHO,A.C.A.; MACHADO, E.B.M. Comportamento agrosilvicultural do consórcio de mandioca com espécies arbóreas de múltiplo uso do gênero Carapa no Amapá. 2008. Disponível em: . Acesso em: 26 jan. 2012. " ======================================== "

IBGE. Paranacidade, 2005. Disponível em: <http://www.ibge.gov.br/ http://www.paranacidade.org.br/municipios/select_municipios.hpwww. pr.gov.br, http://www.ipardes.gov.br/.>.Acesso em: Dez 2005. " ======================================== "

MARCONDES, M. C. C.; BRITO, F. L. C.; BORGES, J. C. G.; LIMA, E. C.; ALVES, L. C.; LIMA, R. P. Cryptosporidium sp in Antillean Manatees (Trichechus manatus manatus) in natural captivity, Paraiba state, Brazil. 2002. Florida Marine Mammal Health Conference. Disponível em: . Acesso em: 29 de Julho de 2002. " ======================================== "

Microchip (2007a). About Microchip USB PIC (PIC18F2550, PIC18F4550...). Available:<http://pic18fusb.online.fr/wiki/wikka.php?wakka=wikihome>. Access in: May 01 2007. " ======================================== "

YANG, N.D. Second language learners' beliefs about language learning and their use of learning strategies: A study of college students of English in Taiwan. 1992. Tese (Doutorado) - The University of Texas, Austin. " ======================================== "
28 Os dados sobre os preços de produtores foram retirados de Historical Data series. International Coffee Organization. 12 July 2005. Os preços de produtores de Costa Rica foram usados para ilustração; o preço para outros produtores da América Latina podem ter tido variações, mas todos seguiram a mesma tendência. " ======================================== "
34 Dados da International Coffee Organization's Historical Data series, disponível online em acesso em 12 de julho de 2005. Pendegrast, Uncommon Grounds, ch.16. Ver também: DICUM, Gregory; LUTTINGER, Nina. The coffee book: anatomy of an industry from crop to the last drop. New York: New Press, 1999. " ```


Para solucionar o problema localmente, durante o load_mixedcitations, eu escrevi seguinte código:

def escape_html_http_tags(string):
    """Escapa trechos de uma string que podem ser interpretadas como tags HTML.

    >>> escape_html_http_tags("Citação disponível em <http://www.scielo.br>, em 20/02/20.")
    >>> "Citação disponível em &lt;http://www.scielo.br&gt;, em 20/02/20."
    """
    if "<http" not in string:
        return string

    match = re.compile(".*(<http.*?>|<http.*?>?).*", re.MULTILINE).match(string)

    if match:
        http_string = match.groups()[0]
        string = string.replace(http_string, html.escape(http_string))
    return string
robertatakenaka commented 4 years ago

@joffilyfe fiquei confusa com este comentário: https://github.com/scieloorg/articles_meta/issues/217#issuecomment-615281743 Esta é a proposta para as correções? Entendi que não porque o resultado não é bom.

robertatakenaka commented 4 years ago
joffilyfe commented 4 years ago

A última lista a ser atacada e o problema corrigido foi a [2] - pids_conversion_err_namespace_prefix_w.txt. Os XMLs eram considerados como inválidos porque algumas mixed citations possuem uma mais tags HTML* com o propriedades que utilizam o namespacew:st=`.

Esse é um problema que eu não sei medir o impacto porque o dado está online no site clássico mas o site não quebra porque é HTML, o browser aceita do jeito que estar. Mas quando passamos para o mundo do XML esse namespace precisa ser declarado no XML mas que namespace é esse?

Para driblar o problema eu resolvi alterar a mixed citation com o código:

def remove_w_namespace(string):
    if "w:st=\"on\"" not in string:
        return string

    return string.replace("w:st=\"on\"", "w-st=\"on\"")
joffilyfe commented 4 years ago

@joffilyfe fiquei confusa com este comentário: #217 (comment) Esta é a proposta para as correções? Entendi que não porque o resultado não é bom.

Ele é bom o suficiente para resolver o problema, todos os pids da lista foram corrigido. O problema que eu enxergo é que a base MST permanece com o dado não escapado. Para nós isso está bem?

patymori commented 4 years ago

Ele é bom o suficiente para resolver o problema, todos os pids da lista foram corrigido. O problema que eu enxergo é que a base MST permanece com o dado não escapado. Para nós isso está bem?

Pelo que entendi resolveremos o problema no Article Meta e conseguiremos resolver o problema dos XMLs para seguir com a migração. Sendo assim, não vejo problema da base MST continuar como está.

robertatakenaka commented 4 years ago

A última lista a ser atacada e o problema corrigido foi a [2] - pids_conversion_err_namespace_prefix_w.txt. Os XMLs eram considerados como inválidos porque algumas mixed citations possuem uma mais tags HTML* com o propriedades que utilizam o namespacew:st=`.

Esse é um problema que eu não sei medir o impacto porque o dado está online no site clássico mas o site não quebra porque é HTML, o browser aceita do jeito que estar. Mas quando passamos para o mundo do XML esse namespace precisa ser declarado no XML mas que namespace é esse?

Para driblar o problema eu resolvi alterar a mixed citation com o código:

def remove_w_namespace(string):
    if "w:st=\"on\"" not in string:
        return string

    return string.replace("w:st=\"on\"", "w-st=\"on\"")

Eu desconheço este namespace. Isso está no original ou foi algo inserido ao passar para o AM?

robertatakenaka commented 4 years ago

@joffilyfe fiquei confusa com este comentário: #217 (comment) Esta é a proposta para as correções? Entendi que não porque o resultado não é bom.

Ele é bom o suficiente para resolver o problema, todos os pids da lista foram corrigido. O problema que eu enxergo é que a base MST permanece com o dado não escapado. Para nós isso está bem?

Eu discordo que tenha resolvido. Acho que só não está quebrando, mas o resultado não está correto. Houve perda de dados.

<ref id="B26">
      <label>26</label><mixed-citation>26. Cohen J. The Earth is Round (p&lt;.05). <italic>Am Psychol</italic> 1994; 49: 997-1003.</mixed-citation></ref>

      <element-citation publication-type="journal">
        <article-title>The Earth is Round (p: 05)</article-title>
...

O título no resultado: The Earth is Round (p: 05) O correto é The Earth is Round (p < .05)

joffilyfe commented 4 years ago

Eu desconheço este namespace. Isso está no original ou foi algo inserido ao passar para o AM?

Está no HTML, se você abrir o site scielo.br com estes pids você consegue inspecionar o HTML e ver o namespace no próprio HTML.

<ref id="B26">
      <label>26</label><mixed-citation>26. Cohen J. The Earth is Round (p&lt;.05). <italic>Am Psychol</italic> 1994; 49: 997-1003.</mixed-citation></ref>

      <element-citation publication-type="journal">
        <article-title>The Earth is Round (p: 05)</article-title>
...

O título no resultado: The Earth is Round (p: 05) O correto é The Earth is Round (p < .05)

@robertatakenaka, mas nós não estamos atacando o elemento <element-citation>, ele é gerado pelo articlemeta. Se o dado foi modificado em algum momento, esse momento foi quando o artigo foi carregado para o banco de dados do Articlemeta.

Com a correção no meu articlemata local nós temos a seguinte informação:

Screen Shot 2020-04-22 at 11 09 56

No site clássico nós vemos a referência da seguinte forma,

Screen Shot 2020-04-22 at 11 12 02
joffilyfe commented 4 years ago

Foi feita uma nova carga com as mixed citations dos artigos vinculados a este issue e após isso foi verificado por meio do _dsmigracao que todsoos artigos foram convertidos com sucesso.

Também foi feito um processo de diff entre os parágrafos antes da carga e após a carga, foi possível perceber uma melhora na qualidade do conteúdo importado, como:

  • Mixed citations que antes estavam faltando foram importadas;
  • Mixed citations que antes possuíam alguma falha no dado como, caracteres faltando, foram corrigidas.

Sendo assim, esse issue está sendo finalizado porque alcançou o seu objetivo.