TA的每日心情 | 擦汗 2021-3-8 17:59 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
楼主 |
发表于 2014-2-11 18:15:25
|
显示全部楼层
本帖最后由 lixun305 于 2014-2-13 11:59 编辑 $ _( v/ ?2 q6 ~5 B. |+ @
' [& D5 }% H0 b' S0 r粗略程序已经上传: SqLite2MDB.exe ,有啥bug请交流或告知,千万别骂娘。4 L8 }/ ?, g# H6 | F1 E
0 |3 J" k0 |- o" t, {8 [* N现代汉语词典第六版.mdx制作过程:3 J1 ]2 |2 L/ ~: `' ]
网上有好几个 “现代汉语词典.apk",重名,也没具体研究过,但都号称支持第六版,这就够了,咱就从这个抓起(版权问题归原作者,这里纯研究,不过好像他们的词库都几乎一样,这个版权怎么说呢?)。6 [9 O4 w! S- v0 l2 n
简言之+ n- I! R2 i: A! L( k8 I
1. 网上下载apk文件
8 R0 c3 b9 o2 F% i) T2. 从其中提取出词库( g$ `" d$ R7 [/ Y1 S$ v0 A: Z
3. 进行整理2 t+ U& M: W# w( l4 j
4. 转换成 mdx 文本
+ C0 B9 y" t6 V0 O4 w5. 用mdxbuilder生成。
! l% u/ @% R1 g5 |$ j
% T# g1 T, o6 x; s* }( p$ {详细制作过程待续。。。
% ~9 r0 v5 s* a0 f; [& t4 J* c
# y; y. c1 n% G5 u( G* b不一定有通用性,不喜勿喷。。。
# M5 r- o* N4 H0 \% n/ V( q) G% p2 {4 x" q. \5 B
1. 网上下载apk文件
; {% J- t4 C' t% A7 k" Aapk文件就是android的标准可执行文件,点击就可以安装到手机上,类似于pc下的.exe文件。究其根本,android源于开放系统linux(我不怎么懂,姑且这么说,勿喷)。所以,apk文件本质上就是一个zip压缩包。 下载到 现代汉语词典.apk后,更名为 *.zip,解压到某一个文件夹下,看到一堆目录和文件,有一个文件夹 assets ,里面是 apk程序的一些数据文件, 在资源管理器下用 详细信息 方式查看,然后按照大小降序排列,一般情况下最大的前几个文件就是词库文件,例如 我看到的:
) q; R! ?9 d- |6 |6 a+ h* z apk1:6 {% B% ~2 k* K9 i9 h1 z
xingkai.ttf 6 ^4 _7 S8 |3 Y' Z; N4 q8 s: X1 H
story.dll8 m3 o* G g+ K0 b
apk2:: i# F: J% j L \
dictionary.dll: M3 T% F4 d3 i: ` s7 R4 e
当然,都是穿着马甲的。
# q7 l( d4 }6 \ 用ultraedit打开,可以看到:
/ }3 F* H3 o5 u ]" l 伪装成 字体文件的 xingkai.ttf 实际打头的字节是 PK,那么,他就是一个zip文件,把他更名为 xingkai.zip,解压缩,得到
+ T, b+ m+ ]( x, o bushou,dat nxbzdxh.apk, nxbxd.apk nxbchina.dat ,这几个文件是用扩展名穿的马甲,用ultraedit一一查看,好了,均是SQLite format打头,那么,这四个文件都是 SQLite格式的数据库文件,将他们均改名为 *.db文件,用SQLiteDev.exe查看,成功打开,分别是 部首词库,新华字典, 汉语词典 成语词典。 `9 w* n9 g9 C; M+ g
伪装成系统文件的 story.dll 文件用emeditor打开,发现就是一个文本文件,当然,是unicode格式的,用一般的文本查看,是乱码。& O1 g+ U: j4 ]' A
伪装成系统文件的dictionary.dll用ultraedit打开,也是pk打头,更名为zip文件,解压,看到xinhua.db xiandai.db,用ultraedit查看,都是 SQLite format,这个倒是干脆,懒得二次伪装了,那就不客气了,收下! 用SQLiteDev.exe查看,分别是新华字典词库,汉语词组库(包括成语,词组,故事).7 c$ T) M% `; J5 L6 S
这就是通过两个apk文件,得到两个几乎一样的现代汉语词典第六版词库的方法。
' h1 r- z0 [# C6 X/ N# N$ ]2. 5 ~0 `2 U( b! |* d5 i- g3 h' ]
得到 SQLite格式的词库,虽然可以用SQLiteDev.exe查看,编辑等,但毕竟很不方便,我也没有认真研究SQLiteDev的心思。毕竟做不少特殊的工作,用通用程序SQLiteDev是无法满足要求的,因此,还是自己着手编程来的灵活。 这就是SqLite2MDB.exe(下面简称sq)编制的初衷。" [9 p. ` ~( U: s L o! V# A
通过sq,将sqlite格式转成我熟悉的mdb格式,就可以用以前的积累,灵活处理了。sqlite数据库的处理源代码可到 www.codeproject.com中搜索。
/ Y" Y# |; h8 Q4 K( k7 i通过sq, 可选择sqlite数据库中的一个或多个表格,转化成的mdb文件也将以同样的名称创建这些表格。此时得到的mdb词库和原来的sqlite格式是一样的,并没有做什么处理。 相当多的字段都是乱码或者无法识别的16进制数字。
@3 D( O9 l5 f9 i) e3. ' L8 `8 Z) m( \) O. Q0 r0 H# s
通过sq,可以将2中转换出来的mdb数据库加载,在列表中可以看到10条或者更多的记录。一般情况下,有很多字段都是乱码或者无法识别的16进制数字,分两种情况:
9 I9 h* Z5 H6 A2 r% |! x乱码字段:这些一般是unicode编码,此时可以点击unicode ->ansi,就会将每一个记录对应的该字段转化成可以识别的字符。注意,转换之前备份一下mdb文件,这个不可逆转啊。转换前请选择要转换的一个或者多个字段。 J5 V6 s. m4 [' I) c8 i& b& C
无法识别的16进制数字字段:这些一般是utf8编码,此时可以点击UTF8 ->ANSI,就会将每一个记录对应的该字段转化成可以识别的字符。
+ q; y2 u0 `0 u+ X可能有些软件将这些词库做成加密的或者通过什么算法处理过了,对不起,只能放弃了。
6 Z2 f7 T+ F0 g# f( I可能得到了几个数据库文件,可以都转换成mdb文件,然后用microsofit access打开并合并,这个多个数据库的合并我就没有做到程序中,很繁杂,我也觉得没必要。
; G) U' {. r; W) f3 c4 A( B得到的词库,大多表格名称或者表格的某些字段名称不合意,可以在access中更改,删除等,整到自己满意为止。
5 X! f. T5 S- j: i) |& F! l4. 转换成mdx词库文本文件.1 O5 G* i9 P2 Y+ m( b4 e
这个应该是大家最关注的。
$ l3 K1 h+ h( O7 t Z8 o转换前要明确一些任务:(当然,直接ok, ok下去,也会得到一个缺省的mdx文本).- Y# \7 b: L4 o% F3 b F. n" i
(1) 要将mdb文件中的哪些表格转到mdx中。 例如,mdb中新华字典,成语词典,现代汉语词典等,可以选择一个或者多个。. y. f/ R+ `) _7 ^& Z1 }; }. S
(2) 针对某一个表格,要将哪些字段的内容转到mdx中。 例如新华字典有 _id 汉字 拼音 解释等字段,_id是为了排序需要加的,没有必要出现在mdx中,可以勾掉。 如果不处理,就是选择所有字段。5 r2 u% {0 R( Y( U' k
(3)针对某一个表格,要将哪些字段的内容作为索引。 例如新华字典,希望做成的mdx文件,以 汉字 字段为索引,没人愿意以 1 2 3 4 .....为索引,mdict 搜索的时候,左列如果一堆数字除了挠头有啥用。 索引字段也要勾选,不勾选默认是第0个字段。% h. N% Z7 x- f; c
操作步骤:
/ n$ q- w& t' Q) N' b' S o a. 打开一个mdb文件,将(2) (3)中的工作做好,注意是对每一个表格都要做,程序中会记住你的选择。
" x( C" r; f3 n4 z7 x; N b. 选择表格。 V5 F1 c9 X. s2 G; I6 R
c. 点击 mdb转换成mdx文本 按钮即可。2 d2 b' k- A8 f4 y5 Q) Q6 m
注意:生成两个文件(例如选择了表格 xhzd),xhzd.txt xhzd_info.txt。前者为mdx文本文件,后者是mdx文件的“关于词典”时出现的内容,里面是一些信息,包含,文本从哪些表格转换而来,有多少记录,转换的时间,转换作者(用过mdcit的都知道把,就是:about后出现的)。 xhzd.txt 是纯文本方式,如果原来的词库含有声音、图片等复杂格式,此程序概莫能助。4 T3 H; Q8 `( I U" Q
4 j% c3 e' Y0 ?3 j4 E
5. 有了mdx文本,用mdxbuilder即可转换成mdx文件,可将xhzd_info.txt的内容粘帖到mdxbuilder 的 Description 后的编辑框中,当然可以贴上自己的内容。
3 i) H* X) k: S1 j, B |
|