【问题标题】:Apertium translator. Is there a way to get the original phraseApertium 翻译器。有没有办法得到原始短语
【发布时间】:2018-05-05 06:50:16
【问题描述】:

有没有办法在 apertium 翻译器中获取翻译的原始短语?

I.E.得到类似的东西:

phrase: {
  original: { Hola, buenos días},
  translated: {Hello, good morning}
}

我需要它来建立一种改进翻译的机制。

【问题讨论】:

    标签: nlp translation translate apertium


    【解决方案1】:

    如果您通过命令行界面发送语料库,例如

    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}
    

    (或来自带有标准 ajax 请求的 Javascript,http://wiki.apertium.org/wiki/Apertium-apy/Debianhttp://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 秒。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多