识别维基百科页面的实体

问题描述

我的问题与一个similar question/comment有关,很遗憾,它从未得到答案。

给出多个Wikipedia页面的列表,例如:

如何找出这些文章所指的实体类。即理想情况下,我希望获得更高水平的东西,例如人,电影,动物等。

到目前为止,我最好的猜测是使用SPARQL移回instance_ofsubclass树的Wikidata API。但是,这并没有产生有意义的结果。

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

实时here

如果要查看“胶片”和“哺乳动物”等标签,请i。 e。最多可以打几个,您可以按优先顺序明确列出它们,然后使用出现的第一个。

请注意,您可能会遇到以下错误:https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial#wikibase:Label_and_aggregations_bug