【发布时间】:2021-12-10 18:30:40
【问题描述】:
所以基本上我有一个超过 300,000 行的大型 XML 文件。它看起来像这样:
<TextField>
<ID>41445</ID>
<Text>Passing over</Text>
</TextField>
<TextField>
<ID>1123</ID>
<Text>Press ESC to get back into the menu</Text>
</TextField>
我制作了一个控制台程序来使用xmlDocument 读取文件并迭代每个节点以翻译文本:
foreach (XmlNode item in nodeList)
{
if (item.SelectSingleNode("Text") != null)
{
if (!re.IsMatch(item["Text"].InnerText)) //check if text is empty or number only
item["Text"].InnerText = translate(item["Text"].InnerText, "en", "fr"); //trans from 1 to 2
}
}
基本上,翻译方法需要 0.5-1 秒才能完成,所以对于有这么多行的文件,在我的情况下,它超过 300,000,这可能需要我很长时间才能完成该文件的翻译。你有没有更好的方法来更快地做到这一点?我正在考虑将节点分成小部分,让每个线程分别完成工作。但我真的不知道该怎么做。谢谢。
【问题讨论】:
-
为什么翻译这么久?
-
@CodeCaster 好吧,我正在使用 Yandex translate api 来完成翻译工作,我需要花费大量时间来返回翻译后的文本。可能只是由于远离他们的服务器而造成的延迟。
-
你可以拆分你的xml文件并使用Task翻译那些,我认为它会是第一个......
-
据我所知,您在每次循环迭代时都请求翻译 API。这意味着应该完成许多请求响应。如何将每个
InnerText值转换为字符串列表,然后请求翻译API 将所有字符串翻译为一个文本(你好string.Join)。然后在响应时将翻译后的文本拆分为单独的字符串并设置回节点?