Wikidata API 的问题在于它没有查询接口。如果您已经知道 ID,它所做的只是返回特定数据项的信息。我们根本无法构建一个足够强大且能够扩展的查询界面。不过,有一个 SPARQL 端点的早期测试版:https ://tools.wmflabs.org/ppp-sparql/ 。
一旦启动并运行,我们希望在此基础上提供更易于使用的服务,例如 Magnus 的 WDQ http://magnusmanske.de/wordpress/?p=72。
(编辑以回答有关 API 的具体问题:)
我到处搜索,但我找不到的是一些残缺的 fetch 示例
文档可能会更好,但https://www.wikidata.org/wiki/Wikidata:Data_access是一个好的开始。另请注意,https://www.wikidata.org/w/api.php是自记录的。特别是,看看https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities和https://www.wikidata.org/w/api.php?action=help&modules=wbsearchentities
所有数据结构是否都有“类型”或某种与其含义有关的属性?
所有关于数据项的陈述都与它的含义有关。许多人都有关于“实例”(P31)或“子类”(P279)属性的声明,我想这与您想要的非常接近。
是否有所有类型的列表?
不。维基数据不使用封闭的、预定义的本体来描述世界。这是一个以机器可读的方式协作描述世界的平台;由此,出现了一个流动的本体,它从来都不是完整的或一致的。
任何数据项都可以作为另一个项的类或支持类。一个项目可以是多个类的实例或子类。关系相当复杂。
是否有针对“苹果”等具有双重含义的实体的建议功能?
有一个搜索界面可以列出给定术语的所有匹配数据项。它被称为wbsearchentities
,例如https://www.wikidata.org/w/api.php?action=wbsearchentities&search=apple&language=en(添加format=json
机器可读的 JSON)。
但是,结果中的排名非常幼稚。并且如果没有原句的语义上下文,就无法找到哪个词义。这是一个有趣的研究领域,称为“词义消歧”。
最后,如何发送文本查询并读取响应数据结构的“类型”?
目前,您必须进行两次 API 调用:一次wbsearchentities
获取您感兴趣的实体的 ID,另一次wbgetentities
获取该实体的 instance-of 语句。将其组合在一个调用中会很好;为此有一张票:https ://phabricator.wikimedia.org/T90693
至于类似 Siri 的服务:Magnus Manske 称为“wiri”的早期原型已经存在了很长时间。它使用非常简单的模式:https ://tools.wmflabs.org/magnus-toolserver/thetalkpage/
Bene* 一直在研究更高级的自然语言问答方法,请参阅鸭嘴兽演示:https ://projetpp.github.io/demo.html
就在昨天,他展示了他与 Tpt 一起开发的一个新原型,该原型可以从自然语言输入生成 SPARQL 查询:https ://tools.wmflabs.org/ppp-sparql/
所有这些项目都是开源的,并且是由热心的志愿者创建的。查看代码并与他们交谈。:)