Identifier l'entité d'une page Wikipedia

Aug 18 2020

Ma question est liée à une question/commentaire similaire qui n'a malheureusement jamais reçu de réponse.

Étant donné une liste de plusieurs pages Wikipédia, par exemple :

  • https://en.wikipedia.org/wiki/Donald_Trump
  • https://en.wikipedia.org/wiki/The_Matrix
  • https://en.wikipedia.org/wiki/Tiger
  • ...

comment puis-je savoir à quel type d'entité ces articles font référence. c'est-à-dire qu'idéalement, je voudrais quelque chose à un niveau supérieur, par exemple une personne, un film, un animal, etc.

Ma meilleure estimation jusqu'à présent était l'API Wikidata utilisant SPARQL pour reculer l' arborescence instance_ofou . subclassCependant, cela n'a pas conduit à des résultats significatifs.

SELECT ?lemma ?item ?itemLabel ?itemDescription ?instance ?instanceLabel ?subclassLabel WHERE {
  VALUES ?lemma {
    "Donald Trump"@en
    "The Matrix"@en
    "Tiger" @en
  }
  ?sitelink schema:about ?item;
    schema:isPartOf <https://en.wikipedia.org/>;
    schema:name ?lemma.
  ?item wdt:P31* ?instance.
  ?item wdt:P279* ?subclass.
  SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "en,da,sv".}
}

Le résultat est visible ici :https://w.wiki/ZmQ

Une option serait bien sûr également de regarder le itemDescription, mais je crains que cela ne soit trop granulaire pour créer des groupes significatifs à partir de listes plus grandes et compter les fréquences plus tard. Quelqu'un a-t-il un indice/une idée sur la façon d'obtenir des catégories d'entités plus générales ? Peut-être aussi depuis l'API mediawiki ?

Toute contribution serait très appréciée !

Réponses

1 MatthiasWinkelmann Aug 18 2020 at 09:18

Voici trois possibilités, côte à côte :

SELECT ?lemma ?item (GROUP_CONCAT(DISTINCT ?instanceLabel; SEPARATOR = " ") AS ?a) (GROUP_CONCAT(DISTINCT ?subclassLabel; SEPARATOR = " ") AS ?b) (GROUP_CONCAT(DISTINCT ?isaLabel; SEPARATOR = " ") AS ?c) WHERE {
  VALUES ?lemma {
    "Donald Trump"@en
    "The Matrix"@en
    "Tiger"@en
  }
  ?sitelink schema:about ?item;
    schema:isPartOf <https://en.wikipedia.org/>;
    schema:name ?lemma.
  OPTIONAL { ?item (wdt:P31/(wdt:P279*)) ?instance. }
  OPTIONAL { ?item wdt:P279 ?subclass. }
  OPTIONAL { ?item wdt:P31 ?isa. }
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en,da,sv".
    ?instance rdfs:label ?instanceLabel.
    ?subclass rdfs:label ?subclassLabel.
    ?isa rdfs:label ?isaLabel.
  }
    # Here, you could add: FILTER(?instanceLabel in ("mammal"@en, "movie"@en, "musical"@en (and so on...)))
}
GROUP BY ?lemma ?item

Vivez ici .

Si vous regardez des étiquettes telles que "film" et "mammifère", c'est-à-dire quelques douzaines au maximum, vous pouvez les lister explicitement par ordre de préférence, puis utiliser la première qui se produit.

Notez que vous pouvez rencontrer ce bogue :https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial#wikibase:Label_and_aggregations_bug