本文介绍了SPARQL超时的维基数据模糊实体查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正试着做一个模糊的(即..部分或不区分大小写)使用SPARQL(通过在线端点)在Wikidata中查找实体标签。不幸的是,它们返回一个"QueryTimeoutException:查询截止日期已过期。"我猜想这是因为在Wikidata的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)
是否有办法在Wikidata的实体标签上执行部分字符串和/或不区分大小写的标签查找,或者我需要在下载原始数据时脱机执行此操作吗?
我希望将"Lindbergh"和"Charles Lindbergh"等标签相匹配,并在某些情况下处理不区分大小写。无论是通过SPARQL还是在Python中脱机,如果您有任何有关如何做到这一点的建议,我们都将不胜感激。
推荐答案
具体一点。三元组与事物打交道,而不是与弦打交道。例如,以下查询运行良好:
SELECT ?item WHERE {
?item wdt:P735 wd:Q2958359 .
?item rdfs:label ?label .
FILTER (CONTAINS(LCASE(STR(?label)), "lindbergh"))
}
如果不可能足够具体,则需要全文搜索功能。
- 实际上,Blazegraphsupports全文搜索使用MAGIC
bds:search
谓词,但Wikidata上未启用此功能。 - 此外,Blazegraphsupports使用MAGIC
fts:search
谓词进行外部全文搜索。当前实现仅支持Apache Solr。也许支持Wikidata中使用的ElasticSearch相对容易,但无论如何,此功能未启用。
有一个task可以以另一种Wikidata魔术服务的形式提供全文搜索,但此功能在公共终结点上仍然不可用。
作为一种解决办法,您可以在Quarry上使用SQL查询。This是我对Quarry的查询:USE wikidatawiki_p;
DESCRIBE wb_terms;
SELECT CONCAT("Q", term_entity_id) AS wikidata_id, term_language, term_text, term_search_key
FROM wb_terms
WHERE term_type = 'label' AND
term_search_key IN (LOWER('Lindbergh'), LOWER('Charles Lindbergh'));
Quarry上的查询时间限制为30分钟。
这篇关于SPARQL超时的维基数据模糊实体查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!