2017-05-12 4 views
1

J'utilise cette requête pour rechercher toutes les étiquettes qui contiennent le mot « Medi »Comment rechercher rdfs: des étiquettes dans dbpedia qui correspondent partiellement à un terme donné en utilisant SPARQL?

select distinct ?label where 
{ 
    ?concept rdfs:label ?label 
    filter contains(?label,"Medi") 
    filter(langMatches(lang(?label),"en")) 
} 

Cependant, dès que je change le terme de « Medi » à « Medicare » cela ne fonctionne pas et le temps en dehors. Comment puis-je le faire fonctionner avec des mots plus longs comme Medicare, c'est-à-dire extraire toutes les étiquettes contenant le mot Medicare.

Répondre

2

Votre requête doit parcourir toutes les étiquettes dans DBpedia - ce qui est un nombre assez important -, puis appliquer la vérification de confinement de chaîne. C'est en effet cher.

Même une requête de comptage conduit à une "erreur de délai d'attente estimé":

select count(?label) where 
{ 
    ?concept rdfs:label ?label 
    filter(regex(str(?label),"Medi")) 
    filter(langMatches(lang(?label),"en")) 
} 

Deux options:

  1. Virtuose a un soutien de recherche en texte intégral:

    SELECT DISTINCT ?label WHERE { 
        ?concept rdfs:label ?label . 
        ?label bif:contains "Medicare" 
        FILTER(langMatches(lang(?label),"en")) 
    } 
    
  2. Depuis le point de terminaison public DBpedia est un point de terminaison partagé, la solution est de charger le DBpedia da taset dans votre propre magasin triple, par ex. Virtuose. Là, vous pouvez ajuster le maximum. paramètre de délai d'exécution estimé.
+0

Salut, Je cours réellement dbpedia sur un serveur local. Et je préférerais une solution plus rapide, car être lent signifierait un mauvais UX. Donc, j'ai copié-collé votre Option # 1. Et je revins ceci: 'Virtuoso 37000 Erreur SP030: compilateur SPARQL, ligne 5: erreur de syntaxe à 'étiquette?' Avant 'bif: contient' SPARQL: définir sql: grand-data-const 0 # output- format: text/html définir sql: signal-void-variables 1 SELECT DISTINCT? étiquette WHERE { ? concept rdfs: étiquette? label ? label bif: contient "Medicare" FILTER (langMatches (lang (? label), " en ")) }' Pourriez-vous s'il vous plaît m'aider à déboguer :) –

+0

Ah désolé, j'ai oublié le point après le premier modèle triple. Devrait fonctionner maintenant. – AKSW