使用 Sparql 在 Wikidata 中模糊实体查询超时

biv*_*ac0 4 sparql wikidata

我正在尝试使用 Sparql (通过在线端点)在维基数据中进行模糊(即部分或不区分大小写)实体标签查找。不幸的是,这些返回一个“ QueryTimeoutException:查询截止日期已过期。 ”我假设这是因为查询返回太多结果,无法在维基数据的 1 分钟超时中运行过滤器。

具体查询如下:

def findByFuzzyLabel(self, item_label):
    qstring = '''
        SELECT ?item WHERE {
            ?item rdfs:label ?label .
            FILTER( lcase(str(?label)) = "%s")
        }
        LIMIT 20
        ''' % (item_label)
    results = self.query(qstring)
Run Code Online (Sandbox Code Playgroud)

有没有办法在维基数据的实体标签上进行部分字符串和/或不区分大小写的标签查找,或者我需要在下载原始数据时离线执行此操作?

我希望将“Lindbergh”等标签与“Charles Lindbergh”相匹配,并在某些情况下处理不区分大小写的问题。任何关于如何做到这一点的建议,无论是通过 Sparql 还是在 Python 中离线,都值得赞赏。

mhh*_*ham 5

您现在可以直接从 SPARQL 使用 MediaWiki API,使用此处记录的 Wikidata 魔法服务。

例子 :

SELECT * WHERE {
  SERVICE wikibase:mwapi {
      bd:serviceParam wikibase:api "EntitySearch" .
      bd:serviceParam wikibase:endpoint "www.wikidata.org" .
      bd:serviceParam mwapi:search "cheese" .
      bd:serviceParam mwapi:language "en" .
      ?item wikibase:apiOutputItem mwapi:item .
      ?num wikibase:apiOrdinal true .
  }
  ?item (wdt:P279|wdt:P31) ?type
} ORDER BY ASC(?num) LIMIT 20
Run Code Online (Sandbox Code Playgroud)