|
本帖最后由 qunwang6 于 2017-6-9 00:23 编辑
/ a6 o$ E) K, i5 u' |. H7 Z
3 _ P* Q" _' ^( K: a3 i" I7 ~7 _
5 `8 M9 d. N4 n: W% R- e7 w20170609更新:7 Z1 N: t1 L" |" c* k! t1 \
新版pyglossary 要安装以下环境:sudo pip3 install lxml beautifulsoup4 html5lib 6 N/ D1 d8 b3 u$ L+ I2 v, T
Python 改成Python3 " e9 Q2 g7 t2 u( g% X; P6 v& m: b
✍准备好以下环境:
$ {$ H3 Y6 Q- ?3 |* N' c, ]: x* BeautifulSoup4 required to sanitize html contents.8 u3 b- T3 r1 F6 I( M
sudo easy_install beautifulsoup4 html5lib
2 Y1 {( C L* g- r0 s* GNU make as part of Command Line Tools for Xcode.
5 H/ E4 ?7 r2 J% phttp://developer.apple.com/downloads
- C# o, H. v8 |$ j$ S; I; Z0 ^5 s* Dictionary Development Kit as part of Auxillary Tools for Xcode 5 R Q6 u' i# J8 G/ t* T
http://developer.apple.com/downloads.- v% U- \/ i, `- J, f. I3 Y
将Dictionary Development Kit解压到/Applications/Utilities/DictionaryDevelopmentKit/
% t3 ?+ q8 s6 m) S. ^- o$ j* ^2 N(不含空格,中文名:应用程序/实用工具那里,也可以解压到其它地方。)
, {4 E8 x& Z! x3 t& Z4 S$ q1 r4 p' I+ X0 b& |/ u
( K4 K. p6 \/ v( W0 y) y! |8 fBGL ===> OSX.dictionary
. o4 b. n6 o* u; [1 F/ U0 ]4 E6 y转换- python pyglossary.pyw --read-options=resPath=OtherResources --write-format=AppleDict dict.bgl dict.xml
复制代码 编译' k; R# A! r3 O& k1 W6 v
* 修改Makefile里2个参数,DICT_NAME是生成文件的名称,DICT_BUILD_TOOL_DIR是Dictionary Development Kit的路径,如果错了就不能生成文件。
+ U( B7 h% W- u/ D4 {5 i8 K6 |* 修改Info.plist里3个参数,CFBundleName是在Mac字典程序工具栏下面显示的标签名,CFBundleDisplayName是词典名称,CFBundleIdentifier是词典的ID,需保持唯一性。。
& b' \: s1 T% E* 根据模板格式编辑Dictionary.xml、Dictionary.css,如果有图片则放置在OtherResources/目录下.
! ~, f# I, [" [/ ?" [" ]3 |* 打开终端,cd进入模板文件目录,输入make,稍等一段时间,即可生成字典文件,将object目录下生成的dictionary文件拷贝至 ~/Library/Dictionaries,打开字典程序,即可看到生成的字典。8 }0 |: m, Q# }# i: q% ^0 _* P
或者直接用make && make install这个命令,生成词典后直接安装到了~/Library/Dictionaries。8 n$ [, B4 P6 [; b1 G
# F! F6 ~1 K* f6 d) {
**注意:如果OtherResources里的图片太多的话会出现以下错误:**/ y% x; [* Y5 w7 @
/Volumes/Macintosh HD/Applications/Utilities/DictionaryDevelopmentKit//bin/build_dict.sh: line 206: /bin/cp: Argument list too long0 V. ]1 \6 d! }
Error.9 f# e/ V! m' Y/ C% T9 ?/ E
make: *** [all] Error 1
& H/ g2 ~; }0 c0 k4 R; |% H; U: V0 V1 H& D, ^9 f' C
可以在编译前不加入图片、语音文件,在编译完成后将图片、语音文件复制到xxx.dictionary/Contents目录下。
3 K/ X5 y: I0 V1 w: Y2 \* M; S1 ?6 {8 ^- E2 T5 i9 \
4 H% ?5 n. D3 I8 R2 E( M3 B
- b3 V+ w6 i/ H6 X8 JDSL ===> OSX.dictionary' J) { Q7 Q: n8 s
+ S+ v6 Y$ ~' c) Y3 t1. Convert DSL from UTF-16 to UTF-8:- iconv -f UTF-16 -t UTF-8 dict_utf16.dsl > dict_utf8.dsl
复制代码
" U( z, m" m( [' H9 q: c" Y( W2. Using pyGlossary python project, convert UTF-8 DSL to AppleDict XML:- python pyglossary.pyw --read-format=ABBYYLingvoDSL --write-format=AppleDict dict_utf8.dsl dict.xml
复制代码 & h, w5 t3 n0 k0 s# y" l
**lingvo格式.dsl转换成可发音的词典。(注意修改命令参数)**↓) n; B" ^2 _& M. A2 b
audio conversion is optional, "no" by default. The following command works,
/ f6 u/ @% Q' t" S3 X* @~/Development/pyglossary/pyglossary.pyw --read-option="audio=yes" test.dsl test.xml( n5 s8 |5 \* \4 M
make && make install - python /Applications/Utilities/DictionaryDevelopmentKit/pyglossary/pyglossary.pyw --read-options="audio=yes" --write-format=AppleDict ldoce55.dsl ldoce55.xml
复制代码
; K N8 C8 H% E3. Using Command Line Tools for Xcode and Dictionary Development Kit:编译步骤同BGL ===> OSX.dictionary5 i8 j# [/ _2 Q* D( N/ ^. w
- make
0 k0 U4 q' m" S - make install
复制代码 & X. v$ L: C4 v1 T( L
* I3 h+ i" S2 G7 EMDX ===> OSX.dictionary7 y t; x6 n% l
3 ~" t% a3 ^ ~1 U9 y9 v3 s转换
# K! C4 K3 q) z' Y( H- cd ~/Downloads/oald8/
$ [4 ?3 [+ j; N5 ~ - ~/Software/pyglossary/pyglossary.pyw --read-options=resPath=OtherResources --write-format=AppleDict oald8.mdx oald8.xml
复制代码 * y% {2 n2 v* W& O i0 o- S
修改.xml文件里的链接(如果不是可发音的词典,以下两步可略过)7 T p$ y8 u S; j7 {$ W3 s9 |
- sed -i "" 's:src="/:src=":g' oald8.xml
2 u% n7 W; w9 Z* |3 O - sed -i "" 's|sound://\([/_a-zA-Z0-9]*\).spx|\1.wav|g' oald8.xml
复制代码 第一个是去掉"/"
3 [& g, q, P5 q第二个是去掉”sound://" ,".spx"改成".wav") m4 d9 ~* c, t- T% K" M, v
9 }' J: w0 U: D9 [
将.spx语音文件转换成.wav(需要安装speex,麻烦!可直接从lingvo那里复制,或者直接从原光盘提取)- find OtherResources -name "*.spx" -execdir sh -c 'spx={};speexdec $spx ${spx%.*}.wav' \
复制代码 8 U+ t$ i+ O, M& G
编译步骤同BGL ===> OSX.dictionary
/ A# M# W; s6 M注意:如果OtherResources里的图片和语音文件太多的话会出现错误,可以在编译前不加入图片和语音文件,在编译完成后将图片复制到xxx.dictionary/Contents目录下。4 M& ?; F8 x! I: u
' G* M- x' i: W5 l" N5 _CD(原词典光盘)===> OSX.dictionary* p d: z: |/ C& B' @- ^+ ?
以OALECD8为例。) Z- J% W; s; s' a6 d
数据提取:虚拟机xp+python2.7,用IDMSKconv提取。7 N4 D0 Y- _& L1 Y" b8 T) G, o
制作:从OALECD8安装目录下找到oalecd_master.css.BAK、从提取出的数据里找到output文件、以及图片和语音mp3文件,复制到Mac OSX下备用。* G Y' x1 ~: c0 G
将output文件重命名为oalecd8.xml,oalecd_master.css.BAK作为CSS文件重命名为oalecd8.css,从Dictionary Development Kit里找到模板文件分别复制出MyInfo.plist、makefile文件,MyInfo.plist重命名为oalecd8.plist,修改oalecd8.plist和makefile里的参数。
' F1 X3 E, H( |排版:里面各种奇形怪状的标签可以不必修改,有oalecd_master.css.BAK作为默认CSS,所以只需要在oalecd8.xml里添加头部和尾部,删除不要的东西,就可以编译出和原版相同的词典。
* W: Q; V$ k0 n% D5 } m# ]4 @4 ~, _......+ s! Y- C/ n! d' |% v
6 v2 z) q4 c' X) y' N$ X+ x4 @& N& a###参考:
9 S _& T4 X& J6 P, S* g* GoldenDict Mac OS X available - Early Access Builds" j+ ^* w! K7 O$ p# B# Q, q u @' V
* PyGlossary Overview
9 U4 A2 G9 E" x6 x! N2 }$ E& h*https://developer.apple.com/libr ... /doc/uid/TP40006152
2 h2 r/ y2 b% H1 k+ X& ^" i) c8 v! m
4 s1 y' o& U7 l( W- \) I细节部分
6 s( W6 F% Q% O/ U' K( n& E* k
! @( J& D" C* |8 g$ y' hv======* 注意修改单词内部的链接========v d( i( d( j) c# }6 y* t
单词跳转用x-dictionary:r:! M M- z: k4 o, D8 Q
(只能在当前词典内跳转且x-dictionary:r:后的单词大小写须与d:entry id="***"里的大小写一致,不能有空格否则不能跳转。)* p% z- k- a, M
4 ]# n% D6 [' h. c% N6 b( R
单词查找用x-dictionary:d:
& S$ t9 D2 x& h( M(会先搜索当前的词典,若没有,会调用其它词典搜索,不限大小写、空格。)3 c6 A3 J8 W& P4 c/ r) V
(基本上都是用r,用d很少)- m* S$ m$ s/ J) ?* T
^==============================^
. w: S i; X8 D: f( p' tThe x-dictionary: URI contains three elements separated by colons as the general form—target selector, target text, and dictionary bundle ID. The target selector must be either d (for definition) or r (for reference). Use d if you want to search definitions of the following key text. Use r if you want to refer to the entry specified by the reference ID which must be unique to each dictionary. 辞書.appの辞書を引くURLスキームに/ @4 Y3 C0 A4 c
次のようなものもあります。
. I# d" t/ D6 p' v1 {' ]1 gx-dictionary:d:key_text:dict_bundle_id
: c' |' W9 [; T2 W" `0 `x-dictionary:r:reference_id:dict_bundle_id
" d; X$ ^: p0 z, H# Q8 K6 A**1key_text 調べたい単語
, O% B2 ]; R& W**2reference_id 辞書を作るために作成するdictionary.xmlの
& p6 s) L2 N% ^& |9 s7 f8 D g各タイトルごとに割り当てる固有のエントリーID# l; H8 E+ N) b! w
<d:entry id="0ABCDE" d:title="案の定"> 6 K% l! C" Z2 W5 M3 x# e, {1 W
* ex.- _: S& D6 t7 v \# N' }
Z3 m% ~/ d/ k$ d# Y5 _) o; ~/ ?& T ) k0 G& m5 r4 b: X7 B5 d9 ]
<d:entry id="make a face" d:title="make a face">% H/ @/ S: R' h
<d:index d:value="make a face"/>
# V* t4 g3 _ t% e7 g$ M! w+ b! f1 z <html><body><h1>make a face</h1>! q" A8 ^' ^$ W S1 n( c3 N
<a href="entry://grimace">grimace</a></body></html>7 q' g9 @$ Q! {* }
</d:entry>
8 o" o( m$ a% n2 d b- B
) b* ?! s" f7 h! h <d:entry id="make faces" d:title="make faces">
! w) h* }$ e. g8 O <d:index d:value="make faces"/>
5 y1 j [) H* ?. S7 R <html><body><h1>make faces</h1>
8 k0 N8 }) O y) Q' g/ ]" X <a href="entry://make a face">make a face</a></body></html
: w' @& `4 l1 b" {1 Y/ e </d:entry> : ~6 Z7 R, g: |0 @) Q: t" i# u
$ U7 f2 ^* q; ]6 y6 G" P- }2 D3 V
"entry://grimace"
& {4 @' l) `$ b+ H; Q将entry://替换为x-dictionary:r:: w% ^6 x# U1 O4 Q- K- \
===>"x-dictionary:r:grimace"1 k$ j5 |" F2 t! a
7 V' r, h; I; A, h( C- }& D% \d:entry id="make a face"
" O1 J" r# q' a( |! G" W& B' o' i* @href="entry://make a face") P9 D$ `& [, J" |8 I$ O
类似上面的单词,中间不能有空格,否则单词间不能跳转。6 s7 w- ?/ s* l8 d6 x
===>
+ ]) }$ J, r2 C6 O* i- ?, P. [/ Yd:entry id="make_a_face"
; w- B; ]5 ] Z3 } bhref="x-dictionary:r:make_a_face"0 C% D0 q; N1 `0 L: X5 W( D0 h' _1 c
替换空格需要用到的正则表达式: b% z/ G5 |+ C" `3 f, x( G
(在此感谢ryuya,https://pdawiki.com/forum/thread-13044-1-1.html)- (<d:entry id="[^"]+)\s替换为\1_
复制代码- (href="x-dictionary:r:[^"]+)\s替换为\1_
复制代码 0 U m: j+ |0 s
v=========词组/词性跳转、定位===========v
7 S: p \0 M% N8 X/ c; H/ g词组/词性页面内定位
/ U- e% J7 j$ H6 ^# t<a class="LP_OS" href="entry://#L_hkx1">suffix</a>( `1 z8 X5 W3 U7 F! {% X# r
<a name="L_hkx1"></a>
( r" o7 u2 C. r1 b$ S' l3 D; u==> <a class="LP_OS" href="#L_hkx1">suffix</a>
/ _/ I1 D/ I; q: n. u# [------------------
% Q5 N6 }& S2 d7 z词组/词性跳转并定位
! Y+ R1 }+ P' j4 D7 u' w1 u3 s<a href="entry://clip#ld3097">clip</a>& U5 D' B; h3 ~/ K
<a name="ld3097"></a><span class="L_IDOM">$100 / 50 cents etc a clip</span>& K7 M: w6 z. b ~
==> <a href="x-dictionary:r:clip:#ld3097">clip</a>; g9 k4 P, X. q4 i3 W
用到的正则表达式:
]) x, o- [& @6 zx-dictionary:r:(.+?)#
' b! q. b8 ]8 o; e) |替换为:2 U. E- d8 H! z! c
x-dictionary:r:\1:#4 b \$ l/ z* X$ `0 D
相关的词典:朗文当代英语词典英汉双解第4版$ I8 d0 w* p' H$ O: H7 C: `% \- J# N
Shorter Oxford English Dictionary Sixth Edition1 E6 Y: G, ]4 B+ g# o: W1 U* g
^=========词组/词性跳转、定位===========^5 V. u. j1 c) j
. \* p. L5 Z9 X. v/ o0 Y
1 B% ]8 X0 T( e( D* n
另外一个开源项目
3 M6 a$ I* J* y+ M: _DSL to OS X/iOS dictionary converter(相关教程可到我的空间相册里查看)* L' u; w: `* X7 L
https://github.com/svintuss/DSLConverter
6 j- J% W- x( | StarDict转换工具
* R/ Z9 ]) T+ s% t" fhttps://code.google.com/p/mac-dictionary-kit/0 p% ^" b8 X& `
关于金山字体问题
: ]% s {5 e2 dhttp://www.linuxsir.org/bbs/thread363915.html
3 d4 F" H/ E9 o许多Linux词典也使用了Kingsoft Phonetic Plain字体,但是能下载到的金山字体一般都不是unicode编码的,导致Linux下音标显示为方框。实际上用FontForge修改一下金山字体即可使用。
2 p) _: Z" P3 Q; P安装FontForge:' T W" ^, s6 J; _% V
#urpmi fontforge: X9 c0 G7 s0 |" d4 h5 l F) _; x
然后用FontForge打开金山字体文件,你可以看到FontForge对字体里的每一个字形都分两行显示。上面小的是字符的名称,下面大的就是那个字符的字形了。金山字体本来是对普通拉丁字符赋予音标字形的一个字体,但是因为它不是unicode编码,在Unicode的拉丁字符区一个字形都没有。
2 v2 c( r% o) s" S0 `7 P所以首先要找到金山字符的位置,比较靠后。注意从一个空格字形开始的。这个空格很重要,因为空格和之后几个符号的字形跟普通拉丁字符的字形没有区别,所以我们用来定位所有的金山字符。
' c# Z; {4 p! c5 p找到之后,从空格开始选定所有的字符,大约有三四十个。剪切之。
5 g/ U# U; {" Z2 m; @) i+ F然后找到拉丁字符区。可以看到所有的字形都是“X”,也就是空。找到表示空格的那个字符位(U+0020),选中,复制。所有的金山字形就按照顺序复制到这个字符位以及之后的字符位去了。
! X0 x9 H: g d- a最后保存成.ttf文件就OK了。保存的时候会有一些提示信息,照着做一下就行。
$ W. C+ F. f, H$ n顺便发一个做好的.ttf文件。仅为技术探讨,版权归原作者所有。 0 M3 [" x% P0 |8 Y0 i
! _( {0 t, ~( a# f% A9 k' ^9 L! } 8 o" x: _2 }, X$ o7 P
一些小技巧
. e: }' d% `+ s1 F0 k: a+ dMac osx 下可以用三指取词,但在一些第三方软件下是不起作用的。
8 u3 N, j' _) J' t+ G9 y' u不过结合Alfred这个神器+下面这个脚本可实现热键取词。同理可将网上流传的“142000个单词语音库”解压到同一个文件夹内,借助内置的afplay命令+Alfred+下面的脚本,可做到热键取词发音。- afplay /Users/qunwang6/Sound/Webster/{query}.wav
复制代码 2 j8 b+ B; q) S+ u# L( t
生词本0 h! Q `: ^, R9 C; o1 V( x
BetterDictionary
: t- n2 N9 }( z" s
: e; ~1 l1 z8 X- g...* a4 ~' g3 J% b' p0 U0 H- Q
" f' m7 q e- ]7 k" Q+ ]自己动手,丰衣足食。先发颗种子。" t# v* R% K& J1 U5 O$ b
$ B: \# }+ j7 m: N& a. V2 U2 C
2 {6 ~6 x" h9 e; J/ p! R i 链接: http://pan.baidu.com/s/1i3rgl7n 密码: vcpf
6 H1 b% T: {3 W ~. ~ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
1
查看全部评分
-
本帖被以下淘专辑推荐:
- · REFIDX|主题: 90, 订阅: 34
- · 工具|主题: 61, 订阅: 27
- · 词典制作|主题: 111, 订阅: 24
|