Pergunta

Tenho uma tabela de citações que inclui o sobrenome do primeiro autor, o título, o periódico, o ano e os números das páginas de cada citação.

Eu postei as primeiras linhas da tabela em documentos Google, ou o versão csv (nem todos os registros têm um doi)

Gostaria de poder consultar o identificador do objeto digital para cada uma dessas citações.Para os títulos, seria melhor se a consulta pudesse lidar com "correspondência difusa".

Como posso fazer isso?

A tabela está atualmente no MySQL, mas seria suficiente começar e terminar com um arquivo .csv (eu apreciaria uma resposta que fosse do início ao fim) (ou, como uso R principalmente, um quadro de dados R).

Foi útil?

Solução 3

Aqui estão duas opções

Carregamento de CSV

Encontrei outra solução promissora que não funciona tão bem na prática como na

CrossRef permite que você carregue o csv vinculado diretamente e, em seguida, execute uma consulta de texto aqui: http://www.crossref.org/stqUpload/

No entanto, apenas 18 das 250 consultas (~7%) retornaram um doi.

Consulta XML

Com base na resposta de Brian Diggs, aqui está uma tentativa que faz 95% do trabalho - para escrever a consulta baseada em xml, ela ainda possui alguns bugs que exigem alguma exclusão usando sed.Mas o maior problema é que minha "sessão expirou" quando a consulta foi enviada.

a sintaxe xml inclui uma opção para usar correspondência difusa.

o doiquery.xml contém o texto do modelo na resposta do @Brians;o citations.csv está vinculado acima.

library(XML)
doiquery.xml <- xmlTreeParse('doiquery.xml')

query <- doiquery.xml$doc$children$query_batch[["body"]]

citations <- read.csv("citations.csv")

new.query <- function(citation, query = query){
  xmlValue(query[["author"]]) <- as.character(citation$author)
  xmlValue(query[["year"]]) <- as.character(citation$year)
  xmlValue(query[["article_title"]][["text"]]) <- citation$title
  xmlValue(query[["journal_title"]]) <- citation$journal
  return(query)
}


for (i in 1:nrow(citations)){
  q <- addChildren(q, add.query(citations[i,]))
}
axml <- addChildren(doiquery.xml$doc$children$query_batch, q )

saveXML(axml, file = 'foo.xml')

Conversor CSV para XML

O software Creativyst fornece uma solução baseada na web CSV para XML conversor.

Passos:

  1. Insira os nomes das colunas no campo ElementID,
  2. "documento" no campo DocID
  3. "consulta" no campo RowID
  4. Copie/cole csv em "Arquivo CSV de entrada".
  5. Clique em Converter

Além disso, veja esta pergunta relacionada: Script de shell para analisar CSV em uma consulta XML?

Outras dicas

Não conheço nenhum pacote ou função completo que já faça isso, mas esta é a abordagem geral que eu usaria.crossref.org oferece uma abordagem baseada na web para determinar um DOI a partir de dados bibliográficos em http://www.crossref.org/guestquery/

Nessa página existem várias maneiras diferentes de pesquisar, incluindo a última que faz uma pesquisa formatada em XML.A página inclui informações sobre como criar o XML apropriado.Você precisaria enviar o XML por HTTP (determinando os detalhes separando a página para descobrir os destinos do formulário e quaisquer informações adicionais que precisem ser incluídas) e então analisar a resposta.

Além disso, você precisaria verificar se fazer isso de forma automatizada não viola de forma alguma os termos de serviço do site.


Abaixo está o formulário xml para a consulta crossref, os termos pesquisáveis ​​incluem:título_do_artigo, autor, ano, título_da revista, volume e primeira página:

<?xml version = "1.0" encoding="UTF-8"?>
<query_batch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xmlns="http://www.crossref.org/qschema/2.0"
  xsi:schemaLocation="http://www.crossref.org/qschema/2.0 http://www.crossref.org/qschema/crossref_query_input2.0.xsd">
<head>
   <email_address>test@crossref.org</email_address>
   <doi_batch_id>test</doi_batch_id>
</head>
<body>
  <query enable-multiple-hits="false|exact|multi_hit_per_rule|one_hit_per_rule|true"
            list-components="false"
            expanded-results="false" key="key">
    <article_title match="fuzzy"></article_title>
    <author search-all-authors="false"></author>
    <component_number></component_number>
    <edition_number></edition_number>
    <institution_name></institution_name>
    <isbn></isbn>
    <issn></issn>
    <volume></volume>
    <issue></issue>
    <year></year>
    <first_page></first_page>
    <journal_title></journal_title>
    <proceedings_title></proceedings_title>
    <series_title></series_title>
    <volume_title></volume_title>
    <unstructured_citation></unstructured_citation>
  </query>
</body>
</query_batch>

Este é um problema aberto.Há maneiras melhores e piores de atacá-lo, mas, comece lendo resumo de Karen Coyle desse problema.A bibliografia anexada que no artigo também é excelente .

Em suma, o problema de quantificar a mesmice entre dois registros bibliográficos é difícil, e uma quantidade substancial de aprendizagem de máquina centrou-se em torno desse tópico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top