3

我正在使用 Firebase ML Kit Translate 将一些文本从日语翻译成英语。

我只是使用他们在文档中的示例代码:

func translate (input: String) {

      print(input)
      translator.translate(input) { translatedText, error in
      guard error == nil, let translatedText = translatedText else { return }

      self.output = translatedText
      print(self.output)

      return
    }

当我输入日文文本时,我注意到所有换行符都被忽略了,而英文翻译在一个文本块中。是否有启用换行符的设置或者这是一个错误?

4

1 回答 1

2

这是底层翻译引擎的已知行为,它会剔除任何非语言内容。

一般来说,在翻译中准确地保留非语言内容很难甚至不可能,因为翻译句子的语法结构可能完全不同,因此分隔符没有自然的位置。例如,如果我要将句子“I saw \n the dog”(中间有一个换行符)翻译成德语,纯句子的德语版本是“Ich habe den Hund gesehen”,谓词在句末和中间的宾语。换行符应该放在谓词之后(“Ich habe den Hund gesehen \n”)还是在宾语之前(“Ich habe \n den Hund gesehen”)?


如果文本被分成句子中的段落(或其他块),您可以分别翻译它们,然后再将它们连接起来:

List<Task<String>> tasks = new ArrayList<>();
for (String paragraph : text.split("\n\n")) {
    tasks.add(translator.translate(paragraph));
}
Task<String> resultTask = Tasks.whenAll(tasks).onSuccessTask(aVoid -> {
    List<String> results = new ArrayList<>();
    for (Task<String> task : tasks) {
        results.add(task.getResult);
    }
    return Tasks.forResult(String.join("\n\n", results));
});

或在斯威夫特:

let paragraphs = text.components(separatedBy: "\n\n")
var results = [String]()
for paragraph in paragraphs {
  translator.translate(paragraph) { result, error in
    guard let unwrappedResult = result else {
      // Handle error
      return
    }
    results.append(unwrappedResult)
    if (results.count == paragraphs.count) {
      let result = results.joined(separator: "\n\n")
      // Handle result
    }
  }
}
于 2020-06-09T09:55:20.257 回答