Posso esportare le traduzioni dei nomi dei luoghi da freebase.com
-
09-06-2019 - |
Domanda
Quindi ho guardato questo uso del freebase API e sono rimasto davvero colpito dalle traduzioni del nome che ha trovato.IE Roma, Roma, Rom, Rzym, Rooma,로마, 罗马市.Questo perché ho un database di oltre 5000 nomi di località e mi piacerebbe moltissimo tutte le traduzioni francesi, tedesche o coreane di questi nomi inglesi.
Il problema è che ho passato circa due ore a fare clic su Freebase e non sono riuscito a trovare il modo di ottenere una visualizzazione dei nomi di città/località in una lingua diversa mappata in inglese.Quindi mi piacerebbe se qualcuno che capisce cos'è Freebase e come è organizzato potesse fornirmi un collegamento a quella visione che teoricamente potrei poi esportare.
Inoltre, volevo solo condividere questa domanda perché sono totalmente impressionato da Freebase e penso che se le persone non l'hanno guardato, dovrebbero.
Soluzione
La domanda
[{
limit: 100,
type: '/location/location',
name: [{
value: null,
lang: {
name: {
value: null,
lang: '/lang/en',
},
}
}],
}];
restituisce per ogni località e per ogni lingua, il nome di quella località in quella lingua.I risultati sono organizzati per lingua.Ad esempio, ecco a molto piccolo segmento del valore restituito:
{
'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)'
},
Per una soluzione senza programmazione, copia e incolla quanto segue in un file HTML e aprilo con il tuo browser:
<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>
Naturalmente, ciò includerà solo i primi 10 risultati.Aumenta il limite sopra se vuoi di più.(A proposito, non solo Freebase è interessante, lo è anche questo linguaggio di template mjt!)
Altri suggerimenti
Il collegamento che hai pubblicato utilizza mjt, un framework javascript progettato per Freebase.
La query che utilizzano.
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
}])
Dove:qlang - è anche la lingua che desideri tradurre.qname - è la posizione da interrogare.
Per ottenere il collegamento desiderato, avrai bisogno di API, e puoi convertire la query precedente in un collegamento che restituirà un oggetto JSON contenente la stringa tradotta.