本文介绍了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全文搜索使用MAGICbds:search谓词,但Wikidata上未启用此功能。
  • 此外,Blazegraphsupports使用MAGICfts: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超时的维基数据模糊实体查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 18:07