Wikisource discusión:Lista de autores

Último comentario: hace 7 años por Aleator en el tema Obtención de la lista de autores

Obtención de la lista de autores

editar

Se ejecutó la siguiente query en Wikidata:SPARQL query service (https://query.wikidata.org):

SELECT ?autor ?autorLabel ?fecnacLabel ?fecdefLabel ?nacionalidadLabel ?page WHERE {
 ?autor wdt:P31 wd:Q5 .
 ?autor wdt:P569 ?fecnac .
 ?autor wdt:P570 ?fecdef .
 ?autor wdt:P27 ?nacionalidad .
 ?page schema:about ?autor .
 ?page schema:isPartOf <https://es.wikisource.org/> .
 SERVICE wikibase:label { bd:serviceParam wikibase:language "es". }
}
LIMIT 3000

El resultado, con más de 2.000 elementos, se descargó en local como archivo ".tsv detallado". Los registros tienen el siguiente aspecto:

<http://www.wikidata.org/entity/Q538091>	"Lysander Spooner"@es	"1808-01-19T00:00:00Z"	"1887-05-14T00:00:00Z"	"Estados Unidos"@es	<https://es.wikisource.org/wiki/Autor:Lysander_Spooner>
<http://www.wikidata.org/entity/Q545430>	"Antonio José de Cavanilles"@es	"1745-01-16T00:00:00Z"	"1804-05-05T00:00:00Z"	"España"@es	<https://es.wikisource.org/wiki/Autor:Antonio_Jos%C3%A9_de_Cavanilles>
<http://www.wikidata.org/entity/Q559964>	"Estanislao del Campo"@es	"1834-02-07T00:00:00Z"	"1880-11-06T00:00:00Z"	"Argentina"@es	<https://es.wikisource.org/wiki/Autor:Estanislao_del_Campo>

Contiene duplicados, ya que un mismo autor puede tener más de una nacionalidad, o incluso más de una fecha (de nacimiento o de defunción). Cuando se desconoce el día o el mes, parece ser que se informa "1" por defecto.

Seguidamente se procesó en local el contenido del .tsv a un formato adaptado a una wikitabla con columnas ordenables, mediante el siguiente regexp (sí, es un poco chapucero):

  nr = new RegExp("\"@es	\"", "g"); //tras nombre
  //añadimos un espacio y punto final para que luego pueda truncar incluso en Autores sin apellidos
  document.form1.S1.value = document.form1.S1.value.replace(nr, " .\"| |\n\{\{!}}|número\=1}}\n|");

  //fechas inexistentes
  nr = new RegExp("t[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "0000-00-00");
  nr = new RegExp("t[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "0000-00-00");

  //hay autores que no tienen @es y son IDs de Wikidata (p.ej. "Q16034232"):
  nr = new RegExp("([0-9])\"	\"([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9])", "g"); //antes de la fec_nac
  document.form1.S1.value = document.form1.S1.value.replace(nr, "$1 .\| \|\n\{\{!}}\|número\=1}}\"	\"$2");

  nr = new RegExp("@es	<https", "g"); //tras nacionalidad
  document.form1.S1.value = document.form1.S1.value.replace(nr, "	<https");

  nr = new RegExp("<http:\/\/www.wikidata.org\/entity\/", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\|\-\n|[[:d:");
  nr = new RegExp("T00:00:00Z\"", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\"");
  nr = new RegExp(">	\"", "g"); //fin wikidata (pero no de es.wikisource)
  document.form1.S1.value = document.form1.S1.value.replace(nr, "]]\n|\{\{subst:reemplazar|");
  nr = new RegExp("<", "g");       //inicio es.wikisource
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|\[");
  nr = new RegExp(">", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, " Wikisource]");

  //fechas
  nr = new RegExp("-00-", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|00\n|");
  nr = new RegExp("-01-", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|01\n|");
  //etc...
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|11\n|");
  nr = new RegExp("-12-", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|12\n|");
  nr = new RegExp("-([0-9])", "g"); //antes de Cristo
  document.form1.S1.value = document.form1.S1.value.replace(nr, "-$1");

  nr = new RegExp("\"	\"", "g");
  document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|");
  nr = new RegExp("\"	", "g"); //tras nacionalidad
  document.form1.S1.value = document.form1.S1.value.replace(nr, " ");
  nr = new RegExp("( .)\"", "g"); //fin de nombre
  document.form1.S1.value = document.form1.S1.value.replace(nr, "$1");

Seguramente hay otras formas más eficientes de obtener la lista. Por ejemplo, se puede obtener la lista de elementos de Wikidata con la siguiente query:

SELECT ?author ?authorLabel
WHERE
{
     ?article        schema:about ?author ;
                        schema:isPartOf <https://es.wikisource.org/> .
    ?author wdt:P31 wd:Q5.
        SERVICE wikibase:label { bd:serviceParam wikibase:language "es" }
}
GROUP BY ?author ?authorLabel

, y después utilizar la plantilla {{Propiedad}} para extraer datos como fechas, nacionalidad, etc. -Aleator 15:04 14 ago 2017 (UTC)Responder

Volver a la página de proyecto «Lista de autores».