|

楼主 |
发表于 2013-12-20 15:45:34
|
显示全部楼层
本帖最后由 惟吾无为 于 2013-12-30 18:56 编辑
& u$ z' }9 r! R4 A
) d" ]* L. ~" f" Q8 z& ^一些细节或者备注。有人可能希望知道。
7 A- T0 P$ J) a% `( J) X1. 1小时解析转储。# S2 ?- O W5 W8 ~5 E. V
* 处理解压后的单个xml文件. 大小好像是4196M
! p' H7 `% O+ L/ e+ v9 d* lua只能使用单核, 我的cpu 1.6 GHz. 你们的高些会快些.# z8 }" Y/ P! W
* 内存使用近1G, 峰值可能1.3G. 我的总内存3.5G. 可用3G. 你们的内存应该够吧?
; _# L( a/ N( G7 H7 z! {* 处理了 各种列表(\n[*#:; =-]), 链接, 粗斜体, 表格,
/ g: ]6 [0 J5 i' [1 \/ e9 P \* 模板未处理, 公式未处理. 引用未处理, 分类未处理.% j4 N; S: j) B' D
* 没有字词转换. 所以还是繁简混合的.& W3 `8 l% a& E* y* b. @$ P& Q
0 i" x( p/ M5 I5 V/ v
2. 数学公式 (update@20131223)# C6 Q+ W/ D' K
我打算先写出个简单的解析器. 只要支持基本格式就够了. 并针对enwiki做下优化.) L. R5 ~0 d) G( k/ r5 V% P
* 调用texvc渲染公式为png.
) T( f1 Q7 d- M/ H* 公式预处理: 替换连续的空白字符([ \t\n]+)为单个空格( ). 并去掉前导空格. 后缀不处理.0 O3 A) `6 K" T+ A) H
* 可以读取转储文件或公式列表, 生成公式的md5值对照表(hashfile)及其图片., h# P& f' t& B2 M9 ~4 P; p$ J+ z; |
* 解析器需要先缓存 公式md5对照表(hashfile) 才能生成图片链接.2 A6 G2 Z% r3 t3 S6 S/ g/ Q
* 未缓存的公式会临时解析, 失败的直接丢弃. 不会导致解析中断.3 D3 j' |9 C" N# g) m' p
* 目前公式转换器仅使用单核. 我的电脑转换7.3w个公式为图片花了近2个小时." G/ n _9 J5 }1 e" c
* 12.24测试使用多核(我的4核). 结果如下. 99.88% | time: 39m04s, 3s | formula ok: 85036 error: 109 dup:38661(根据我的预处理方式发现的重复公式)2 W. J* n/ `# l0 l
实际生成图片73110(我暂时没办法实现texvc的预处理过程, 所以重复的有85036-73110个). ' g* w N+ o0 d" L/ g
这个使用多核是通过连续创建 逻辑cpu个数*2 的进程来实现的. 我的lua脚本还是单核的. 依次读取那些进程的输出(会等待进程结束), 所以花费的时间大于半小时., s i& W9 D$ Z) x1 m8 p) u, f
* 12.24-17:00 优化了下, 好像之前的有些重复公式没找到. 100.03% | time: 33m50s, 0s | formula write: 75392 error: 104 dup: 48309' M3 X' ~+ s& |6 V+ j! Q4 [
当然, 前面的100.03%. 就无视了吧...3 H* _7 I1 ^$ t. [ L* S
3 k2 ]: |& ] R3. 多文件支持(update@20131228)
; K- q, h, Z* `0 e5 h' E# J之前的脚本不支持多文件. 这几天总算在原有的基础上加入多文件支持了.) d% H% ^0 M6 E7 C" `8 X2 U
今天测试了enwiki的数学公式. 结果tmpfs连续两次因为inode用尽而"空间不足". 这次才终于发现不是因为内存用尽... 惭愧. 今天一天算是浪费了...
! u. ?2 }) G. p2 G/ T; t* V# Qenwiki 公式转图片的进度 72.91% | time: 2h15m, 50m09s | formula write: 219013 error: 243 dup: 125078
P/ a, u+ W2 L我现在又重新开始转了. 又要重复读一遍所有的xml文件... 估计又得一个半小时才能完成...
* N; D2 G% s6 v9 W- h" Q
" b9 @: j' x; C1 d/ y* R$ W解析器也加入多文件支持了. 严格按照参数所给的文件顺序读取. 用户可自行调整文件顺序.
* n2 V W0 |' e3 M! C/ `解析器仍是单线程的, 但可开多个进程, 各自解析不同的xml.
4 a5 z: g! U+ p+ U5 k0 [- }& ~6 g: r
我这几天也写好了xml分割脚本和文本合并脚本.. M/ k! m* N% X7 g2 Y
3 e% P6 \' t1 q, Q7 _7 R8 J4. 危机(update@20131229)
1 n% P) C- Q2 ]$ c% `( h; b% A6 q1. lua默认不支持大文件. 大于2G的没法正常操作. 我的lua是自己编译的, 开启了大文件支持...
- M, L& x4 g, a2. 还有dofile时的路径转换也没考虑到windows...文件打开时没加b标记. 也可能有问题... 我会尽量照顾下windows用户的.* v" y/ ?# z+ e; l8 t1 L
1 g6 z- y% O7 o: _0 Q
5. 新的希望(update@20131230)
' ^- ~+ S$ L3 v经过4个小时的努力, 终于在18:20编译出了支持大文件读写的windows版lua.5 A% r% c# Q/ `/ `- t
9 X7 Q; e) I+ f) }7 i) R
... |
|