Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2359319
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2007-11-24 02:26:16

书签即目录, 列在左边方便在电子书中导航的东西. 如果一本书真的对你有价值, 而PDF里面本身没有目录页, 或者即使有目录也是图片, 没有链接的话, 值得对你经常要参考的PDF做一个书签.

我们以<> 为例, 462页, 图片版的PDF文件, 显然是从超星的PDG制作的. 也可能就是我本人制作的, 忘了, 直到最近经常看这本电子书, 发现颇有价值, 值得雕琢一番.

1. 用老马的 FreePic2PDF 抽取现有书签, 即使它是个空的, 这可以生成两个稍候用于制作书签的文件:
FreePic2Pdf_bkmk.txt
FreePic2Pdf.itf

其中第一个文件是放置书签定义的文件, 现在是0字节. 因为要制作的PDF没有任何书签.


2. 好了, 现在制作书签的两个文本文件已经抽取完毕, 但现在还不是时候. 接下来想办法得到目录的文字和页码.

3. 得到要OCR的目录页的图片文件, 下面是 Acrobat 7 里的菜单操作.
先打开要制作目录的完整PDF文档, 提取包含目录的页面, 另存为图片文件, 这会每一个PDF页面保存一个文件. TIFF或JPG 均可. 但下文会看到, 紫光OCR对图片格式和内容有时候很敏感.


4. 中文OCR
工具: 紫光9.0
这个不用多说了, 在中文识别的同类产品中, 经常与汉王等产品对比, 这个识别率是最高的. 值得一提的是这里只用它来OCR中文, 英文它不在行, 效果只能说还过得去, 但夹杂在中文里的英文也不可能单抠出来用abbyy识别了, 不准确的手工校正. 注意下面我特意把后面页码部分的数字给排除在外了

对本文中的举例来说, 紫光还是在第6个文件上失败了, 目录页一共是7页, 上面的是我失败之后, 单独把TIF另存为JPG 再重新OCR最后两页的截图, 一开始把第6页另存为BMP, 再OCR, 还是弹出一个程序错误的对话框, 点"确定"把这个对话框关闭之后, 紫光就得用进程管理器强制杀死了, 否则既不能正常退出, 也不能重新识别. 具体错误没抓屏. 反正对图片的内容有时候好像恰好碰到它的临界值一样. 因为JPG有损压缩的特性, 往往可以有效地绕过这一点.


5. 中文文本.

下面是把OCR过的文本 COPY 到一个编辑器中, OCR不可能100%准确的, 要手工再校正.

要注意添加图片文件时, 紫光有一个奇怪的BUG: 你选择从1到7多个文件时, 第7个文件排在第一位, 但接下来第2到第6个文件顺序倒是正确, 用鼠标拖动第7个文件到最后可以把顺序调整过来. 切记, 否则不留神容易把识别后的文本顺序弄反.

6. 页面数字的OCR.
当然用 Abbyy Fine reader 8.0 我所用过的最好的英文OCR, 识别率么, 做超星的PDG格式转出来的目录页码数字, 光说数字部分, 几乎是100%. (写这个教程的同时做的这本书, 识别率又是100%)

注意要手工圈选后面的数字页码部分, 排除前面的汉字, 术业有专攻, 汉字它不在行滴. 对于制作目录来说, 一般目录页也就是3-15 页, 这个例子中是7页, 手工逐个圈选可以忍受.

全部圈选之后, 点那个"Read All", 接下来就是把结果送到系统剪贴板上:

这个比起紫光保存结果的办法来说就方便得多, 不需要我频繁施展CV大法(CTRL+C, CTRL+V)了.

7. 整理文字版的目录 -- 汉字部分.
刚刚OCR之后出来的文字版目录惨不忍睹:

后面乱七八糟的字符都是典型的目录的一堆点经过OCR识别后的结果. 下面我们用一个正则表达式搞定它们:

%s#[~!::,t..,。·-一二四佗谭利巧朋夕另刃貂石万卜州14‘’“”…]】%、0-9]*$##

[] 之中的部分是我制作电子书的经验收集, 那些个目录中的点点, 经过OCR之后往往被错误地识别为这些字符. 这一招之后, 整个世界就清静了请多:


当然, 并不是完全没问题了, 后面的部分显示还有个别的没有正确识别出来:

目前对付这种个别现象的办法就是把这次新出现的怪字符添加到前面那个正则表达式的[]集合中去, 当然这个集合要小心维护, 下次做电子书时直接用就行了.

再接下来就是对目录文字进行校对了, 我的办法是直接用眼睛看, 句子通顺否, 有没有错别字, 是不是插入了怪怪的标点符号等等, 发现异常就改, 一个是靠小学积攒下来的造句功力, 一个是句子顺不下来是直接用ACDSEE 查看图片, 或看PDF也一样. 这之后可以得到正确的文字版目录了.

8. 整理文字版的目录 -- 整合页码数字部分.

8.1 Abbyy OCR后的直接结果
这上面是 Abbyy OCR之后得到的数字页码, 别担心那些黑方块, 下面的vim命令之后, 剩下的数字竟然全是正确的:

:%s#[^0-9 ]##g

:g#^\s*$#d

结果是:


上面灰底选中的效果需要在vim中用 :set ve=all 之后方可, 这对合并数字页码与文字的操作是必需的. 按列方式把它 copy到下面的文字版目录中:

8.2 合并数字页码


8.3 书签文件格式
===============

可以看到, 原来分别用紫光和Abbyy OCR之后的内容现在终于中西合并了. 但是, 这还不是制作PDF书签的软件 FreePic2PDF 所要求的格式, 现在把这种格式简单说一下:

1. 文本格式

2. 汉字要存为GB2312 编码, 如果误存成了utf-8 看后面的效果图有多惨

3. 用表示书签的层次深度, 一个一个层次, 目录的文字与最后的数字之间也是用一个


现在要把上面参差不齐的内容做成这种格式.

8.3.1

:%s#^\s*



:%s#^\d\+\%(\.\d\+\)[^.]#^I&#


:%s#^\d\+\%(\.\d\+\)\{2}[^.]#^I^I&#


虽然^I看起来还是很丑陋, 但它是正确的格式了, 此时要检查一下各个小节号是否正确, 这个地方很容易出错, 但做了这一步骤之后错误会很容易看出来, 因为那些有错误的地方都没有正确缩进. 原因多数是因为紫光把数字识别错了, 比如用汉字的全角圆点代替了英文的句点号, 用小写字母l代替了数字1等等.

再把结尾的空格去掉:

:%s#\s*$#


把数字页码前的空格用代替:

:%s#\s\+\ze\d\+$#^I#



这个基本上是正确的格式了, 还差一点在:

注意画红线的地方, 章节标号之后, 与目录文字之间要有一个空格.

:%s#^\s*\%(第\d\+章\|\%(\d\+\%(\.\d\+\)\+\)\)\zs\s*# #gc



9. 制作书签
记得确保先把 Acrobat里我们要制作书签的那个PDF文件关闭, 然后点这里的"开始"


之后, 用Acrobat打开, 可以看到书签了:
怎么是乱码? 因为刚才的书签文件在vim里被存成了utf-8格式了

:set enc=cp936

:write

之后, 再做一次. 发现汉字已经正确了.

注意实际制作过程中有一些细小的步骤被省略了, 比如书签文本文件中页码在PDF的页码中有一个偏差, 需要把这个偏差加到每一个页码数字上去, 这个例子中偏差是17:

:%s#\d\+$#\=submatch(0)+17

然后重新制作即可, 做好书签之后, 至少要点击每一章的书签, 看它是否定位到正确的页码了. 对这个例子, 很幸运, Abbyy把数字全部识别正确了, 所以章的标题经核对都是正确的了. 不过结果的PDF文件有13M, 在这里传不了.

阅读(1832) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~