现在的位置: 首页 > 综合 > 正文

主题:用Python写个翻译工具

2014年07月21日 ⁄ 综合 ⁄ 共 3052字 ⁄ 字号 评论关闭

原贴:http://www.iteye.com/topic/819440

在英语词典方面,Linux环境下的软件远不及Win环境下,由于工作一般都在Linux环境下,并且希望在堆码的时候不用离开vim编辑器,于是花了一点时间写了个翻译的小工具,主要方便我在Linux环境下遇到不认识的英语单词时充当翻译小助手。这个小工具使用Python语言编写完成,其中使用到这些类库(urllib,BeautifulSoup),前者主要负责网络通讯方面,后者负责HTML的解析。这也是Python语言生态圈的强大之处,写个这样的小工具,毫不费力。
在线翻译的原理:首先根据用户输入的单词提交给百度词典,其次读取百度词典返回的数据并解析,最后将处理过的数据显示给用户。以下是该工具的具体代码(Translate.py):

Python代码  收藏代码
  1. import urllib  
  2. import codecs  
  3. from BeautifulSoup import BeautifulSoup  
  4. from sys import argv  
  5. import re,time  
  6.   
  7. class Translate:  
  8.     def Start(self):  
  9.         self._get_html_sourse()  
  10.         self._get_content("enc")  
  11.         self._remove_tag()  
  12.         self.print_result()  
  13.   
  14.     def _get_html_sourse(self):  
  15.         word=argv[1if len(argv)>1 else ''  
  16.         url="http://dict.baidu.com/s?wd=%s&tn=dict" %  word  
  17.         self.htmlsourse=unicode(urllib.urlopen(url).read(),"gb2312","ignore").encode("utf-8","ignore")  
  18.   
  19.     def _get_content(self,div_id):  
  20.         soup=BeautifulSoup("".join(self.htmlsourse))  
  21.         self.data=str(soup.find("div",{"id":div_id}))  
  22.   
  23.     def _remove_tag(self):  
  24.         soup=BeautifulSoup(self.data)  
  25.         self.outtext=''.join([element  for element in soup.recursiveChildGenerator() if isinstance(element,unicode)])  
  26.   
  27.     def print_result(self):  
  28.         for item in range(1,10):  
  29.             self.outtext=self.outtext.replace(str(item),"\n%s" % str(item))  
  30.         self.outtext=self.outtext.replace("  ","\n")  
  31.         print self.outtext  
  32.   
  33. if __name__=="__main__":  
  34.      Translate().Start()  

 

如果您的运行环境安装了BeautifulSoup类库,那么执行类似这样的命令:Python Translate.py computer,您将会看到下面这样的结果:

 

后记,目前这个小工具在输出排版方面还不太满意。

既然在Linux下面,shell脚本也是一个宝贝啊,我奉上一个短的:

Shell代码  收藏代码
  1. translate() {  
  2.     wget -qO- "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$1&langpair=${2:-en}|${3:-zh}" | sed -E -n 's/[[:alnum:]": {}]+"translatedText":"([^"]+)".*/\1/p';   
  3.     return 0;  
  4. }  

把这段函数放到你的~/.bashrc或者~/.zshrc里面,就可以这样用了:

Bash代码  收藏代码
  1. $ translate hello  
  2. 你好  
  3. $ translate hello en es  
  4. hola  
  5. $ translate "very good"  
  6. 非常好 

抱歉!评论已关闭.