|
|

楼主 |
发表于 2021-7-10 13:04:29
|
显示全部楼层
前面说的很清楚,KSDRIP不开源,而且其生成的DA3自动从utf-16LE转成了GB2312,丢失了索引和特殊字符,同时也无法解析语音库。+ U& f4 n+ @& Z! y
我这个是底层解析,只是说明技术可行性,只是为了好玩,不喜欢可以忽略。
( c$ K' j5 X2 u& W有了这个源代码,完全可以在任何平台支持金山词霸DIC和ADIC。
0 o5 ?0 |& }5 ~) Q r目前已经解决了国内大部分词典的词库格式解析,包括有道、海笛、欧路、灵格斯、金山词霸、MDICT等等,只剩海笛的语音图片离线库没有解析完成,资料太少,加密比较复杂,等有空好好再研究一下。! T4 P8 s) u% s( q
5 }9 h0 F% q1 ?7 g
生成DIC跟解析是两个工程,目前看,120字节的文件头有几个不知道什么意思,我个人没有这个需求,所以抽不出时间。
; N c" `/ H" n4 j+ p给个文件头自己看看吧:, U% ?* I& U# l. y7 p, U/ z* s
- Option Explicit% ]$ t- S- ^0 S0 L6 R7 @& \
# Q; e& J) L! I- '金山词霸DIC词库解析
4 b2 f* g% R% i: r# R4 q - 'Kingsoft PowerWord Dic file format:
/ |3 k. o7 d3 q/ j$ ]7 @/ ~. j4 X - 'Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
, R: H' x8 }7 i* D/ ? - '00000000 4B 53 44 49 70 57 05 00 95 8B 00 00 52 A3 00 00 KSDIpW 晪 R?$ {% L4 }# }; V/ k+ P- R* \
- '00000016 68 58 22 49 08 00 00 00 01 00 00 00 78 A8 25 00 hX"I x?
1 [2 j: Q6 A3 ^" I) H" U* v0 k - '00000032 00 40 00 00 01 00 02 00 04 08 00 00 09 04 00 00 @/ u- }/ C4 V8 J! G: h/ {) U. M% E
- '00000048 04 08 00 00 1D 1E 00 00 20 00 00 00 11 00 00 00
3 z" `9 i2 S2 T/ y' y - '00000064 F4 01 00 00 00 00 00 00 78 00 00 00 78 00 00 00 ? x x6 I! d7 {8 {0 F! w9 i
- '00000080 F8 07 00 00 70 08 00 00 F8 3F 00 00 68 48 00 00 ? p ? hH" j! r9 Z7 x4 t
- '00000096 E8 F0 00 00 50 39 01 00 D8 CB 01 00 28 05 03 00 桊 P9 厮 (* Z( N N5 d. @
- '00000112 50 A3 22 00 00 00 00 00 3C 00 64 00 69 00 63 00 P? < d i c
6 K( e7 Y" B( D* ~/ A' b - '每个zlib块解压后都是16384
6 i8 [0 S- ^$ C x$ K% V: |. G - Type TCibaDIC! S) X1 c0 O" b, G
- lSign As Long '0x4944534b ie KSDI: h+ R' |2 Y0 Z
- lFileSize As Long 'file size
- V( D* C: [. m. {; c - lFileSize1 As Long
, _# K: G2 i( p3 i - lFileSize2 As Long* Q3 w: O# K' _4 x3 J: M$ M
- lFileCRC32 As Long 'crc32?! }, i% \' S/ z% ]2 W- }4 I
- lNum1 As Long '8
9 P. i2 ~# _' Z# D - lNum2 As Long '1
0 w" n. |2 o! F" o. } - lFileSizeOrig As Long 'Original file size of decription
; G U# Y& O ^. q2 L, G, n: x - lBlockSize As Long '0x00004000+ o. k) o& G0 z" e8 g3 C1 B+ e
- lNum4 As Long '0x00020001& W0 G+ W/ G2 s& K; g0 |1 ?
- lSource_lcid As Long '0x00000804
" o0 v$ R- k! [* f" n% E$ g% _ - lTarget_lcid As Long '0x00000409
& G( y3 t- X. Y& s% J7 J - lNum5 As Long '0x00000804+ N1 W* r5 k# h
- lNumWords As Long '0x1e1d
5 N; M9 B8 B. I+ V: C - lNum6 As Long '0x20" R; O+ S' v K+ F+ \7 x
- lNum7 As Long '0x11
5 N& v/ @) t1 s. d# e9 ~! O - lNum8 As Long '0x01f4! I) l% K& \0 _4 T$ R9 A0 K9 v$ m
- lNum9 As Long '0x00
) `1 ^+ }4 d! ?& m( l - lOffStart As Long '0x783 t2 [" L Y+ X4 c
- lOffXML As Long '0x78$ }: h e4 C- G+ [) Z/ Y( `- U
- lLenXML As Long '0x07f8
8 {# z. _& L* L5 H - lOffIdxTable As Long '0x78
8 S2 M3 Y: [$ A - lLenIdxTable As Long '0x78* o* W1 X f3 D/ I
- lOffIdxTable1 As Long '0x78
2 d8 z- k: Z+ T# g" S' W* k - lLenIdxTable1 As Long '0x78
' _ P( K5 Z, V - lOffIndexTable As Long '0x781 S; a, R, z: T8 N2 ~+ \- h( i0 ?. V
- lLenIndexTable As Long '0x78* U0 o' d( U% `& V
- lOffWordsTable As Long '0x78) h& o6 S7 C! C) f8 A, R; ]
- lLenWordsTable As Long '0x78* a) t: A. Y& e
- End Type& @6 ?! F* X5 X- P
复制代码 |
|