From 8b4e13ea84e46a3153b34ba1cb464af0d4e049c2 Mon Sep 17 00:00:00 2001 From: hallgren Date: Tue, 29 Apr 2014 16:01:57 +0000 Subject: [PATCH] Wide Coverage Demo App: translate to all available target langauges at once This means that the new translation is available instantly when switching target languages. It can also reduce space leaks problems in the server somewhat by avoiding repeated parsing of the source text. --- src/www/js/gftranslate.js | 25 +++++++++++--- src/www/js/wc.js | 70 +++++++++++++++++++++++++-------------- 2 files changed, 65 insertions(+), 30 deletions(-) diff --git a/src/www/js/gftranslate.js b/src/www/js/gftranslate.js index 5bf1aaa6f..a232bde50 100644 --- a/src/www/js/gftranslate.js +++ b/src/www/js/gftranslate.js @@ -13,6 +13,12 @@ gftranslate.call=function(querystring,cont) { http_get_json(gftranslate.jsonurl+querystring,cont,errcont) } +function enc_langs(g,to) { + return Array.isArray(to) + ? to.map(function(l){return g+l}).join("+") + : g+to +} + // Translate a sentence gftranslate.translate=function(source,from,to,start,limit,cont) { var g=gftranslate.grammar @@ -22,7 +28,7 @@ gftranslate.translate=function(source,from,to,start,limit,cont) { function extract(result) { cont(result[0].translations) } if(encsrc.length<500) gftranslate.call("?command=c-translate&input="+encsrc - +lexer+"&unlexer=text&from="+g+from+"&to="+g+to + +lexer+"&unlexer=text&from="+g+from+"&to="+enc_langs(g,to) +"&start="+start+"&limit="+limit,extract) else cont([{error:"sentence too long"}]) } @@ -34,9 +40,10 @@ gftranslate.wordforword=function(source,from,to,cont) { if(from=="Chi") lexer="",source=source.split("").join(" ") var encsrc=encodeURIComponent(source) function extract(result) { cont(result[0].translations) } + var enc_to = enc_langs(g,to) if(encsrc.length<500) gftranslate.call("?command=c-wordforword&input="+encsrc - +lexer+"&unlexer=text&from="+g+from+"&to="+g+to + +lexer+"&unlexer=text&from="+g+from+"&to="+enc_to ,extract) else cont([{error:"sentence too long"}]) } @@ -77,12 +84,20 @@ function trans_text_quality(text) { return {quality:quality,text:text} } -function trans_quality(r) { - var text=r.linearizations[0].text +// find_to :: Lang -> [{to:Lang,...}] -> Int +find_to=function(to,lins) { + for(var i=0;i" @@ -73,14 +73,14 @@ wc.translate=function() { function show_pick(i) { return function() { show_trans(i); return false; } } function show_picks() { clear(p) - for(var i=0;i"+(r.tree||"") - if(wc.p /*&& rs.length>1*/) show_picks() + if(wc.p /*&& so.rs.length>1*/) show_picks() //if(f.speak.checked) wc.speak(t.text,f.to.value) } so.target.onclick=show_more function show_trans(i) { - var r=rs[i] + var r=so.rs[i] replaceChildren(so.target,text(r.text)) so.text=r.text so.target.className=r.t.quality - current_pick=i + so.current_pick=i if(wc.selected==so) show_more() } function showit2(r) { - rs.push(r) - var j=rs.length-1 - if(current_pick==j) show_trans(j) + so.rs.push(r) + var j=so.rs.length-1 + if(so.current_pick==j) show_trans(j) else if(wc.selected==so) show_picks() //disable(false) } - function showit(r) { - r.t=trans_quality(r) + function showit(r,grammar) { + r.grammar=grammar + r.t=trans_quality(r,grammar+f.to.value) r.text=r.t.text showit2(r) } function show_words(r) { - r.text=r.linearizations[0].text + var ix=find_to(gftranslate.grammar+f.to.value,r.linearizations) + r.text=r.linearizations[ix].text r.t={quality:"bad_quality",text:r.text} showit2(r) } @@ -130,17 +132,17 @@ wc.translate=function() { if(tra.length>=1) { var r=tra[0] if(r.error!=undefined) { - if(i==0 && rs.length==0) show_error(tra[0].error) + if(i==0 && so.rs.length==0) show_error(tra[0].error) } else { var r=tra[0] if(r.linearizations) show_words(r) } } - else if(i==0 && rs.length==0) + else if(i==0 && so.rs.length==0) show_error("Unable to translate") } - gftranslate.wordforword(text,f.from.value,f.to.value,step3) + gftranslate.wordforword(text,f.from.value,wc.languages || f.to.value,step3) } function trans(text,i,count) { @@ -148,7 +150,7 @@ wc.translate=function() { if(tra.length>=1) { var r=tra[0] if(r.error!=undefined) { - if(i==0 && rs.length==0) { + if(i==0 && so.rs.length==0) { //show_error(tra[0].error) word_for_word(text) } @@ -156,15 +158,15 @@ wc.translate=function() { else { for(var ti=0;ti=1) { var r=trans[0] r.prob=0 - showit(r) + showit(r,wc.cnl) } step2(text) } wc.pgf_online.translate({from:wc.cnl+f.from.value, - to:wc.cnl+f.to.value, + //to:wc.cnl+f.to.value, lexer:"text",unlexer:"text",input:text}, step3cnl, function(){step2(text)}) @@ -187,6 +189,22 @@ wc.translate=function() { else step2(so.input) } + function change_segment_to(so,to) { + var rs=so.rs + if(rs) { + for(var i=0;i