Il 03 gennaio 2013 00:53, sabas88 ha scritto:

> Il giorno 03 gennaio 2013 00:06, Daniele Forsi <dfo...@gmail.com> ha
> scritto:
>>
>>
>> molto utile grazie
>> c'è modo di evitare ripetizioni come la seguente (in particolare il
>> cognome ripetuto due volte)?
>>
>
> L'avevo notato anche io ma non mi ero posto il problema, però così credo che
> spariscano
>
> SELECT ?name, ?surname, CONCAT( ?name, ' ', ?surname) WHERE {
>   ?person a <http://dbpedia.org/ontology/Person> .
>   ?person   <http://it.dbpedia.org/property/nome>    ?name .
>   ?person   <http://it.dbpedia.org/property/cognome> ?surname .
>   ?person   <http://it.dbpedia.org/property/nazionalità> "italiana"@it .
>   FILTER( isLiteral(?name) AND isLiteral(?surname) AND (!REGEX (?name,
> ?surname)  ) )
> }
>
> Ho semplicemente aggiunto una regex che controlla che il cognome non sia nel
> nome (però così elimina possibili Carlo De Carlo o simili).

ho aggiunto di considerare solo le persone decedute:
SELECT ?name, ?surname, CONCAT( Str(?name), ' ', Str(?surname)) WHERE {
  ?person a <http://dbpedia.org/ontology/Person> .
  ?person   <http://it.dbpedia.org/property/nome>    ?name .
  ?person   <http://it.dbpedia.org/property/cognome> ?surname .
  ?person   <http://it.dbpedia.org/property/annomorte> ?annomorte .
  FILTER( isLiteral(?name) AND isLiteral(?surname) AND (!REGEX (?name,
?surname)  ) AND ?annomorte != '')
}
ho usato Str() perché certi "nomi" in realtà sono numeri e confronto
anno morte con una stringa vuota perché non tutti gli anni sono numeri

c'è però un altro problema che non capisco se è dovuto ai dati o alla
query, in pratica fa il prodotto tra nomi e cognomi di tutti i
template nella pagina (es. della persona e quelli delle fonti citate),
e non sembrano distinguibili nei dati di dbpedia, succede in diversi
casi, l'ho verificato per Fiona May dove nella bibliografia c'è
l'autore Mauro Valeri e nella pagina
http://it.dbpedia.org/page/Fiona_May ci sono 2 cognomi e 3 nomi:
dbpprop-it:cognome      
May
Valeri

dbpprop-it:nome 
Mauro
Fiona May
Fiona

e se nella tua query aggiungo un vincolo sul cognome:
SELECT ?name, ?surname, CONCAT( Str(?name), ' ', Str(?surname)) WHERE {
  ?person a <http://dbpedia.org/ontology/Person> .
  ?person   <http://it.dbpedia.org/property/nome>    ?name .
  ?person   <http://it.dbpedia.org/property/cognome> ?surname .
  ?person   <http://it.dbpedia.org/property/cognome> "May"@it .
  ?person   <http://it.dbpedia.org/property/nazionalità> "italiana"@it .
  FILTER( isLiteral(?name) AND isLiteral(?surname) AND (!REGEX (?name,
?surname)  ) )
}

si ottengono 5 "persone":
name    surname callret-2
"Mauro"@it      "May"@it        Mauro May
"Fiona"@it      "May"@it        Fiona May
"Mauro"@it      "Valeri"@it     Mauro Valeri
"Fiona May"@it  "Valeri"@it     Fiona May Valeri
"Fiona"@it      "Valeri"@it     Fiona Valeri

-- 
Daniele Forsi

_______________________________________________
Talk-it mailing list
Talk-it@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-it

Rispondere a