習題:中翻英系統

這題和 英翻中系統 有個差別,因為中文的詞彙間沒有空白,因此要查詢詞彙需要一些技巧。

由於中文詞彙通常在四個字以下,所以可以嘗試從 4 字,3 字,2 字,1 字 這樣一直查下來,查到就進行翻譯動作。

這種方法隱含了長詞優先規則。

用法範例:

$ node c2e.js 一隻狗追一隻貓

a dog chase a cat

解答 1: c2e.js

var log = console.log;

var dic = { "狗":"dog", "貓":"cat", "一隻":"a", "追":"chase", "吃":"eat" };

function mt(s) {
  var array = [];
  for (var i=0; i<s.length; i++) {
    for (var len=4; len>0; len--) {
      var str = s.substr(i, len);
      var toWord = dic[str];
      if (typeof toWord !== "undefined") {
        array.push(toWord);
        break;
      }
    }
  }
  return array;
}

var a = mt(process.argv[2]);
log(a);

上面版本會列出所有詞的翻譯,但有可能重疊,所以我又改成了下列版本:

解答 2: c2e2.js

var log = console.log;

var dic = { "狗":"dog", "貓":"cat", "一隻":"a", "追":"chase", "吃":"eat" };

function mt(s) {
  var array = [];
  for (var i=0; i<s.length; ) {
    for (var len=4; len>0; len--) {
      var str = s.substr(i, len);
      var toWord = dic[str];
      if (typeof toWord !== "undefined") {
        array.push(toWord);
        break;
      }
    }
    i=i+Math.max(1,len);
  }
  return array
}

var a = mt(process.argv[2]);
log(a);