我可以从freebase.com导出地名的翻译吗
时间:2020-03-05 18:44:43 来源:igfitidea点击:
因此,我研究了freebase API的这种用法,发现的名称的翻译给我留下了深刻的印象。 IE罗马,罗马,罗马,鲁姆,鲁玛,??,。这是因为我有一个大约5000多个位置名称的数据库,并且我非常希望这些英文名称的所有法语,德语或者韩语翻译。
问题是我花了大约两个小时在freebase上单击,无法找到以映射到英语的其他语言查看城市/位置名称的方法。因此,如果有人了解Freebase是什么以及它的组织方式,可以为我提供该视图的链接,那么从理论上讲我可以将其导出。
我也只想分享这个问题,因为我对freebase完全印象深刻,认为如果人们没有关注它,他们应该这样做。
解决方案
回答
我们发布的链接使用mjt,这是专为Freebase设计的javascript框架。
他们使用的查询。
mjt.freebase.MqlRead([{ limit: 100, id:qid, /* allow fuzzy matches in the value for more results... */ /* 'q:name': {'value~=': qname, value:null, lang: '/lang/'+qlang}, */ 'q:name': {value: qname, lang: '/lang/'+qlang}, type: '/common/topic', name: [{ value:null, lang:{ id:null, name:{ value:null, lang:'/lang/en', optional:true }, 'q:name':{ value:null, lang:'/lang/'+qlang, optional:true } } }], article: [{id:null, limit:1}], image: [{id:null, limit:1, optional:true}], creator: null, timestamp:null }])
在哪里:
qlang也是我们想要翻译的语言。
qname是要查询的位置。
要获得所需的链接,我们将需要API,并将上述查询转换为一个链接,该链接将返回包含已转换字符串的JSON对象。
回答
查询
[{ limit: 100, type: '/location/location', name: [{ value: null, lang: { name: { value: null, lang: '/lang/en', }, } }], }];
返回每个位置和每种语言的名称,以及该位置在该语言中的名称。结果是按语言组织的。例如,这是返回值的一小部分:
{ 'lang': { 'name': { 'lang': '/lang/en', 'value': 'Russian' } }, 'value': 'Сан-Франциско' }, { 'lang': { 'name': { 'lang': '/lang/en', 'value': 'Swedish' } }, 'value': 'San Francisco' }, { 'lang': { 'name': { 'lang': '/lang/en', 'value': 'Portuguese' } }, 'value': 'S?o Francisco (Califórnia)' },
对于非编程解决方案,请将以下内容复制并粘贴到HTML文件中,然后使用浏览器打开它:
<html><head> <script type="text/javascript" src="http://mjtemplate.org/dist/mjt-0.6/mjt.js"></script> </head> <body onload="mjt.run()"> <div mjt.task="q"> mjt.freebase.MqlRead([{ limit: 10, type: '/location/location', name: [{ value:null, lang:{ name:{ value:null, lang:'/lang/en', }, } }], }]) </div> <table><tr mjt.for="topic in q.result"><td> <table><tr mjt.for="(var rowi = 0; rowi < topic.name.length; rowi++)" mjt.if="rowi < topic.name.length" style="padding-left:2em"><td> <pre mjt.script=""> var name = topic.name[rowi]; </pre> ${(name.lang['q:name']||name.lang.name).value}: </td><td>$name.value</td></tr></table></td></tr></table></body></html>
当然,这将仅包括前10个结果。如果我们想要更多,请增加上述限制。 (顺便说一句,不仅Freebase很酷,这mjt模板语言也很酷!)