如何从djvu及其他电子书格式提取文本(可能用Python)

13 投票
3 回答
8645 浏览
提问于 2025-04-15 14:55

我有一堆电子书,格式包括djvu、pdf和chm,我想找个办法在这些书的内容里搜索关键词。我查了一些资料,发现有几种方法可以解析pdf的内容,但似乎没有办法把djvu格式的内容转换成文本。请问,有谁知道怎么把djvu的内容解码成文本,这样我就能方便地搜索了?

谢谢

3 个回答

1

当然,DjVuLibre SDK可以让你访问文本层——前提是这个文本层存在(并不是所有的DjVu文件都有文本层;很多都是纯粹的栅格图像)。

另一种解决方案可能是基于IIS技术来建立你的索引。CamiNova提供了一个免费的IFilter,你可以用来实现这个功能。

[http://dev.caminova.jp/beta/djvu-wic/][1]

3

python-djvulibre 是一组 Python 绑定,用于 djvulibre 这个开源的 djvu 实现——我没有试过,但看起来应该能满足你的需求。

9

假设你的djvu文件里有经过OCR处理的文本,在Linux上快速提取这些文本的方法是使用Popen来运行djvutxt,然后获取它的输出。

.djvu文件里的文本是用一种专门的压缩算法bzz压缩的,这种算法没有简单的C接口可以直接在Python中使用。它是基于某个框架的C++实现。

顺便提一下,我为Calibre贡献了从OCR处理过的.djvu文件转换的功能,这个功能就是用djvutxt来实现的。不过,如果djvutxt不可用,它会退回使用我自己写的纯Python解码器(速度非常慢)。所以如果你不能使用djvutxt,可以用我的代码。

我还没有把Calibre的Python源代码单独发布出来。但你可以下载并解压Calibre的源代码后找到:

curl -L http://status.calibre-ebook.com/dist/src | tar xvJ
find . | fgrep djvu

相关的文件是djvu_input.pydjvu.pydjvubzzdec.py

撰写回答