python autohotkey_autohotkey+python扩展minipad2词典

minipad2 是一款小巧的纯文本笔记软件,系统资源占用少,集笔记 /

便笺、计算器、备忘录、电子词典、快启面板、通讯录、文字模板、多重剪贴板等多种功能于一体,所有内容自动保存,关闭时自动记忆最后的状态。

软件可在多标签页便笺风格与树视图的笔记风格之间自由切换。不用时可隐藏到桌面边缘,或最小化到系统托盘。

软件提供了非常灵活的选项配置,各项扩展功能类似于插件,可自由选择是否启用。

minipad2 为单文件纯绿色软件,解压至任意文件夹下即可使用。

下面就来利用autohotkey+python扩展minipad2的词典

【实现过程:选中陌生单词--ctrl+1(autohotkey自定义的快捷键)--autohotkey将选中单词交给python脚本--python脚本将单词发送到爱词霸网站并将翻译结果写入minipad2的词典文件中】

1、先来了解下minipad2的词典格式:

minipad2 支持的词典内容不限,可为中英互译、其他语言、技术条目索引或百科全书等等。

词典为纯文本文件,用户可以使用记事本软件自行编辑,只需遵循如下的格式:

第一行:@词典名称//备注 #词典名称将显示在minipad2的词典页中

以后各行:单词\t释义

末行:空行

存放目录:minipad2\dict 之下

后缀名 *.dic

已根据以上格式将梅花双语词典的wintersweet.bin转换成minipad2能识别的格式了。设置minipad2的取词快捷键后就能实现全屏翻译了,见效果图:

但是梅花双语词典的词库毕竟只有14万,还是有较多词汇没有包含在梅花词库中。

因此萌发了自制词典的想法,思路是这样的:

并抓取翻译结果按minipad2规定的格式写入minipad2\dict\new-world.dic

==========================================================

2、使用说明:

2.1、当遇到陌生单词Encodings,先运行minipad2的取词快捷键,屏幕提示Encodings:not

found!

说明梅花双语词库中就没有这个单词

2.2、选中该陌生单词,按快捷键ctrl+1(autohotkey自定义的快捷键),

此时autohotkey将陌生单词交给python脚本,python python_cidian.py

Encodings

并将Encodings的翻译写入了自定义的词典文件minipad2\dict\new-world.dic

2.3、打开自定义词典文件,发现多了两行

Encodings \n编码

空行

2.4、此时再选中Encodings,按下minip2的取词快捷键,效果如下:

说明自定义的词典已经生效

==========================================================

附:

适用条件:

1、安装了python(本次测试用的是2.7.3)以及autohotkey

2、存在网络连接,不然也没法获取爱词霸的翻译

3、词库文件xxx.dic必须为unicode BOM格式,否则minip2识别不了其中内容

4、最后就是minipad2选项-词典页中必须选中自定义的词典

------------------

autohotkey将选中单词交给python脚本实现代码:

;添加生词到minipad2的词典中

^1:: ;快捷键ctrl+1

{

Send ^c

Send ^c

Send ^c

SetTitleMatchMode 2

run,cmd

WinWait, ahk_class ConsoleWindowClass,

IfWinNotActive, ahk_class ConsoleWindowClass, , WinActivate,

ahk_class ConsoleWindowClass,

WinWaitActive, ahk_class ConsoleWindowClass,

ControlSend, , python

D:\soft-bak\xbeta\minipad2\python_ex\python_cidian.py %clipboard%

{Enter}, cmd.exe,

ControlSend, , ping -n 5 www.ip138.com>nul&&exit

{Enter}, cmd.exe }

return

------------

第3点在写python时花了较多时间去生成unicode BOM格式的文件,要不就是乱码,要么就是无法识别,

翻遍了度娘和Google,只找到如何清除文件BOM

却没有找到如何生成BOM格式文件的代码【下面的python代码已经实现】

##coding=utf-8

importsys

importcodecs

frombs4importBeautifulSoup

importtornado.httpclient

cli=tornado.httpclient.HTTPClient()

#search=raw_input('search: ')

word=sys.argv[1]

data=cli.fetch(link+word)#%(link,word)

body=data.body.decode('utf8')

soup=BeautifulSoup(body)

group=soup.find_all(class_='group_pos')

group2=group[0].find_all('p')

cidian=codecs.open('D:\\soft-bak\\xbeta\\minipad2\\dict\\new-world.dic','a','unicode_internal') #以unicode_internal编码追加文件

line=''

for ele in group2:

result=ele.find_all('label')

for

r in result:

line+=r.get_text()

line="%s\t\\n%s%s\r\n"%(word,(ele.find(class_='fl').get_text()),line)

#print

line

#print

isinstance(line,

unicode) #判断是否为unicode

cidian.write(line)

cidian.close()

==========================================================

因此对python编码的理解:

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

代码中字符串的默认编码与代码文件本身的编码一致。

如何获得系统的默认编码?

import sys

print sys.getdefaultencoding()

----------------------------------------------------------

==========================================================

利用以上思路扩展minipad2的词典,就看读者各自的需要了,我还实现了"城市及区号对照"、"略缩词及全称对照"、"姓名与电话对照"等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值