我如何利用维基数据来构建类似 Siri 的服务?

How can I harnest Wikidata to build a Siri-like service?

我想讨论这个类似 Siri 的服务的第一部分。

理想情况下,我希望能够查询以下内容:

  1. "the social network"
  2. "beethoven"
  3. "bad blood taylor swift"

得到这样的结果:

{type:"film"}

{type:"composer"}

{type:"song"}

我不关心其他任何事情,我发现描述、图像和一般信息在维基百科之外毫无用处。 我将维基数据视为一种元数据服务,可为我提供所搜索文本的语义。

是否所有数据结构都具有 "types" 或某种与其含义相关的 属性?是否有所有类型的列表?对于像 "apple" 这样具有双重含义的实体,是否有建议功能?最后,如何发送文本查询并读取响应数据结构的"type"?

我知道我没有提供任何代码,但我真的无法理解 Wikidata 的 API。我到处搜索,我找不到的只是一些残缺不全的获取示例和搞砸了 Objective-C HTML 解析器。由于一些我不明白的错误,我什至无法让他们的 "example query" 页面正常工作。

真是新手不友好,满脑子术语。

维基数据API的问题在于它没有查询界面。如果您已经知道 ID,它所做的只是特定数据项的 return 信息。我们根本无法构建足够强大且能够扩展的查询界面。不过有一个 SPARQL 端点的早期测试版:https://tools.wmflabs.org/ppp-sparql/.

一旦启动 运行,我们希望在此基础上提供更易于使用的服务,例如 Magnus 的 WDQ http://magnusmanske.de/wordpress/?p=72


(编辑以回答有关 API 的具体问题:)

I've searched everywhere and all I can't find are some crippled fetch examples

文档可能会更好,但是 https://www.wikidata.org/wiki/Wikidata:Data_access is a good start. Also note that https://www.wikidata.org/w/api.php is self-documenting. In particular, have a look at https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities and https://www.wikidata.org/w/api.php?action=help&modules=wbsearchentities

Do all data structures have "types" or some kind of a property that has to do with its meaning?

关于数据项的所有陈述都与它的含义有关。许多人都有关于 "instance of" (P31) 或 "subclass of" (P279) 属性 的声明,我想这与您想要的非常接近。

Is there a list of all the types?

没有。维基数据不使用封闭的、预定义的 ontology 来描述世界。它是一个以机器可读的方式协作描述世界的平台;由此,出现了一种流动性 ontology,它永远不会完全或一致。

任何数据项都可以作为另一个数据项的 class 或 suprt-class。一个项目可以是多个 class 的实例或子 class。关系相当复杂。

Is there a suggestions feature for entities that have double meaning like "apple"?

有一个搜索界面可以列出给定术语的所有匹配数据项。它被称为 wbsearchentities,例如 https://www.wikidata.org/w/api.php?action=wbsearchentities&search=apple&language=en(添加 format=json 机器可读 JSON)。

然而,结果中的排名非常幼稚。并且如果没有原始句子的语义上下文,就无法找到所指的词义。这是一个有趣的研究领域,称为 "word sense disambiguation"。

Finally, how can I send a text query and read the "type" of the response data structure?

目前,您必须进行两次 API 调用:一次调用 wbsearchentities 以获取您感兴趣的实体的 ID,一次调用 wbgetentities获取该实体的 instance-of 语句。将它合并到一个调用中会很好;有一个开放的票:https://phabricator.wikimedia.org/T90693


至于类似 Siri 的服务:Magnus Manske 称为 "wiri" 的早期原型已经存在了很长时间。它使用非常简单的模式:https://tools.wmflabs.org/magnus-toolserver/thetalkpage/

Bene* 一直在研究更高级的自然语言问答方法,请参阅 Platypus 演示:https://projetpp.github.io/demo.html

就在昨天,他展示了他与 Tpt 一起开发的新原型,该原型从自然语言输入生成 SPARQL 查询:https://tools.wmflabs.org/ppp-sparql/

所有这些项目都是开源的,由热情的志愿者创建。查看代码并与他们交谈。 :)