Apertium 翻译器。有没有办法得到原始短语
Apertium translator. Is there a way to get the original phrase
apertium 翻译器有没有办法获取翻译的原始短语?
即得到类似的东西:
phrase: {
original: { Hola, buenos días},
translated: {Hello, good morning}
}
我需要它来建立改进翻译的机制。
如果您通过命令行界面发送语料库,例如
xzcat corpus.sme.xz | sed 's/$/ ./' | apertium -f html-noent sme-nob > translated.nob.mt
那你可以简单地试试
xzcat corpus.sme.xz | paste - translated.nob.mt
之后获取输出旁边的输入。那是假设您想在换行符上拆分内容。 sed
用于确保单词不会跨换行符移动(规则往往不会跨句子边界移动)。
这会很快,但有点老套,而且有很多边缘情况。
如果您想要更多控制,一种方法是在本地安装 JSON API 并一次发送一个请求。
如果您有最近的 Debian/Ubuntu(或正在使用 apertium repos 之一),您可以使用
获得 API
sudo apt install apertium-apy
sudo systemctl start apertium-apy # start it right now
sudo systemctl enable apertium-apy # let it start on next boot
然后你可以这样翻译:
$ echo 'Jeg liker ikke ansjos' | curl --data-urlencode 'q@-' 'localhost:2737/translate?langpair=nob|nno'
{"responseDetails": null, "responseData": {"translatedText": "Eg likar ikkje ansjos"}, "responseStatus": 200}
(或来自 Javascript 的标准 ajax 请求,一些文档位于 http://wiki.apertium.org/wiki/Apertium-apy/Debian and http://wiki.apertium.org/wiki/Apertium-apy#Usage )
请注意,apertium-apy 默认为 /usr/share/apertium/modes 中的对提供服务;如果您手动启动它(而不是通过 systemctl),您可以将它指向不同的路径。
如果您想生成示例中的 JSON 格式,最简单的方法是使用 jq
(sudo apt install jq
),例如
$ orig="Jeg liker ikke ansjos"
$ echo "$orig" \
| curl -Ss --data-urlencode 'q@-' 'localhost:2737/translate?langpair=nob|nno' \
| jq "{phrase: {original:\"$orig\", translated:.responseData.translatedText }}"
{
"phrase": {
"original": "Jeg liker ikke ansjos",
"translated": "Eg likar ikkje ansjos"
}
}
或语料库:
xzcat corpus.nob.xz | while read -r orig; do
echo "$orig" \
| curl -Ss --data-urlencode 'q@-' 'localhost:2737/translate?langpair=nob|nno' \
| jq "{phrase: {original:\"$orig\", translated:.responseData.translatedText}}";
done
(对 500 行的简单测试表明这需要 23.7 秒的挂钟时间,而 paste
版本需要 5.5 秒。)
apertium 翻译器有没有办法获取翻译的原始短语?
即得到类似的东西:
phrase: {
original: { Hola, buenos días},
translated: {Hello, good morning}
}
我需要它来建立改进翻译的机制。
如果您通过命令行界面发送语料库,例如
xzcat corpus.sme.xz | sed 's/$/ ./' | apertium -f html-noent sme-nob > translated.nob.mt
那你可以简单地试试
xzcat corpus.sme.xz | paste - translated.nob.mt
之后获取输出旁边的输入。那是假设您想在换行符上拆分内容。 sed
用于确保单词不会跨换行符移动(规则往往不会跨句子边界移动)。
这会很快,但有点老套,而且有很多边缘情况。
如果您想要更多控制,一种方法是在本地安装 JSON API 并一次发送一个请求。
如果您有最近的 Debian/Ubuntu(或正在使用 apertium repos 之一),您可以使用
获得 APIsudo apt install apertium-apy
sudo systemctl start apertium-apy # start it right now
sudo systemctl enable apertium-apy # let it start on next boot
然后你可以这样翻译:
$ echo 'Jeg liker ikke ansjos' | curl --data-urlencode 'q@-' 'localhost:2737/translate?langpair=nob|nno'
{"responseDetails": null, "responseData": {"translatedText": "Eg likar ikkje ansjos"}, "responseStatus": 200}
(或来自 Javascript 的标准 ajax 请求,一些文档位于 http://wiki.apertium.org/wiki/Apertium-apy/Debian and http://wiki.apertium.org/wiki/Apertium-apy#Usage )
请注意,apertium-apy 默认为 /usr/share/apertium/modes 中的对提供服务;如果您手动启动它(而不是通过 systemctl),您可以将它指向不同的路径。
如果您想生成示例中的 JSON 格式,最简单的方法是使用 jq
(sudo apt install jq
),例如
$ orig="Jeg liker ikke ansjos"
$ echo "$orig" \
| curl -Ss --data-urlencode 'q@-' 'localhost:2737/translate?langpair=nob|nno' \
| jq "{phrase: {original:\"$orig\", translated:.responseData.translatedText }}"
{
"phrase": {
"original": "Jeg liker ikke ansjos",
"translated": "Eg likar ikkje ansjos"
}
}
或语料库:
xzcat corpus.nob.xz | while read -r orig; do
echo "$orig" \
| curl -Ss --data-urlencode 'q@-' 'localhost:2737/translate?langpair=nob|nno' \
| jq "{phrase: {original:\"$orig\", translated:.responseData.translatedText}}";
done
(对 500 行的简单测试表明这需要 23.7 秒的挂钟时间,而 paste
版本需要 5.5 秒。)