2017-09-19 3 views
0

J'extraction des entités d'un texte, la plupart du temps, je reçois plusieurs ENTITES, par exemple <http://dbpedia.org/resource/NASA>, <http://dbpedia.org/resource/IPhone> et <http://dbpedia.org/resource/Apple_Inc.>trouver les sujets qui se connectent ENTITES à DBpedia avec SPARQL

Ces deux ENTITES, ne pas partager le même dct:subject est-il un moyen d'interroger un chemin pour obtenir une liste des sujets connecter mes entités?

Mon but est de créer une sorte de «page rank», pour trouver les sujets les plus pertinents pour une entité donnée.

De préférence avec un compteur, combien de marches sont entre eux. J'ai essayé de le forcer brutalement, de commencer par une entité, d'obtenir tous les sujets et d'obtenir tous les entites pour le sujet et ainsi de suite, mais les requêtes commencent à devenir énormes.

+1

'select distinct? Cat { Dct: sujet/skos: plus large *? Cat. dbr: IPhone dct: sujet/skos: plus large *? Cat. } 'mais vous risquez d'avoir un timeout car cela peut devenir très cher – AKSW

+1

Dans Virtuoso, vous pouvez également essayer d'ajouter une restriction sur la longueur du chemin:' select distinct? Cat { dct: sujet/skos: plus large {1,3}? cat. dbr: IPhone dct: sujet/skos: plus large {1,3}? Cat. } ' – AKSW

+1

Une version plus compacte:' select distinct? Cat { ? Cat^skos: plus large {1,3}/^ dct: sujet , Dbr: IPhone } ' – AKSW

Répondre

2

Jaillissant commentaires de @ AKSW ...

Une option, sans limite sur la longueur de skos:broader longueurs de trajet, qui dépassent les limites de consommation des ressources sur le point final DBpedia public, mais qui pourrait être exécuté sur une instance privée (in the cloud ou ailleurs) où vous pourrez vous détendre ces limites -

PREFIX dbr: <http://dbpedia.org/resource/> 
PREFIX dct: <http://purl.org/dc/terms/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

SELECT DISTINCT ?cat 
WHERE 
    { <http://dbpedia.org/resource/Apple_Inc.> 
     dct:subject/skos:broader* ?cat . 
    dbr:IPhone 
     dct:subject/skos:broader* ?cat . } 

l'option succincte, en utilisant la syntaxe spécifique à Virtuoso (basé sur un avant-projet de SPARQL Chemins de propriété) pour limiter la longueur du chemin (ici nécessitant au moins 1 skos:broader et permettant jusqu'à 3) -

PREFIX dbr: <http://dbpedia.org/resource/> 
PREFIX dct: <http://purl.org/dc/terms/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

SELECT DISTINCT ?cat 
WHERE 
    { ?cat 
     ^skos:broader{1,3}/^dct:subject 
      <http://dbpedia.org/resource/Apple_Inc.> , 
      dbr:IPhone 
    } 

Une autre option succincte, cette fois en utilisant la norme SPARQL Property Paths syntax pour limiter la longueur du chemin -

PREFIX dbr: <http://dbpedia.org/resource/> 
PREFIX dct: <http://purl.org/dc/terms/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

SELECT DISTINCT ?cat 
WHERE 
    { ?cat 
     ^skos:broader/^skos:broader?/^skos:broader?/^dct:subject 
      <http://dbpedia.org/resource/Apple_Inc.> , 
      dbr:IPhone 
    } 

Vous pouvez également utiliser 2 déclarations avec les chemins non retournées dans les clauses WHERE, d'abord en Virtuoso- forme spécifique -

{ <http://dbpedia.org/resource/Apple_Inc.> 
     dct:subject/skos:broader{1,3} ?cat . 
    dbr:IPhone 
     dct:subject/skos:broader{1,3} ?cat . 
    } 

- puis dans la norme SPARQL -

{ <http://dbpedia.org/resource/Apple_Inc.> 
     dct:subject/skos:broader/skos:broader?/skos:broader? ?cat . 
    dbr:IPhone 
     dct:subject/skos:broader/skos:broader?/skos:broader? ?cat . 
    }