%% Cultural Translation Tool Simplified %% ?- cttsimplified("en","fr","The second variable is equal to the first variable with one added.",[["en","fr","The second variable is equal to the first variable with one added.","La deuxième variable est égale à la première variable avec un ajouté."],["en","fr","The second variable is equal to the first variable plus one.","La deuxième variable est égale à la première variable plus un."],["fr","en","La deuxième variable est égale à la première variable avec un ajouté.","The second variable is equal to the first variable with an added."],["fr","en","La deuxième variable est égale à la première variable plus un.","The second variable is equal to the first variable plus one."]],[["The second variable is equal to the first variable with one added.","The second variable is equal to the first variable plus one."]],Original,Translation,BackTranslation). %%Original = BackTranslation, BackTranslation = "The second variable is equal to the first variable plus one.", %%Translation = "La deuxième variable est égale à la première variable plus un.". %% ?- cttsimplified("en","fr","The second variable is equal to the first variable plus one.",[["en","fr","The second variable is equal to the first variable with one added.","La deuxième variable est égale à la première variable avec un ajouté."],["en","fr","The second variable is equal to the first variable plus one.","La deuxième variable est égale à la première variable plus un."],["fr","en","La deuxième variable est égale à la première variable avec un ajouté.","The second variable is equal to the first variable with an added."],["fr","en","La deuxième variable est égale à la première variable plus un.","The second variable is equal to the first variable plus one."]],[["The second variable is equal to the first variable with one added.","The second variable is equal to the first variable plus one."]],Original,Translation,BackTranslation). %%Original = BackTranslation, BackTranslation = "The second variable is equal to the first variable plus one.", %%Translation = "La deuxième variable est égale à la première variable plus un.". cttsimplified(FromLang,ToLang,Original1,TranslationDictionary, Simplifications,Original2,Translation2, BackTranslation2) :- translate(TranslationDictionary,FromLang,ToLang,Original1, Translation1), translate(TranslationDictionary,ToLang,FromLang, Translation1,BackTranslation1), (same_meaning(Original1,BackTranslation1)-> (Original1=Original2, Translation2=Translation1, BackTranslation2=BackTranslation1); simplify(Simplifications,Original1,Original3), cttsimplified(FromLang,ToLang,Original3, TranslationDictionary,Simplifications,Original2, Translation2,BackTranslation2)). translate(TranslationDictionary,FromLang,ToLang,Original, Translation) :- member([FromLang,ToLang,Original,Translation], TranslationDictionary). same_meaning(Sentence,Sentence) :- !. same_meaning(Sentence1,Sentence2) :- same_meaning(List), member(Sentence1,List), member(Sentence2,List). same_meaning([]). simplify(Simplifications,Original1,Original2) :- member([Original1,Original2],Simplifications). %% Checks translation %% translation_means_backtranslation("I measured the dimensions of the object","我 测 量 了 伙 伴 的 尺 寸。",[["我","I"],["测","measurement"],["量","amount"],["了","up"],["伙","partner"],["伴","accompany"],["的","of"],["尺","ruler"],["寸","inch"]],Result). %% [[[测,/,measurement, is not in original.]],[[量,/,amount, is not in original.]],[[了,/,up, is not in original.]],[[伙,/,partner, is not in original.]],[[伴,/,accompany, is not in original.]],[[尺,/,ruler, is not in original.]],[[寸,/,inch, is not in original.]]] translation_means_backtranslation(BackTranslation1,Translation1,TranslationPairs,Result) :- SepandPad="”“‘’`$?-+*^,().:;=_/[]<>{}\s\t\\\"!'0123456789。", split_string(BackTranslation1,SepandPad, SepandPad,BackTranslationWords), split_string(Translation1,SepandPad, SepandPad,TranslationWords1), translate(TranslationPairs,TranslationWords1,[], TranslationWords2), findall([[Foreign,"/",Local," is not in original."]], (member([Foreign,Local],TranslationWords2), subtract([Local],BackTranslationWords,Left),not(Left=[])),List1), (List1=[]->Result="No errors.";Result=List1). translate(_TranslationPairs,[],TranslationWords, TranslationWords) :- !. translate(TranslationPairs,TranslationWords1, TranslationWords2,TranslationWords3) :- TranslationWords1=[TranslationWord4|TranslationWords5], member([TranslationWord4,TranslationWord6], TranslationPairs), append(TranslationWords2,[[TranslationWord4, TranslationWord6]],TranslationWords7), translate(TranslationPairs,TranslationWords5, TranslationWords7,TranslationWords3).