|
|

楼主 |
发表于 2021-7-10 13:04:29
|
显示全部楼层
前面说的很清楚,KSDRIP不开源,而且其生成的DA3自动从utf-16LE转成了GB2312,丢失了索引和特殊字符,同时也无法解析语音库。, a" l3 B" v: [ S. K7 p
我这个是底层解析,只是说明技术可行性,只是为了好玩,不喜欢可以忽略。
/ ^6 S+ _, K! g2 |有了这个源代码,完全可以在任何平台支持金山词霸DIC和ADIC。
0 r6 F+ b4 ~& p; P目前已经解决了国内大部分词典的词库格式解析,包括有道、海笛、欧路、灵格斯、金山词霸、MDICT等等,只剩海笛的语音图片离线库没有解析完成,资料太少,加密比较复杂,等有空好好再研究一下。
) X% N3 P. w6 ^2 \ r4 I3 ?' q$ E$ I9 k' I" g, F0 _) N) ?
生成DIC跟解析是两个工程,目前看,120字节的文件头有几个不知道什么意思,我个人没有这个需求,所以抽不出时间。
# `. w% w9 ?$ c1 e/ p给个文件头自己看看吧:( X, q7 d) x: K5 q
- Option Explicit
% ^% S0 G% V: W; T+ N, y - }4 N6 R, z9 s7 |: U+ P3 o0 ?2 S
- '金山词霸DIC词库解析- k2 ~+ y2 k& M' h- y2 `
- 'Kingsoft PowerWord Dic file format:+ _# r8 k' Z; ?5 [
- 'Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 158 S- W% m3 w- B: s6 }6 U, C
- '00000000 4B 53 44 49 70 57 05 00 95 8B 00 00 52 A3 00 00 KSDIpW 晪 R?
3 v$ T! E- w& r5 @1 l - '00000016 68 58 22 49 08 00 00 00 01 00 00 00 78 A8 25 00 hX"I x?% Y I. c& I" g* p
- '00000032 00 40 00 00 01 00 02 00 04 08 00 00 09 04 00 00 @
5 Y$ c \$ I( B5 O) c: d - '00000048 04 08 00 00 1D 1E 00 00 20 00 00 00 11 00 00 00' d+ c0 Q& {$ Z) m" C. `& D) D
- '00000064 F4 01 00 00 00 00 00 00 78 00 00 00 78 00 00 00 ? x x
. ]" ?! ^$ s4 d7 H* i - '00000080 F8 07 00 00 70 08 00 00 F8 3F 00 00 68 48 00 00 ? p ? hH. Z! w8 e* h2 p$ q
- '00000096 E8 F0 00 00 50 39 01 00 D8 CB 01 00 28 05 03 00 桊 P9 厮 (, A4 f9 |& r8 ~5 }% A
- '00000112 50 A3 22 00 00 00 00 00 3C 00 64 00 69 00 63 00 P? < d i c7 e, E/ g" w* ^( a' A1 q
- '每个zlib块解压后都是16384
6 q* i& C7 a- H6 T* I0 o( n - Type TCibaDIC
; y: p, A7 z( l0 z - lSign As Long '0x4944534b ie KSDI1 P1 \' Q6 Z" m: ~1 U
- lFileSize As Long 'file size d4 H9 A$ }- I1 K/ T9 R# P: o
- lFileSize1 As Long1 [7 o' w* p: j7 H$ b0 ?6 s- T
- lFileSize2 As Long# W/ a/ ?; n# M* ]& V* z' N
- lFileCRC32 As Long 'crc32?
4 n# \4 Z6 Y/ h4 P R; @# j - lNum1 As Long '8$ N1 q/ H( l- Q/ e: i7 W% |- H' Y, W
- lNum2 As Long '1& \; v2 m- S. u$ q
- lFileSizeOrig As Long 'Original file size of decription `" F: M f6 ?0 e
- lBlockSize As Long '0x00004000- J# q2 g1 p, K! e% o; a" k1 h
- lNum4 As Long '0x00020001' G$ Z/ Y4 x) X2 s
- lSource_lcid As Long '0x00000804
7 {* X! u, K- O* E! J* V- ]. I! a - lTarget_lcid As Long '0x00000409
1 ~/ m0 A+ M: L0 P5 _2 x - lNum5 As Long '0x000008048 w$ ]% e; r: [
- lNumWords As Long '0x1e1d/ X8 C4 a" K: C0 _
- lNum6 As Long '0x20/ v. w( F7 L+ ~; J& Y( P2 p
- lNum7 As Long '0x115 A3 y; X0 z5 k7 E
- lNum8 As Long '0x01f4
0 b$ A! z2 G: d - lNum9 As Long '0x007 _. ^* z s# g# d0 E+ P4 j& _
- lOffStart As Long '0x78+ _+ d* D& x6 R& C! U/ ?% M
- lOffXML As Long '0x78
# a; b2 E- p m% x. l. s3 c! L - lLenXML As Long '0x07f88 b7 u* x7 n& G) D- S& m
- lOffIdxTable As Long '0x78/ m8 S$ v" Q) W: e
- lLenIdxTable As Long '0x780 r. Z; H* l+ | a: c. y
- lOffIdxTable1 As Long '0x78
/ }! {' g2 \2 X - lLenIdxTable1 As Long '0x78% {* T u! A! P
- lOffIndexTable As Long '0x78
8 o% F1 C8 d8 n - lLenIndexTable As Long '0x78
2 }, E; {& S$ o' J( R% F - lOffWordsTable As Long '0x78
! S! ~1 l9 Q7 T K" P - lLenWordsTable As Long '0x78
\* _+ O, M3 v1 q3 s1 [ - End Type
7 q4 }( F; b5 x. Y3 ^' K2 v
复制代码 |
|