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)
line
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的词典,就看读者各自的需要了,我还实现了"城市及区号对照"、"略缩词及全称对照"、"姓名与电话对照"等等。