Wikipedia 페이지의 엔티티 식별

Aug 18 2020

내 질문은 유감스럽게도 답변을받지 못한 유사한 질문 / 의견과 관련이 있습니다.

여러 Wikipedia 페이지 목록이 주어지면 예를 들면 다음과 같습니다.

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

이 기사가 참조하는 엔티티 유형을 어떻게 알 수 있습니까 ? 즉, 이상적으로는 사람, 영화, 동물 등과 같은 더 높은 수준의 무언가를 원합니다.

지금까지 내 추측으로는 instance_of또는 subclass트리 로 돌아 가기 위해 SPARQL을 사용하는 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.하지만 나중에 더 큰 목록에서 의미있는 그룹을 만들고 나중에 빈도를 계산하기에는 너무 세분화되어 있습니다. 누구든지 더 일반적인 엔티티 범주를 얻는 방법에 대한 힌트 / 아이디어가 있습니까? 아마도 미디어 위키 API에서?

모든 입력을 높이 평가할 것입니다!

답변

1 MatthiasWinkelmann Aug 18 2020 at 09:18

세 가지 가능성이 나란히 있습니다.

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