如何从Freebase获取维基百科文章数据建议回复

时间:2014-02-27 09:27:34

标签: javascript wikipedia freebase dbpedia

我正在寻找一种简单的方法来从用户从Freebase建议选择大学后从维基百科信息框获取有关大学(name,native_name,city等)的数据。但是,从freebase返回的数据集非常小,不幸的是不包括维基百科链接。

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

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

  • OR是否有一个类似的插件直接查询DBpedia并且是 像Freebase的简单和用户友好?

  • 或者,作为计划B,有一种方法可以发送请求 “live.dbpedia.org”这样它只会让我回到json之后 重定向?在维基百科API上,我可以发送一个“重定向”变量来执行此操作。但是我必须自己解析数据......

计划B的问题在于,没有任何保证freebase对象的名称会引导我进入正确的维基百科页面。即使在重定向后......

我发誓我已经阅读了很多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大学”后得到的结果。

我假设我无法配置Suggest小部件以返回更多数据,因此在获取对象的Freebase ID之后,我只发送另一个请求,这次使用查询专门询问Wikipedia ID。我不知道任何MQL,也找不到维基百科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”模式。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

据我所知,没有与Freebase Suggest相当的DBpedia自动提示。

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

编辑: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

答案 1 :(得分:0)

您可以更新" 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"事件"数据"变量,不要携带这些领域。

请帮帮忙..