एक विकिपीडिया पृष्ठ की इकाई की पहचान करें
मेरा प्रश्न एक ऐसे ही प्रश्न / टिप्पणी से संबंधित है जिसका दुर्भाग्य से कभी कोई उत्तर नहीं मिला।
कई विकिपीडिया पृष्ठों की सूची को देखते हुए, जैसे:
- https://en.wikipedia.org/wiki/Donald_Trump
- https://en.wikipedia.org/wiki/The_Matrix
- https://en.wikipedia.org/wiki/Tiger
- ...
मैं कैसे पता लगा सकता हूं कि ये लेख किस प्रकार की इकाई को संदर्भित करता है। यानी आदर्श रूप से मैं उच्च स्तर पर कुछ चाहूंगा जैसे व्यक्ति, फिल्म, जानवर आदि।
मेरा अब तक का सबसे अच्छा अनुमान था कि विकीडाटा एपीआई SPARQL का उपयोग करके वापस instance_of
या subclass
पेड़ को स्थानांतरित करने के लिए । हालांकि, इससे सार्थक परिणाम नहीं आए।
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".}
}
परिणाम यहाँ देखा जा सकता है: https://w.wiki/ZmQ
इसका एक विकल्प निश्चित रूप से भी देखना होगा itemDescription
, लेकिन मुझे डर है कि बड़ी सूची से सार्थक समूहों का निर्माण करने और बाद में आवृत्तियों को गिनने के लिए यह बहुत ही दयनीय है। क्या किसी को अधिक सामान्य इकाई श्रेणियां प्राप्त करने के बारे में कोई संकेत / विचार है? शायद मीडियाविकि एपीआई से भी?
किसी भी इनपुट अत्यधिक सराहना की जाएगी!
जवाब
यहां तीन संभावनाएं हैं, अगल-बगल:
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
यहाँ रहते हैं ।
यदि आप "फिल्म" और "स्तनपायी" जैसे लेबल देख रहे हैं, यानी एक-दो दर्जन, तो आप वरीयता के क्रम में उन्हें स्पष्ट रूप से सूचीबद्ध कर सकते हैं, फिर पहले वाले का उपयोग करें।
ध्यान दें कि आप इस बग में भाग सकते हैं: https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial#wikibase:Label_and_aggregations_bug