前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python做一个划词翻译软件

用python做一个划词翻译软件

作者头像
sjw1998
发布2019-10-11 12:14:58
2.2K0
发布2019-10-11 12:14:58
举报
文章被收录于专栏:孤独的S孤独的S

在我们学习的时候,在我们查找文档的时候,很多内容都是英文的,如果你的英文不好,就很难去阅读这篇文章,语言不通是我们学习的最大的绊脚石,虽然谷歌浏览器有翻译的功能,翻译出来的效果也是挺不错,但是这样子阅读文章并不能对我们的工作学习起到帮助,反倒是机械化的翻译有可能会是你的中文水平下降,阅读一篇外国文章,最重要的就是对每个单词的了解,理解,如果单词的意思都不懂,更不要想去理解文章的意思了。

因此这里做了一个划词翻译的小软件,我们的鼠标选中的文本并翻译出来。

例如,在阅读qt帮助的时候,碰到生词:

这里用到的东西挺多的,有获取鼠标事件,接着调用键盘事件,然后调用爬虫去爬取百度翻译的结果,接着用tkinter显示出来。

获取鼠标事件,这里用到的是pyhook,用来判断鼠标点击事件,pyhook的安装比较复杂,普通的pip并不能够安装,需要去这个网站下载pyhook的whl https://www.lfd.uci.edu/~gohlke/pythonlibs/

下载好包后,在命令行窗口输入pip install 包的地址+包名。

使用pyhook的一般方法如下:

代码语言:javascript
复制
def main():
    # 创建管理器
    hm = pyWinhook.HookManager()
     # 监听键盘
    hm.KeyDown = onKeyboardEvent
    hm.HookKeyboard()
    # 监听鼠标
    hm.MouseAll = onMouseEvent
    hm.HookMouse()
    # 循环监听
    pythoncom.PumpMessages()

其中有两个函数就是用来处理获得的事件的方法,需要定义相应的函数

例如键盘监听:

代码语言:javascript
复制
def onKeyboardEvent(event):
    #print(event.Key)  # 返回按下的键
    if event.Key == 'Q':
        event = quit()
    return True

这个函数的意思是,如果接收到键盘按下Q,那么结束循环监听,程序结束

获得鼠标事件的函数:

代码语言:javascript
复制
def onMouseEvent(event):
    if (event.MessageName != "mouse move"):  # 因为鼠标一动就会有很多mouse move,所以把这个过滤下
        if event.MessageName == 'mouse left up':
            pyautogui.hotkey('ctrl','c')  #如果鼠标点击则按下ctrl+c
            s = pyperclip.paste()
            global key
            global v
            try:
                key,v =getword(s)  #调用爬虫获得翻译的结果
            except:
                key = 'null'
                v = 'null'
    return True # 为True才会正常调用,如果为False的话,此次事件被拦截

上面的鼠标函数中有一个pyautogui库里的热键函数,关于pyautogui可以到这里查看python---很多行代码做一个自动打开软件的程序

这里实现的是获得鼠标选取的内容,紧接着传递给爬虫,然后将翻译的结果返回到key和v,之中。

关于爬取百度翻译的,主要是利用post方法获得翻译的json数据,在对json数据解析,提取翻译的结果。

代码语言:javascript
复制
def request_translate(self):
  """
  向百度请求 json 数据
  :return: 向百度请求的 json 数据  """
  data = self.get_post_data()
  try:
response_0 = requests.request(method="post", url=self.url_0,            headers=self.headers, data=data).json()except Exception: # 进行数据请求的任何异常处理
    response_0 = ''
  try:
response_1 = requests.request(method="post", url=self.url_1,        headers=self.headers, data=data).json()except Exception: # 进行数据请求的任何异常处理
    response_1 = ''
  return response_0, response_1

在最后翻译结果获取到了,在利用pytkinter可视化一下,在将其打包,这样就是一个划词翻译软件了。

就这样,在日常的使用中也是非常便利的,只需要用鼠标选取一下,它就显示出单词的翻译结果。


因为篇幅有限,不能够全部贴代码出来,如果有需要的话可以在这里下载自行尝试一下,因为用到的库很多,所以这个软件的大小有60多M,当然打包之后使用便利,直接运行程序也是可以有一样的效果的。

代码下载链接:https://pan.baidu.com/s/1M03TD1fJYU0C3uBuStUEow

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孤独的S 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档