|
|

楼主 |
发表于 2021-7-10 13:04:29
|
显示全部楼层
前面说的很清楚,KSDRIP不开源,而且其生成的DA3自动从utf-16LE转成了GB2312,丢失了索引和特殊字符,同时也无法解析语音库。4 K- q; J. }+ P/ m1 {8 O
我这个是底层解析,只是说明技术可行性,只是为了好玩,不喜欢可以忽略。 \4 ], m9 T' A" V8 r9 Z. j
有了这个源代码,完全可以在任何平台支持金山词霸DIC和ADIC。
G% P" W* x* |; F目前已经解决了国内大部分词典的词库格式解析,包括有道、海笛、欧路、灵格斯、金山词霸、MDICT等等,只剩海笛的语音图片离线库没有解析完成,资料太少,加密比较复杂,等有空好好再研究一下。# i9 ?9 Q" m3 o" U1 r' p2 c
; I) m& ]) Q4 A$ |生成DIC跟解析是两个工程,目前看,120字节的文件头有几个不知道什么意思,我个人没有这个需求,所以抽不出时间。% ?& ^/ w$ ~9 \0 d
给个文件头自己看看吧:
2 _& z/ t+ l4 r! `- K% _2 |- q- Option Explicit
) l/ x4 A0 e6 d3 G% r5 N0 _6 I - / J8 F" x2 w! U* z- f \
- '金山词霸DIC词库解析
0 n) S6 j+ e" p# b* S - 'Kingsoft PowerWord Dic file format:
% Q( Z9 E7 i6 T - 'Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
; f# |' I; P7 N) Y - '00000000 4B 53 44 49 70 57 05 00 95 8B 00 00 52 A3 00 00 KSDIpW 晪 R?
- w+ s+ S/ i/ s: q( z& ^ - '00000016 68 58 22 49 08 00 00 00 01 00 00 00 78 A8 25 00 hX"I x?
" T9 ~ z- N Q% ^, I/ F - '00000032 00 40 00 00 01 00 02 00 04 08 00 00 09 04 00 00 @
" `! M- b* \' y9 w - '00000048 04 08 00 00 1D 1E 00 00 20 00 00 00 11 00 00 00) ]2 V6 V+ ~: i, C
- '00000064 F4 01 00 00 00 00 00 00 78 00 00 00 78 00 00 00 ? x x8 q9 ^, |$ ^: p6 ]% j8 ]
- '00000080 F8 07 00 00 70 08 00 00 F8 3F 00 00 68 48 00 00 ? p ? hH' D6 `) S0 l$ t; m- ~8 y- O" e! |
- '00000096 E8 F0 00 00 50 39 01 00 D8 CB 01 00 28 05 03 00 桊 P9 厮 (
: _& F# C, o/ g/ e2 l, t - '00000112 50 A3 22 00 00 00 00 00 3C 00 64 00 69 00 63 00 P? < d i c- g8 h# D) p' c t" r
- '每个zlib块解压后都是16384
e$ E Z1 p+ ^+ N% C* F. a p% F s* b - Type TCibaDIC
# i* O2 ?# X: A8 y5 H - lSign As Long '0x4944534b ie KSDI, V8 E, ~$ F0 O5 e
- lFileSize As Long 'file size
9 }6 c" P* Y: h - lFileSize1 As Long
) e6 m1 C/ X. [3 m; v - lFileSize2 As Long, M/ V$ z. \% ]1 S6 G3 J
- lFileCRC32 As Long 'crc32?
7 K" J6 B6 r/ L M% ] - lNum1 As Long '8
) c3 @8 \5 c( h2 x7 s) P - lNum2 As Long '1* D% }1 l# e% @. B& a1 E {' C/ H: ~
- lFileSizeOrig As Long 'Original file size of decription
% K8 F$ p( n4 v& m q - lBlockSize As Long '0x00004000
( Y! g! s/ ~+ _- s5 X - lNum4 As Long '0x00020001) A8 M5 w# ~" j s% x* v# A
- lSource_lcid As Long '0x00000804
; u* Q- x" U" v; k& M" U& {' X - lTarget_lcid As Long '0x00000409
5 b8 k1 ?8 w6 ^ - lNum5 As Long '0x00000804: M3 n+ T& J p5 e. e/ z0 ^0 ~
- lNumWords As Long '0x1e1d) l* Y6 G; p! ?; f# W( G
- lNum6 As Long '0x202 z7 J0 h h* w+ s
- lNum7 As Long '0x11. Y) ]) t1 w7 F2 Y
- lNum8 As Long '0x01f4, G2 x4 X @1 K# p
- lNum9 As Long '0x000 w3 B5 X; A7 M) }5 X5 o8 d# [5 }
- lOffStart As Long '0x787 G+ t; m1 u V: w% y
- lOffXML As Long '0x786 E- V# E2 }' z. T4 ^1 Q
- lLenXML As Long '0x07f8$ R4 r( {$ n% J+ |8 |& z
- lOffIdxTable As Long '0x78! ?: `4 a! S$ y- D
- lLenIdxTable As Long '0x780 r0 Q, A5 G' ^) O$ f2 `% @1 ]
- lOffIdxTable1 As Long '0x78. N' }. i3 z2 d# }$ D8 k0 A
- lLenIdxTable1 As Long '0x788 T0 e" L5 ^' A7 V& P1 @8 j" |+ J
- lOffIndexTable As Long '0x78+ H- v" B Q: J* j
- lLenIndexTable As Long '0x78
6 I0 p0 v5 d* T# J0 p3 X8 R. ? - lOffWordsTable As Long '0x78
* I( {/ B* G/ M( y! x) z% q4 V - lLenWordsTable As Long '0x78
" d5 S. {! H% d - End Type
/ c q: X' s2 O2 N
复制代码 |
|