【发布时间】: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