mosesserver 使用方法
转载自 http://polarlion.github.io/moses/2016/04/18/mosesserver-usage.html
原文代码在这里显示不全 感兴趣请戳 http://polarlion.github.io/moses/2016/04/18/mosesserver-usage.html !!!!
无比强大的 moses 开源翻译工具毫无意外地提供了 server 的工作模式,然而 mosesserver 的官方文档 在这里:mosesserver 官方文档完全是文字描述,没有代码,没有demo,有点反人类。(文档中确实提到有perl脚本,但是并没有在源代码里面找到T_T,不禁叫人吐槽 moses 的代码和注释质量远远超过文档),总而言之,想搞定它需要自己动手丰衣足食了。以下为介绍 mosesserver 使用方法的一个简单的 python 实践……
/**************************************** 废话分割线 *****************************************/
以下为正文,假设已经按照官方文档编译好了 moseseserver 的可执行文件
同
bin/moses
使用方法一样,执行bin/mosesserver
,执行时要比bin/moses
执行时至少多两个参数:
“-server
”和“-server-port XXXX
”,其中XXXX
就是端口号(以9999为例)。执行成功后,mosesserver 会在0.0.0.0:9999
这个地址提供server服务接下来就是客户端了,也是官方文档没有说明白的地方。看文档我们知道,mosesserver的服务是通过xmlrpc给出的,xmlrpc是一个请求格式,具体维基百科有说明 请看这里:XML-RPC
先敬上具体做法,首先是请求的数据格式:
(假设要翻译的, 经过tokenization的句子是 “你好 普拉狮”)
{% highlight pyhton %}
data = “translate\
text\
你好 普拉狮\
align\
1\
”
{% endhighlight %}
上述代码是给python解释器去阅读的版本,翻译成人类喜闻乐见的格式是下面酱婶儿的:
{% highlight xml %}
translate
text
你好 普拉狮
align
1
{% endhighlight%}
按照moses官方文档的说法,顶层的 value 节点下的数据结构 struct 可以理解为一个 map,其中 name 为 text 的 member 节点提供希望翻译的内容信息,是必须包含的,下面 name 为 align 的 member 节点表示是否需要返回对齐信息,如果值为 0 或者不包含此 member 则 server端只返回翻译结果而不包含对齐信息。
接下来补完 python 的 demo:
{% highlight python %}
import urllib2
req = urllib2.Request(“http://0.0.0.0:9999/RPC2“)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
发送请求并得到回复
response = opener.open(req, data)
res为回复的文本
res = response.read()
{% endhighlight %}
如果前面设置都没有问题,到这里我们已经得到了 mosesserver 返回的翻译结果了,在 res 中,是酱婶儿的:
{% highlight xml %}