ウィキペディアページのエンティティを特定する

Aug 18 2020

私の質問は、残念ながら回答を受け取っていない同様の質問/コメントに関連しています。

複数のウィキペディアページのリストが与えられた場合、例:

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

これらの記事が参照しているエンティティのタイプを確認するにはどうすればよいですか。つまり、理想的には、人、映画、動物など、より高いレベルの何かが必要です。

これまでの私の最も良い推測は、SPARQLを使用してinstance_oforsubclassツリーに戻るWikidataAPIでした。しかし、これは意味のある結果にはつながりませんでした。

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

もちろん、1つのオプションは、を調べることでもありますが、itemDescriptionこれは粒度が大きすぎて、より大きなリストから意味のあるグループを構築し、後で頻度をカウントすることはできません。より一般的なエンティティカテゴリを取得する方法についてのヒント/アイデアはありますか?たぶんmediawikiAPIからも?

どんな入力でも大歓迎です!

回答

1 MatthiasWinkelmann Aug 18 2020 at 09:18

並べて3つの可能性があります:

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

ここに住んでいます。

「film」や「mammal」などのラベル、つまり最大で数十のラベルを表示している場合は、それらを優先順に明示的にリストしてから、最初に表示されるラベルを使用できます。

このバグに遭遇している可能性があることに注意してください。 https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial#wikibase:Label_and_aggregations_bug