`
jeffreydan
  • 浏览: 27130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用Python写个翻译工具

阅读更多

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

import urllib
import codecs
from BeautifulSoup import BeautifulSoup
from sys import argv
import re,time

class Translate:
    def Start(self):
        self._get_html_sourse()
        self._get_content("enc")
        self._remove_tag()
        self.print_result()

    def _get_html_sourse(self):
        word=argv[1] if len(argv)>1 else ''
        url="http://dict.baidu.com/s?wd=%s&tn=dict" %  word
        self.htmlsourse=unicode(urllib.urlopen(url).read(),"gb2312","ignore").encode("utf-8","ignore")

    def _get_content(self,div_id):
        soup=BeautifulSoup("".join(self.htmlsourse))
        self.data=str(soup.find("div",{"id":div_id}))

    def _remove_tag(self):
        soup=BeautifulSoup(self.data)
        self.outtext=''.join([element  for element in soup.recursiveChildGenerator() if isinstance(element,unicode)])

    def print_result(self):
        for item in range(1,10):
            self.outtext=self.outtext.replace(str(item),"\n%s" % str(item))
        self.outtext=self.outtext.replace("  ","\n")
        print self.outtext

if __name__=="__main__":
     Translate().Start()

 

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

 

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

  • 大小: 29.5 KB
分享到:
评论
25 楼 iljuly 2010-12-23  
这个sh的脚本放在机器里用了,不错不错!这样我手机上就要装翻译软件了,用putty连到服务器上,查询一下。
24 楼 xdsnet 2010-12-08  
真的很强大,特别是sh版本,不过有这么一些问题:
1.在debian下sh版本中sed -E 需要变成 sed -r
2.在~/.bashrc 等中添加为函数不如在/bin 中添加一个脚本,因为/bin 中的脚本是可以在vim等环境中自动搜索到,也能执行的,而 ~/.bashrc 中的函数是不能执行的。
3.建议在函数return 0;之前添加一行 echo ""; 这样可以更好的展示结果。
4.如果需要翻译多个词/句子,需要用引号括起来,否则环境会解析为其他参数而不是你所想要的!
23 楼 qwe_rt 2010-12-01  
引用
我的问题是,${3:-zh}这是什么意思?

功能:获取第三个参数,如果没有第三个参数,则取后面的默认值"zh"
比如 :
translate hello en fr  

则${3:-zh}  == fr
translate hello   

则${3:-zh}  == zh
22 楼 伊落丹 2010-12-01  
Kensai 写道
我觉得把python默认方法命名规范的_ 和__ 看着我很蛋疼,为啥不加个关键字捏。


lz的一些函数为什么也要加_开头呢?不解。
21 楼 伊落丹 2010-12-01  
qwe_rt 写道
trace 写道
既然在Linux下面,shell脚本也是一个宝贝啊,我奉上一个短的:
translate() {
	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'; 
	return 0;
}

把这段函数放到你的~/.bashrc或者~/.zshrc里面,就可以这样用了:
$ translate hello
你好
$ translate hello en es
hola
$ translate "very good"
非常好



狂赞,wget + sed 太强了。
Hi ,
能指导一下 wget 的参数选项 -q0- 表示什么?
sed 的 -E 参数是么意思?


我的问题是,${3:-zh}这是什么意思?
20 楼 qwe_rt 2010-12-01  
trace 写道
Without -q:
$ wget http://www.iteye.com
--2010-11-30 13:30:20--  http://www.iteye.com/
Resolving www.iteye.com... 61.151.241.121
Connecting to www.iteye.com|61.151.241.121|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2095 (2.0K) [text/html]
Saving to: `index.html.2'

100%[==================================================================================================================>] 2,095       --.-K/s   in 0.001s  

2010-11-30 13:30:20 (1.51 MB/s) - `index.html' saved [2095/2095]


With -q:
wget -q http://www.iteye.com
# Nothing output
膜拜trace
19 楼 trace 2010-11-30  
Without -q:
$ wget http://www.iteye.com
--2010-11-30 13:30:20--  http://www.iteye.com/
Resolving www.iteye.com... 61.151.241.121
Connecting to www.iteye.com|61.151.241.121|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2095 (2.0K) [text/html]
Saving to: `index.html.2'

100%[==================================================================================================================>] 2,095       --.-K/s   in 0.001s  

2010-11-30 13:30:20 (1.51 MB/s) - `index.html' saved [2095/2095]


With -q:
wget -q http://www.iteye.com
# Nothing output
18 楼 qwe_rt 2010-11-30  
trace 写道


wget:
-q表示关闭请求过程中的状态输出,只显示响应的内容。
-O - 表示把响应的内容写到stdout,而不是文件,如果用 -O mfile.html 就表示保存到文件myfile.html
一般上面两个参数会合起来写成-qO-

sed:
-E选项表示使用扩展的正则表达式。bash原生的正则表达式语法规则比较少。下面的命令就可以看出来。
$ echo "nice to meet you" | grep "me{1,2}t"
# 没有输出,表示没匹配到
$ echo "nice to meet you" | grep -E "me{1,2}t"
nice to meet you  # 有输出,表示找到了匹配

在translate函数里面,如果不加-E,正则表达式里的\1就不能被解析。

引用
The documents will not be written to the appropriate files, but all
           will be concatenated together and written to file.  If - is used as
           file, documents will be printed to standard output, disabling link
           conversion.  (Use ./- to print to a file literally named -.)

看了下man手册,的确哈,但是对于参数-q 文档说的不详细了。
引用
-q
       --quiet
           Turn off Wget's output.

不懂Wget's output 是神马。
17 楼 leefangzhao 2010-11-29  
强制缩进是合宜的,要不代码怎能条理分明呢
16 楼 jefflee 2010-11-28  
lz的ubuntu用的是什么中文字体?
15 楼 trace 2010-11-28  
qwe_rt 写道
trace 写道
既然在Linux下面,shell脚本也是一个宝贝啊,我奉上一个短的:
translate() {
	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'; 
	return 0;
}

把这段函数放到你的~/.bashrc或者~/.zshrc里面,就可以这样用了:
$ translate hello
你好
$ translate hello en es
hola
$ translate "very good"
非常好



狂赞,wget + sed 太强了。
Hi ,
能指导一下 wget 的参数选项 -q0- 表示什么?
sed 的 -E 参数是么意思?


wget:
-q表示关闭请求过程中的状态输出,只显示响应的内容。
-O - 表示把响应的内容写到stdout,而不是文件,如果用 -O mfile.html 就表示保存到文件myfile.html
一般上面两个参数会合起来写成-qO-

sed:
-E选项表示使用扩展的正则表达式。bash原生的正则表达式语法规则比较少。下面的命令就可以看出来。
$ echo "nice to meet you" | grep "me{1,2}t"
# 没有输出,表示没匹配到
$ echo "nice to meet you" | grep -E "me{1,2}t"
nice to meet you  # 有输出,表示找到了匹配

在translate函数里面,如果不加-E,正则表达式里的\1就不能被解析。
14 楼 finux 2010-11-28  
trace 写道
既然在Linux下面,shell脚本也是一个宝贝啊,我奉上一个短的:
translate() {
	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'; 
	return 0;
}

把这段函数放到你的~/.bashrc或者~/.zshrc里面,就可以这样用了:
$ translate hello
你好
$ translate hello en es
hola
$ translate "very good"
非常好



这个灰常好~
13 楼 duka 2010-11-27  
难道其它的语言就不缩进了?
12 楼 qwe_rt 2010-11-27  
loovle 写道
老运行不成功,需要安装些什么?

bash的那个程序不需安装任何东西的 ,python翻译程序是需要安装库的。

/usr/lib/python2.6/urllib.py已经有了,
BeautifulSoup这个库需要安装。
下载tar包后解压,到BeautifulSoup-*.*目录下,执行如下命令安装,
python setup.py install 

11 楼 loovle 2010-11-27  
老运行不成功,需要安装些什么?
10 楼 qwe_rt 2010-11-27  
#!/bin/bash
        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';
echo  -e ""

保存为ts文件,放在/usr/bin/目录下,在命令行直接ts hello 

9 楼 qwe_rt 2010-11-26  
trace 写道
既然在Linux下面,shell脚本也是一个宝贝啊,我奉上一个短的:
translate() {
	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'; 
	return 0;
}

把这段函数放到你的~/.bashrc或者~/.zshrc里面,就可以这样用了:
$ translate hello
你好
$ translate hello en es
hola
$ translate "very good"
非常好



狂赞,wget + sed 太强了。
Hi ,
能指导一下 wget 的参数选项 -q0- 表示什么?
sed 的 -E 参数是么意思?
8 楼 trace 2010-11-26  
既然在Linux下面,shell脚本也是一个宝贝啊,我奉上一个短的:
translate() {
	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'; 
	return 0;
}

把这段函数放到你的~/.bashrc或者~/.zshrc里面,就可以这样用了:
$ translate hello
你好
$ translate hello en es
hola
$ translate "very good"
非常好


7 楼 HEXLee 2010-11-26  
学习了,最近也在学python
6 楼 jssay 2010-11-26  
楼主的分享精神值得鼓励!

相关推荐

    python离线翻译器.zip

    这极大地方便了非开发人员的使用,他们无需了解Python编程或管理依赖关系,只需双击即可启动翻译工具。这种封装技术可能是通过PyInstaller或类似工具实现的,它可以将Python应用程序打包成独立的可执行文件,兼容...

    python写的翻译软件源代码

    综合以上内容,这个Python翻译软件源代码项目涵盖了以下几个主要知识点: 1. Python编程基础:语法、数据结构、函数和类等。 2. PyQt5 GUI编程:窗口、控件、事件处理和布局管理。 3. API接口调用:请求发送、响应...

    python学习帮助翻译工具

    可以查看某个模块的一些信息,遇到__doc__还会从网络上获取翻译,使用的是google翻译,虽然有时不太准确,但是遇到生单词的话也能猜测到意思。 使用方法,比如 ./get_...第一次使用python写的程序,bug在所难免,见谅。

    基于Gradio的Python风格化翻译工具openai-translator-v3设计源码

    该项目为基于Gradio的Python风格化翻译工具openai-translator-v3的设计源码,共包含47个文件,涵盖17个Python源代码文件、14个Python编译文件、3个Markdown文件、3个PDF文件、2个PNG图片文件、2个Jupyter Notebook...

    python图形化翻译工具

    python写的图形化有道翻译小工具

    python编程-翻译工具

    在Python编程中,翻译工具是十分重要的辅助手段,它们能够帮助开发者轻松地处理多语言环境下的文本内容。本文将深入探讨Python中实现翻译的方法、常用的库以及如何利用这些工具进行实际应用。 首先,Python中最著名...

    Python-一个用来翻译英文pdf论文的小工具

    【Python-一个用来翻译英文PDF论文的小工具】 Python是一种强大的编程语言,因其简洁的语法和丰富的库支持,常被用于各种任务,包括自动化、数据处理和文本分析等。在这个特定的场景中,我们讨论的是一个Python小...

    python3还是python2翻译

    在选择Python版本时,开发者往往会面临一个基本的问题:是使用Python 2还是Python 3?这个问题在Python社区中一直存在,尤其是在Python 3发布之后。Python 3相较于Python 2在多个方面进行了改进,以解决Python 2存在...

    python小项目实战:用python 制作mini翻译器 源码

    语言学习者:希望有一个快速翻译工具来辅助学习。 开发者:对集成API和使用第三方库感兴趣的个人。 使用场景及目标 学习目的:作为学习Python编程和API集成的实践案例。 语言翻译:为用户提供一个快速翻译不同语言...

    Python实现自动翻译

    对于非英语母语的人来说,阅读英文文档时常常会遇到障碍,尤其是当文档篇幅较长时,逐句逐段地使用在线翻译工具不仅耗时费力,而且效率低下。因此,开发一种能够自动翻译文档的技术变得尤为重要。 #### 需求分析 ...

    python优化算法工具包-整理一份可以让Python变得更快的工具清单,排序算法数据结构 最快的排序算法

    Pyrex、Cython、Numba和Shedskin是四个可以帮助开发者将Python代码翻译为C、C++和LLVM的代码的工具。这些工具可以帮助开发者实现快速的代码执行,提高代码的执行速度。 9. SWIG、F2PY和Boost.Python SWIG、F2PY和...

    Python-自动翻译论文pdf生成带翻译段落的文本文档txt

    同时,它也为其他Python开发者提供了一个示例,展示如何结合不同的工具和技术来解决实际问题。 需要注意的是,由于不同的PDF排版和翻译API的差异,实际效果可能因文档而异。可能需要根据具体需求调整代码,例如处理...

    translate_PDF翻译_PDF翻译、python_pdfTranslate_

    标题“translate_PDF翻译_PDF翻译、python_pdfTranslate_”表明这是一个使用Python编程语言实现的PDF翻译工具,可能基于一个名为pdfTranslate的库或者模块。Python因其强大的文本处理能力,常被用于处理PDF文件。这...

    python国际化编译工具

    接着,使用`xgettext`命令(通常在`gettext`工具包中)提取这些字符串到`.pot`文件,这是一个模板文件,包含了所有待翻译的字符串。然后,针对每种目标语言,你可以将`.pot`文件转换为`.po`文件,并进行翻译工作。 ...

    Python英文字幕截屏弹窗式翻译器

    总的来说,"Python英文字幕截屏弹窗式翻译器"是一个集成了Python GUI开发、图像处理、OCR识别和在线翻译技术的实用工具,展现了Python在跨领域开发中的强大能力。对于想要学习Python GUI编程或有兴趣了解图像处理和...

    Python-翻译PDF英文通过Python调取第三方库及接口进行翻译PDF文件

    接下来,我们需要编写Python代码来读取PDF文件,提取其中的文本,并使用`googletrans`进行翻译。以下是一个简单的示例: ```python from googletrans import Translator import PyPDF2 def translate_pdf(pdf_file)...

    Python-Translator命令行聚合翻译工具支持谷歌必应有道百度词霸360

    总结,Python-Translator是一款功能丰富的命令行翻译工具,它结合了多个知名翻译平台,为用户提供了一个统一的接口。通过学习和使用这个工具,不仅可以方便日常翻译需求,也能深入了解Python命令行工具的开发和API的...

    python+flask+百度翻译api实现在线翻译

    为了测试翻译功能,你可以创建一个简单的HTML页面或使用Postman等工具发送POST请求到`http://localhost:5000/translate`,传入相应的参数。例如,发送以下JSON数据: ```json { "text": "Hello, world!", "from_...

    Python-Python英文翻译成中文文档集合

    这个压缩包文件名为"python-doc-master",显然包含了Python官方文档的中文翻译版本,这对于初学者和经验丰富的开发者来说都是极其宝贵的资源。Python的文档非常详尽,涵盖了语言的所有方面,从基础语法到高级特性和...

Global site tag (gtag.js) - Google Analytics