python實(shí)現(xiàn)劃詞翻譯
最近因?yàn)榫幊?,需要大量地看一些說(shuō)明文檔,無(wú)奈說(shuō)明文檔都是英文的,可把我這個(gè)半桶水折騰死了,太多詞匯不知道,一個(gè)個(gè)復(fù)制翻譯太麻煩了。于是我根據(jù)自己的需要,用python寫(xiě)了一個(gè)劃詞翻譯。
一、使用邏輯
由于我是看PDF文檔,用的是一款輕量級(jí)的PDF閱讀器(SumatraPDF),這款閱讀器只有5M,但是閱讀很舒服很流暢,渲染也很到位。但是沒(méi)有其他閱讀器有許多強(qiáng)大功能,比如說(shuō)劃詞翻譯。
我的想法是一旦發(fā)現(xiàn)我復(fù)制就可以在當(dāng)前鼠標(biāo)位置顯示一個(gè)翻譯結(jié)果框?;谶@個(gè)想法,我一開(kāi)始準(zhǔn)備使用MFC編寫(xiě),因?yàn)镸FC能夠輕易獲得系統(tǒng)消息,鉤子調(diào)用十分簡(jiǎn)單??墒俏野褭z測(cè)復(fù)制,顯示文本框都做好的時(shí)候,發(fā)現(xiàn)一個(gè)悲傷的事實(shí),c++的http庫(kù)實(shí)在是不怎么樣,竟然無(wú)法訪問(wèn)http://地址,經(jīng)過(guò)一晚的嘗試——失敗,這才打算使用python。啰啰嗦嗦一大堆,我現(xiàn)在把我的邏輯說(shuō)下吧。

二、需要引用的庫(kù)
因?yàn)橐?lián)網(wǎng)所以需要urllib,解析網(wǎng)頁(yè)需要json,讀取剪切板數(shù)據(jù)需要win32clipboard,獲得當(dāng)前鼠標(biāo)信息用PyMouse,生成文本框Tkinter,定時(shí)器time。python為什么強(qiáng)大,就在于集成庫(kù)的易用性和多樣性,有什么需要就pip install 裝就行,這點(diǎn)比c++強(qiáng)太多了。
import urllib #http連接需要用到 import json #解析網(wǎng)頁(yè)數(shù)據(jù)用 import win32clipboard as wc #讀取剪切板數(shù)據(jù) from pymouse import PyMouse #獲得當(dāng)前鼠標(biāo)信息 import Tkinter #自帶的GUI庫(kù),生成文本框 import time #定時(shí)器,減少占用
三、代碼實(shí)現(xiàn)
我這里先定義了三個(gè)函數(shù),方便后面實(shí)現(xiàn)功能,下面有詳細(xì)解釋和代碼
#PyMouse得到的是2維字符串,但是tkinter生成窗體時(shí)需要的是類(lèi)似(100*100+x+y)的字符串,100*100是窗口大小,xy是坐標(biāo)點(diǎn)。 def transMousePosition(): m = PyMouse() return "100x100+"+str(m.position()[0])+"+"+str(m.position()[1]) #獲得剪切板數(shù)據(jù) def getCopyText(): wc.OpenClipboard() copy_text = wc.GetClipboardData() wc.CloseClipboard() return copy_text #返會(huì)是否有新的復(fù)制數(shù)據(jù),cmp函數(shù)用于比較2個(gè)對(duì)象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 def newCopyData(): return cmp(currentData,str(getCopyText()))
主程序
if __name__ == '__main__':
req_url = 'http://fanyi.youdao.com/translate' # 創(chuàng)建連接接口,這里是有道詞典的借口
# 創(chuàng)建要提交的數(shù)據(jù)
currentData=str(getCopyText())
Form_Date = {}
Form_Date['doctype'] = 'json'
while 1:
if newCopyData():
currentData=str(getCopyText())#取得當(dāng)前剪切板數(shù)據(jù)
Form_Date['i'] = currentData # 傳遞數(shù)據(jù)
data = urllib.urlencode(Form_Date).encode('utf-8') #數(shù)據(jù)轉(zhuǎn)換
response = urllib.urlopen(req_url, data) #提交數(shù)據(jù)并解析
html = response.read().decode('utf-8') #服務(wù)器返回結(jié)果讀取
translate_results = json.loads(html) #以json格式載入
translate_results = translate_results['translateResult'][0][0]['tgt'] # json格式調(diào)取
position=transMousePosition()#取得當(dāng)前鼠標(biāo)位置
top = Tkinter.Tk()#窗口初始化
top.wm_attributes('-topmost',1)#置頂窗口
top.geometry(position)#指定定位生成指定大小窗口
e=Tkinter.Text()#生成文本框部件
e.insert(1.0,translate_results)#插入數(shù)據(jù)
e.pack()#將部件打包進(jìn)窗口
top.mainloop()# 進(jìn)入消息循環(huán)
currentData=str(getCopyText())
time.sleep(1)
到此,我們劃詞翻譯程序就已經(jīng)完成了,雖然不太美觀。而且美中不足的是我沒(méi)有想到一個(gè)好的辦法退出程序,相當(dāng)于一個(gè)死循環(huán)在里面,只有強(qiáng)行退出,不知道誰(shuí)有好辦法能夠解決這個(gè)問(wèn)題
總結(jié)
如果要實(shí)現(xiàn)什么功能,python該是最好的膠水了,c++的http庫(kù)實(shí)在是太坑了,浪費(fèi)我好多小時(shí)。下面源代碼附上,給大家參考
# -*- coding: utf-8 -*-
"""
Created on Sat Aug 11 08:24:48 2018
@author: ltengy
"""
import urllib #http連接需要用到
import json #解析網(wǎng)頁(yè)數(shù)據(jù)用
import win32clipboard as wc #讀取剪切板數(shù)據(jù)
from pymouse import PyMouse #獲得當(dāng)前鼠標(biāo)信息
import Tkinter #自帶的GUI庫(kù),生成文本框
import time #定時(shí)器,減少占用
currentData=''
#PyMouse得到的是2維字符串,但是tkinter生成窗體時(shí)需要的是類(lèi)似(100*100+x+y)的字符串,100*100是窗口大小,xy是坐標(biāo)點(diǎn)。
def transMousePosition():
m = PyMouse()
return "100x100+"+str(m.position()[0])+"+"+str(m.position()[1])
#獲得剪切板數(shù)據(jù)
def getCopyText():
wc.OpenClipboard()
copy_text = wc.GetClipboardData()
wc.CloseClipboard()
return copy_text
#返會(huì)是否有新的復(fù)制數(shù)據(jù)
def newCopyData():
return cmp(currentData,str(getCopyText()))
if __name__ == '__main__':
req_url = 'http://fanyi.youdao.com/translate' # 創(chuàng)建連接接口,這里是有道詞典的借口
# 創(chuàng)建要提交的數(shù)據(jù)
currentData=str(getCopyText())
Form_Date = {}
Form_Date['doctype'] = 'json'
while 1:
if newCopyData():
currentData=str(getCopyText())#取得當(dāng)前剪切板數(shù)據(jù)
Form_Date['i'] = currentData # 傳遞數(shù)據(jù)
data = urllib.urlencode(Form_Date).encode('utf-8') #數(shù)據(jù)轉(zhuǎn)換
response = urllib.urlopen(req_url, data) #提交數(shù)據(jù)并解析
html = response.read().decode('utf-8') #服務(wù)器返回結(jié)果讀取
translate_results = json.loads(html) #以json格式載入
translate_results = translate_results['translateResult'][0][0]['tgt'] # json格式調(diào)取
position=transMousePosition()#取得當(dāng)前鼠標(biāo)位置
top = Tkinter.Tk()#窗口初始化
top.wm_attributes('-topmost',1)#置頂窗口
top.geometry(position)#指定定位生成指定大小窗口
e=Tkinter.Text()#生成文本框部件
e.insert(1.0,translate_results)#插入數(shù)據(jù)
e.pack()#將部件打包進(jìn)窗口
top.mainloop()# 進(jìn)入消息循環(huán)
currentData=str(getCopyText())
time.sleep(1)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python自動(dòng)翻譯實(shí)現(xiàn)方法
- python翻譯軟件實(shí)現(xiàn)代碼(使用google api完成)
- python利用有道翻譯實(shí)現(xiàn)"語(yǔ)言翻譯器"的功能實(shí)例
- python實(shí)現(xiàn)在線翻譯功能
- Python 實(shí)現(xiàn)的 Google 批量翻譯功能
- 使用Python從有道詞典網(wǎng)頁(yè)獲取單詞翻譯
- 用python實(shí)現(xiàn)百度翻譯的示例代碼
- python使用百度翻譯進(jìn)行中翻英示例
- 基于python實(shí)現(xiàn)百度翻譯功能
- Python使用tkinter制作在線翻譯軟件
相關(guān)文章
Transpose 數(shù)組行列轉(zhuǎn)置的限制方式
今天小編就為大家分享一篇Transpose 數(shù)組行列轉(zhuǎn)置的限制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python通過(guò)yagmail實(shí)現(xiàn)發(fā)送郵件代碼解析
這篇文章主要介紹了Python通過(guò)yagmail實(shí)現(xiàn)發(fā)送郵件代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
python 實(shí)現(xiàn)GUI(圖形用戶界面)編程詳解
今天小編就為大家分享一篇python 實(shí)現(xiàn)GUI(圖形用戶界面)編程詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python單體模式的幾種常見(jiàn)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python單體模式的實(shí)現(xiàn)方法、原理與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-07-07
pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式示例
pytest提供了許多運(yùn)行命令以供定制化運(yùn)行某一類(lèi)測(cè)試用例或者某個(gè)測(cè)試用例等,下面這篇文章主要給大家介紹了關(guān)于pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
python正則表達(dá)式完成車(chē)牌號(hào)檢驗(yàn)的代碼實(shí)例
這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式完成車(chē)牌號(hào)檢驗(yàn)的相關(guān)資料,在Python中正則表達(dá)式是一種用于匹配和操作字符串的強(qiáng)大工具,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
我們?yōu)槭裁匆獪p少Python中循環(huán)的使用
這篇文章主要介紹了我們?yōu)槭裁匆獪p少Python中循環(huán)的使用,我將闡述 Python 提供的一些簡(jiǎn)單但是非常有用的結(jié)構(gòu),一些小技巧以及一些我在數(shù)據(jù)科學(xué)工作中遇到的案例。我將討論 Python 中的 for 循環(huán),以及如何盡量避免使用它們,需要的朋友可以參考下2019-07-07

