summaryrefslogtreecommitdiff
path: root/src/www
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2014-05-15 13:58:42 +0000
committerhallgren <hallgren@chalmers.se>2014-05-15 13:58:42 +0000
commite9b5b8b09492808de625ebaa8abd8e940918d8d5 (patch)
tree81ed4880e90a6c3b59027024b0d947e80cdc82ee /src/www
parent121afca05a579def9c79536b5a3b658bc64aa0ac (diff)
Simple Translator: fall back to word-for-word translation if the parser fails
Same as in the Wide Coverage demo app.
Diffstat (limited to 'src/www')
-rw-r--r--src/www/translator/translator.css1
-rw-r--r--src/www/translator/translator.js52
2 files changed, 34 insertions, 19 deletions
diff --git a/src/www/translator/translator.css b/src/www/translator/translator.css
index 65db73261..171875c72 100644
--- a/src/www/translator/translator.css
+++ b/src/www/translator/translator.css
@@ -102,6 +102,7 @@ span.choices { color: blue; font-weight: bold; font-family: sans-serif; }
.default_quality { background-color: #ffc; background-color: rgba(255,255,0,0.20) }
.high_quality { background-color: #cfc; background-color: rgba(0,255,0,0.20); }
.low_quality { background-color: #fcc; background-color: rgba(255,0,0,0.20); }
+.bad_quality { background-color: #f88; background-color: rgba(255,0,0,0.53); }
.manual_quality { background-color: #ccf; background-color: rgba(0,0,255,0.20); }
div.overlay {
diff --git a/src/www/translator/translator.js b/src/www/translator/translator.js
index 3661257f4..4a088e66c 100644
--- a/src/www/translator/translator.js
+++ b/src/www/translator/translator.js
@@ -206,35 +206,49 @@ Translator.prototype.update_translation=function(i) {
upd3s("[Apertium does not support "+show_translation(o)+"]")
}
function update_gfrobust_translation() {
- function upd3(txts) {
- update_segment("GFRobust",txts.map(trans_text_quality))
+ function upd3(trans,sp,qf) {
+ var ts=[]
+ for(var i=0;i<trans.length;i++) {
+ var t=trans[i].linearizations[0].text
+ if(sp.punct) t=t+sp.punct
+ if(!elem(t,ts)) ts.push(t)
+ }
+ update_segment("GFRobust",ts.map(qf || trans_text_quality))
}
function upd3s(txt) {
update_segment("GFRobust",[{quality:"error",text:txt}])
}
- function upd2(trans,punct) {
+ function upd2b(trans,sp) {
+ function badq(txt) { return {quality:"bad_quality",text:txt} }
if(trans.length==0) upd3s("[no translation]")
- else if(trans[0].error!=undefined)
- upd3s("[GF robust translation problem: "+trans[0].error+"]")
- else {
- var ts=[]
- for(var i=0;i<trans.length;i++) {
- var t=trans[i].linearizations[0].text
- if(punct) t=t+punct
- if(!elem(t,ts)) ts.push(t)
- }
- //mapc(unlextext,ts,upd3)
- upd3(ts)
+ else upd3(trans,sp,badq)
+ }
+
+ // upd0b :: {txt:String,punct:String} -> ()
+ function upd0b(sp) {
+ function upd1b(translate_output) {
+ //console.log(translate_output)
+ upd2b(translate_output,sp)
}
+ gftranslate.wordforword(sp.txt,o.from,o.to,upd1b)
+ }
+
+ function upd2(trans,sp) {
+ if(trans.length==0) upd0b(sp) // upd3s("[no translation]")
+ else if(trans[0].error!=undefined)
+ //upd3s("[GF robust translation problem: "+trans[0].error+"]")
+ upd0b(sp)
+ else upd3(trans,sp)
}
- function upd0(source,punct) {
+ // upd0 :: {txt:String,punct:String} -> ()
+ function upd0(sp) {
function upd1(translate_output) {
//console.log(translate_output)
- upd2(translate_output,punct)
+ upd2(translate_output,sp)
}
- gftranslate.translate(source,o.from,o.to,0,10,upd1)
+ gftranslate.translate(sp.txt,o.from,o.to,0,10,upd1)
}
if(!window.gftranslate)
upd3s("[GF robust parser is not available]")
@@ -247,8 +261,7 @@ Translator.prototype.update_translation=function(i) {
if(!eq_options(segment.options,want)) {
//console.log("Updating "+i)
//lexgfrobust(segment.source,upd0)
- var sp=rmpunct(segment.source)
- upd0(sp.txt,sp.punct)
+ upd0(rmpunct(segment.source))
}
//else console.log("No update ",want,segment.options)
}
@@ -1224,6 +1237,7 @@ function lexgfrobust(txt,cont) {
lextext(txt,rmpunct)
}
*/
+// rmpunct :: String -> {txt:String,punct:String}
function rmpunct(txt) {
function ispunct(c) {
switch(c) {