Как отфильтровать метки викиданных в поиске концепции - PullRequest
2 голосов
/ 04 мая 2019

Я использую следующий код, чтобы получить wikidata labels для данной концепции (например, network analysis).

SELECT ?item {
    VALUES ?searchTerm { "network analysis" }
    SERVICE wikibase:mwapi {
        bd:serviceParam wikibase:api "EntitySearch".
        bd:serviceParam wikibase:endpoint "www.wikidata.org".
        bd:serviceParam wikibase:limit 3 .
        bd:serviceParam mwapi:search ?searchTerm.
        bd:serviceParam mwapi:language "en".
        ?item wikibase:apiOutputItem mwapi:item.
        ?num wikibase:apiOrdinal true.
    }
    ?item (wdt:P279|wdt:P31) ?type
}
ORDER BY ?searchTerm ?num

Возвращает следующие метки викиданных.

 wd:Q618079  --> related to electronics
 wd:Q4417999  --> related to graph theory (computer science)
 wd:Q60640547 --> related to scholary article

Я хотел бы получить wikidata labels, которые имеют отношение только к информатике (т.е. wd:Q4417999 в приведенном выше примере).

В DBpedia я запустил следующий запрос, чтобы определить, есть ли слово в computer science.

sparql.setQuery(" ASK { dbc:Network_analysis skos:broader{1,7} dbc:Computer_science } ")

Можно ли сделать то же самое в викиданных (т.е. проверить, является ли computer science предком данного понятия и возвращает только эту метку викиданных).

Если есть лучшее решение, чем поиск наследственного поиска, пожалуйста, предложите мне.

Я с удовольствием предоставлю более подробную информацию, если это необходимо.

1 Ответ

1 голос
/ 09 мая 2019

Упомянутый ниже запрос sparql решил мою проблему.

SELECT DISTINCT ?item {
VALUES ?searchTerm { "network analysis"}
SERVICE wikibase:mwapi {
    bd:serviceParam wikibase:api "EntitySearch".
    bd:serviceParam wikibase:endpoint "www.wikidata.org".
    bd:serviceParam wikibase:limit 3 .
    bd:serviceParam mwapi:search ?searchTerm.
    bd:serviceParam mwapi:language "en".
    ?item wikibase:apiOutputItem mwapi:item.
    ?num wikibase:apiOrdinal true.
}
?item (wdt:P279|wdt:P31) ?type
filter exists {?type wdt:P279*/wdt:P361* wd:Q21198}
}
ORDER BY ?searchTerm ?num
...