ระบุเอนทิตีของหน้า Wikipedia
คำถามของฉันเกี่ยวข้องกับคำถาม / ความคิดเห็นที่คล้ายกันซึ่งน่าเสียดายที่ไม่เคยได้รับคำตอบ
ให้รายชื่อหน้า Wikipedia หลายหน้าเช่น:
- https://en.wikipedia.org/wiki/Donald_Trump
- https://en.wikipedia.org/wiki/The_Matrix
- https://en.wikipedia.org/wiki/Tiger
- ...
ฉันจะทราบได้อย่างไรว่าบทความเหล่านี้อ้างถึงเอนทิตีประเภทใด กล่าวคือฉันต้องการบางสิ่งบางอย่างในระดับที่สูงขึ้นเช่นบุคคลภาพยนตร์สัตว์เป็นต้น
การคาดเดาที่ดีที่สุดของฉันคือ Wikidata API ที่ใช้ 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
แต่ฉันเกรงว่าจะละเอียดเกินไปที่จะสร้างกลุ่มที่มีความหมายจากรายการที่ใหญ่ขึ้นและนับความถี่ในภายหลัง ใครมีคำแนะนำ / แนวคิดเกี่ยวกับวิธีรับหมวดหมู่เอนทิตีทั่วไปเพิ่มเติมหรือไม่? อาจจะมาจาก mediawiki API หรือไม่
ข้อมูลใด ๆ จะได้รับการชื่นชมอย่างมาก!
คำตอบ
ความเป็นไปได้สามประการเคียงข้างกัน:
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