Chinaunix

标题: 用 xmpppy 和 Google Talk bot 制作命令行翻译机器人 [打印本页]

作者: hutuworm    时间: 2008-09-15 09:41
标题: 用 xmpppy 和 Google Talk bot 制作命令行翻译机器人
用 xmpppy 和 Google Talk bot 制作命令行翻译机器人

命令行偏执狂们都喜欢用字符命令搞定一切,当然应该包括翻译在内。最近兄弟我在翻译 Django 1.0 的 zh_CN locale 文件时,颇为那一大堆国名地名所困扰。为了准确翻译,要把这些名词逐一在 PoeditPidgin(我用的是 Google Talk en2zh boten2zh@bot.talk.google.com)两个窗口之间来回反复拷贝粘贴。拷贝原文,粘贴原文,回车,拷贝译文,粘贴译文——翻译一个地名至少需要耗费五步操作,翻译两百个地名就是一千次操作,怎么不头晕呢?

于是就想到利用 xmpppy 来制作一个 en2zh 命令行工具,实现自动翻译。好在 xmpppy 已经提供了 xtalk.py 代码样例,只要略作修改即可:

     
--- xtalk.py  2006-10-06 20:30:42.000000000 +0800
+++ en2zh.py  2008-09-07 08:37:22.000000000 +0800
@@ -1,4 +1,6 @@
#!/usr/bin/python
+# en2zh.py = xtalk.py + en2zh@bot.talk.google.com
+# @Copyleft 2008 hutuworm (http://hutuworm.blogspot.com)
# $Id: xtalk.py,v 1.2 2006/10/06 12:30:42 normanr Exp $
import sys,os,xmpp,time,select

@@ -15,7 +17,8 @@
      type = event.getType()
      fromjid = event.getFrom().getStripped()
      if type in ['message', 'chat', None] and fromjid == self.remotejid:
- sys.stdout.write(event.getBody() + '\n')
+ sys.stdout.write(event.getBody().encode('utf8') + '\n' )
+  sys.exit(0)

  def stdio_message(self, message):
      m = xmpp.protocol.Message(to=self.remotejid,body=message,typ='chat')
@@ -27,22 +30,23 @@
      if not con:
          sys.stderr.write('could not connect!\n')
          return False
- sys.stderr.write('connected with %s\n'%con)
+ #sys.stderr.write('connected with %s\n'%con)
      auth=self.jabber.auth(jid.getNode(),jidparams['password'],resource=jid.getResource())
      if not auth:
          sys.stderr.write('could not authenticate!\n')
          return False
- sys.stderr.write('authenticated using %s\n'%auth)
+ #sys.stderr.write('authenticated using %s\n'%auth)
      self.register_handlers()
      return con

if __name__ == '__main__':

  if len(sys.argv) < 2:
- print "Syntax: xtalk JID"
+ print "Syntax: en2zh text"
      sys.exit(0)

- tojid=sys.argv[1]
+ tojid='en2zh@bot.talk.google.com'
+ text=sys.argv[1]

  jidparams={}
  if os.access(os.environ['HOME']+'/.xtalk',os.R_OK):
@@ -66,6 +70,8 @@
      sys.exit(1)

  #cl.SendInitPresence(requestRoster=0) # you may need to uncomment this for old server
+
+ bot.stdio_message(text)

  socketlist = {cl.Connection._sock:'xmpp',sys.stdin:'stdio'}
  online = 1


或者直接下载修改后的 en2zh.py: http://github.com/hutuworm/minitrue/tree/master/en2zh.py

然后按以下步骤设置并使用:

0. 安装 xmpppy:  $ easy_install xmpppy

1. 在 home 目录中创建 .xtalk 配置文件,设定你的 Google Talk 用户名和密码,为了安全起见,必须将该文件权限设为 0600:

$ cat .xtalk

       #Uncommentfields before use and type in correct credentials.#JID=romeo@montague.net/resource (/resource is optional)#PASSWORD=juliet
   
       JID=your-id@gmail.com
   
       PASSWORD=your-password
   
       $ chmod 0600 .xtalk        


2. 测试翻译:

$ python en2zh.py "Bosnia and Herzegovina"

波斯尼亚和黑塞哥维那


3. 自行编写任意命令代码,调用 en2zh.py 完成自动翻译工作。(注意:Google Talk en2zh bot 比较适合翻译名词、短语,翻译完毕之后无论如何一定要检查一遍。)




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2