我正在尝试使用Sparql(通过在线端点)在Wikidata中进行模糊(即部分或不区分大小写)实体标签查找。不幸的是,这些返回“ 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)
有没有办法在Wikidata的实体标签上进行部分字符串和/或不区分大小写的标签查找,还是需要在下载原始数据时离线执行此操作?
我希望将“Lindbergh”等标签与“Charles Lindbergh”匹配,并在某些情况下处理不区分大小写。任何有关如何执行此操作的建议,无论是通过Sparql还是使用Python离线,都是值得赞赏的。
答案 0 :(得分:3)
更具体。 Triplestores可以处理事物,而不是字符串。例如,以下查询工作正常:
SELECT ?item WHERE {
?item wdt:P735 wd:Q2958359 .
?item rdfs:label ?label .
FILTER (CONTAINS(LCASE(STR(?label)), "lindbergh"))
}
如果无法充分具体,则需要全文搜索功能。
bds:search
谓词进行全文搜索,但在Wikidata上未启用此功能。fts:search
谓词进行外部全文搜索。当前实现仅支持Apache Solr。也许支持维基数据中使用的ElasticSearch相对容易,但无论如何,这个工具都没有启用。有一个task以另一种维基数据魔术服务的形式提供全文搜索,但此功能在公共端点上仍然无法使用。
作为一种解决方法,可以在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 分钟。
答案 1 :(得分:2)
如果您更改过滤器以使用“contains
”功能,则可以在线执行此操作。
示例:强>
SELECT ?item WHERE {
?item rdfs:label ?label .
FILTER( contains(lcase(?label), 'arles lin' ))
}
LIMIT 20
<强>参考:强>
contains
被列为可在SPARQL中使用的XPath函数之一。请参阅:https://www.w3.org/2009/sparql/wiki/Feature:FunctionLibrary#XQuery_1.0_and_XPath_2.0_Functions_and_Operators
示例2:(有更多三元组来优化结果)
PREFIX skos: <http://www.w3.org/2004/02/skos/core#Concept>
SELECT ?item ?label WHERE {
?item rdfs:label ?label .
?item rdf:type dbo:Person #Works with our without this too, also try skos:Category
FILTER( contains(lcase(?label), 'arles lin' ) && LANGMATCHES(LANG(?label), "en"))
}
LIMIT 20
答案 2 :(得分:0)
您现在可以使用here中所述的Wikidata魔术服务,直接从SPARQL使用MediaWiki API。
示例:
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