Identifier l'entité d'une page Wikipedia
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_of
ou . subclass
Cependant, 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
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