Closed patymori closed 4 years ago
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:
S0100-879X2012001200022
- Referência B26
<mixed-citation>26. Cohen J. The Earth is Round (p<.05>Am Psychol 1994; 49: 997-1003.</.05>
<.05>
é inválida por iniciar com o .
.S0100-204X2009000800027
- Referência B13
<mixed-citation>PROJECT SOLOBIOMA. <bold>Project Solobioma [home page].</bold><available at:="" href="http://www.solobioma.ufpr.br/" target="_blank">http://www.solobioma.ufpr.br/>. Acessed on: 03 Sept. 2009.</available></mixed-citation>
.<available at:= ...>
é tida como inválida porque a declaração de atributo não permite os :
.S1413-70542011000400017
- Referência B7
<mixed-citation>INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. <bold>Indicadores de produção agropecuária 2007.</bold> Disponível em: <ext-link ext-link-type="uri" xlink:href="http://www.ibge.gov.br/home"> <http:/></ext-link> . Acesso em: 27 abr. 2008.</mixed-citation>
.<http:/>
não pode ter os :
.S2176-94512011000200016
- Referência B4
<mixed-citation>4. Arnett GW, Bergman RT. Facial keys to orthodontic diagnosis and treatment planning. <sn w:st="on">Part</sn> <sn w:st="on">I.</sn> Am J Orthod Dentofacial Orthop. 1993 Apr;103(4):299-312.</mixed-citation>
.w
.Até onde pude ver estes dados também estão errados nas bases de parágrafo (não olhei todos os artigos).
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.
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?
@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.
@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?
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.
@joffilyfe o erro não está no dado:
26. Cohen J. The Earth is Round (p<.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<.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<.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<.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<.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<.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 &
, <
e >
.
O
html_decode
é o mesmo quehtml.unescape
.A solução seria impedir que
html.unescape
convertesse as entidades&
,<
e>
.
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<.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<.05)
.
@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 &, < e >.
O dado está correto:
26. Cohen J. The Earth is Round (p<.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 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
MongoDB
@joffilyfe verdade
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.
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?
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.
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.
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<.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?
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?
Talvez seja possível especificando um parser mais robusto, na lxml. Algo como:
parser = etree.XMLParser(recover=True)
etree.parse(xml, parser=parser)
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.
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 comofix
.
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.
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:
parser
de XMLs mal formados.parser
dos XMLs mal formados então como vamos navegar em sua árvore e alterar os trechos defeituosos?2
é necessário ativar a recuperação durante a fase de leitura (recover=True
).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.
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>Am Psychol 1994; 49: 997-1003.</mixed-citation>.05></ref>
<element-citation publication-type="journal">
....
Perceba que no esforço para recuperar a tag mal formada, o LXML adicionou um .05>
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<.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.
[1] - ds_migracao mixed-citations update xml/conversion/S0100-879X2012001200022.en.xml --override
O que vocês acham, @patymori, @robertatakenaka, @jamilatta e @gustavofonseca?
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?
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 :)
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 < 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"}'
(14)Fernandes, P. (2004). When assumptions go unquestioned. Disponível em [16] R. Langhi e R. Nardi, Revista Latino-Americana de Educação em Astronomia 2, (2005), disponível em [34] A. Damineli, Supernovas -Boletim Brasileiro de Astronomia n. 467, (2008). Disponível em BRASIL. Ministério das Relações Exteriores. Departamento de Promoção Comercial. Brazil Trade Net. Disponível em: ________. Produção agrícola municipal. Rio de Janeiro, 2008. Disponível em: CENTRO DE DESENVOLVIMENTO DO AGRONEGóCIO -CEDAGRO. Coeficientes técnicos. Disponível em: CENTRO DE INTELIGêNCIA EM FLORESTAS CI Florestas. Mercado internacional. Disponível em: ENDOM, M. A. Economic Analysis of Large Scale Logging. Working Paper, nº. 3, 1999. Disponível em: 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: NELSON, A. W. Applications of the Policy Analysis Matrix (PAM). Working Paper, 1991. Disponível em: FLORIDA STATE UNIVERSITY. Primer design. Disponível em:< IPECE INSTITUTO DE PESQUISA E ESTRATéGICA ECONôMICA DO CEARá. Perfil básico municipal: Baturité. 2007a. Disponível em: _______. Perfil básico municipal: Iguatu. 2007b. Disponível em: _______. Perfil básico municipal: Quixadá. 2007c. Disponível em: _______. Anuário Estatístico do Ceará 2007. 2008. Disponível em: LIMA NETO, P. C. Extensão rural e agricultura familiar. 1999. Disponível em: Ministério do Desenvolvimento Agrário -MDA. Perguntas e Respostas sobre o PRONAF.2005.Disponívelem: 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: 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: 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: ENERGY INFORMATION ADMINISTRATION EIA, 2008. Disponível em: 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: GLOBAL TRADE ANALYSIS PROJECT GTAP, 2001. Disponível em 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: 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 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 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: 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: 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: RUTHERFORD, T. F. GTAP6inGAMS: The dataset and static model. 42 p., 2005, mimeo. Disponível em: 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: SOHNGEN, B. Global Timber Market and Forestry data Project, 2007. Disponível em: UNITED STATES CONGRESS. Energy Independence and Security Act of 2007, 2007. Disponívelem: VALOR ECONÔMICO. \"Produção de etanol precisará aumentar 12 vezes para substituir 10% da gasolina\", Valor Online, 12/03/2007. Disponível em: 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 FUNDAÇÃO GETÚLIO VARGAS FGV. FGVDADOS. Várias tabelas. Disponível em: INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA IBGE. Sistema IBGE de recuperação Automática SIDRA. Várias tabelas. Disponível em: MS. Ministério da Saude. Programa Nacional de Controle da Tuberculose- PNCT. Disponível em 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: 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: IBGE. Paranacidade, 2005. Disponível em: 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: Microchip (2007a). About Microchip USB PIC (PIC18F2550, PIC18F4550...). Available:<http://pic18fusb.online.fr/wiki/wikka.php?wakka=wikihome>
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>
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>
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>
22 ESTATUTOS da Real Bibliotheca, mandados ordenar por sua Majestade. Rio de Janeiro: Na Regia Typographia, 1821. Disponível em:
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>
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>
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:
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:
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>
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):
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):
28 Os dados sobre os preços de produtores foram retirados de Historical Data series. International Coffee Organization.
34 Dados da International Coffee Organization's Historical Data series, disponível online em
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 <http://www.scielo.br>, 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
@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.
@joffilyfe observação sobre o código sugerido: https://gist.github.com/joffilyfe/e93a3ab269e18eddf895dcee1cdd6490#gistcomment-3264395
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 namespace
w: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 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?
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á.
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 tagsHTML* com o propriedades que utilizam o namespace
w: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?
@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<.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)
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<.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:
No site clássico nós vemos a referência da seguinte forma,
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:
Sendo assim, esse issue está sendo finalizado porque alcançou o seu objetivo.
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
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