【问题标题】:How to get Wikipedia article data from Freebase suggest response如何从 Freebase 获取 Wikipedia 文章数据建议响应
【发布时间】:2014-02-27 09:27:33
【问题描述】:

在用户从 Freebase 建议中选择一所大学后,我正在寻找一种简单的方法来从 Wikipedia 信息框中获取有关大学的数据(名称、本地名称、城市等)。然而,从 freebase 返回的数据集非常小,不幸的是不包括维基百科链接。

目前我正在使用“名称”属性并向http://live.dbpedia.org/data/"+name+".json 发出ajax 请求。这通常有效,但在进行一些测试时发现名称并不总是直接映射到正确的页面。让我把我的问题分成几个来说明自己:

  • 是否可以配置 Freebase 建议插件,以便 回复包括维基百科链接?

  • 或者是否有类似的插件可以直接查询 DBpedia 并且是 和 Freebase 一样简单易用?

  • 或者,作为 B 计划,有没有办法向 “live.dbpedia.org”,这样它只会在之后返回我的 json 重定向?在 Wikipedia API 上,我可以发送一个“重定向”变量来执行此操作。但是我必须自己解析数据……

B 计划的问题在于,没有任何东西可以保证 freebase 对象的名称会引导我进入正确的 Wikipedia 页面。即使在重定向之后……

我发誓我已经阅读了很多 API 文档,但一切都非常混乱,我选择不阅读关于 RDF、SPARQL 和 MQL 的长篇教程,因为我真的认为解决方案不应该如此复杂。我在这里问是因为我真的希望我错过了一个简单的解决方案……

更新

{
  id: "/en/babes-bolyai_university",
  lang: "en",
  mid: "/m/08c4bf",
  name: "Babeş-Bolyai University",
  notable: {
    id: "/education/university",
    name: "College/University"
  },
  score: 37.733559
}

这是我在建议小部件中选择“Babeş-Bolyai University”后得到的结果。

解决方案

我假设我无法配置 Suggest 小部件以返回更多数据,因此在获得对象的 Freebase ID 后,我只是发送另一个请求,这次是专门询问 Wikipedia ID 的查询。我不知道任何 MQL,也找不到带有 Wikipedia ID 的 Freebase 字段的名称。也许我很愚蠢,但 Freebase 文档确实让我感到困惑。无论如何,Tom Morris 的回答和 this question 帮助我构建了返回我想要的查询:

https://www.googleapis.com/freebase/v1/mqlread?query={"id":"/en/babes-bolyai_university","key":{"namespace":"/wikipedia/en_title","value":null}}

结果中的字符串带有特殊 unicode 字符的数字代码(在我的情况下为 Babe$0219-Bolyai_University)。我已经能够使用String.fromCharCode(parseInt(219, 16)) 转换代码,但如果有人知道转换整个字符串的方法会很有帮助。否则,我可以制作自己的函数,用相应的字符替换“$dddd”模式。

感谢您的帮助!

【问题讨论】:

  • 对于我们这些不太熟悉 Freebase 的人,您能否了解您从 Freebase 获得的数据(例如,包含您提到的 name)?
  • 我没怎么用过Freebase,但是在浏览一些数据时,例如freebase.com/m/09rgp,我看到有一个“主题等效网页”属性,它的一些值是维基百科链接。是否可以从 http://en.wikipedia.org/wiki/Road_bicycle 中提取 Road_bicycle 并使用它而不是 name 属性?
  • 如果您提供一个 Freebase 主题的示例以及您无法获得的属性/信息框值,将会很有帮助。这将有助于为讨论奠定基础。

标签: javascript wikipedia freebase dbpedia


【解决方案1】:

据我所知,没有可与 Freebase Suggest 相媲美的 DBpedia 自动建议。

使用 output 参数中的 MQL 表达式,可以使用 Suggest 检索 Freebase 中的任何内容。对于简单的事情,例如名称、别名,MQL 基本上只是一个包含相关属性名称的 JSON sn-p。

编辑:output 参数实际上似乎没有记录在 Suggest 的上下文中,但是任何不是 Suggest 参数的东西都会透明地传递给 Freebase Search API,因此您可以使用所有此处描述的内容:https://developers.google.com/freebase/v1/search-output 您可以获得与每个建议一起返回的所需信息。

如果您确实需要查询 DBpedia,您应该使用 Wikipedia/DBpedia 键,这不一定与名称相同。对于英文维基百科,密钥位于命名空间/wikipedia/en 中,或者如果您想要命名空间`/wikipedia/en_id' 中的数字维基百科ID。如果您想查询其他语言的维基百科,请将“en”替换为适当的语言代码。这些键有一些非 ASCII 字符转义,所以如果您需要对它们进行转义,可以使用此处的文档:http://wiki.freebase.com/wiki/MQL_key_escaping

【讨论】:

  • 我知道信息在 Freebase 上,只是不在建议小部件返回的对象中。我想知道是否可以将小部件配置为返回更多信息,这样我就不必只为 Wikipedia id 发出另一个请求,但我想这是一个愚蠢的当务之急,因为我可能会在每个 keyup 事件上发送请求无论如何,建议小部件的输入字段。一个额外的查询不应该造成任何伤害:)
  • 无需额外查询。我已经修改了我的答案,以更多地关注从 Freebase 检索信息,因为我知道这是您想要做的。我还添加了一个指向如何处理密钥转义的文档的链接。
  • 我将输出参数添加到我的查询 (&output=(/wikipedia/en_title)) 但我得到了"error evaluating 'output' parameter: Property not found: /wikipedia/en_title"
  • 那是因为它是一个命名空间,而不是一个属性。属性名称(来自记忆,所以仔细检查)是/type/object/key
【解决方案2】:

您可以更新“flyout_service_path”参数。在 freebase 建议文档 (https://developers.google.com/freebase/v1/suggest) 中有说明。我正在使用此配置来获取实体的所有键。

 $(inputClass).suggest(
            {
                "key" : _FREEBASE_API_KEY_BROWSER_APP,
                "flyout_service_path":"/search?filter=(all mid:${id})&output=(notable:/client/summary description type /type/object/key)&key=${key}"
            }
        ).bind("fb-select", this.fbSelectedHandler);

在 freebase 响应中,我现在可以在“输出”参数中看到“/type/object/key”以及实体的所有键(维基百科等)。

我现在的问题是如何从输出中获取这些数据?在“fb-select”事件中的“data”变量,不要携带这个字段。

请帮忙..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多