如何在不丢失换行符的情况下翻译文本?



我正在使用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
}

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

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

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


如果文本沿着句子分成段落(或其他块(,您可以分别翻译每个段落,然后再次连接它们:

List<Task<String>> tasks = new ArrayList<>();
for (String paragraph : text.split("nn")) {
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("nn", results));
});

或在 Swift 中:

let paragraphs = text.components(separatedBy: "nn")
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: "nn")
// Handle result
}
}
}

相关内容

最新更新