为你的电子书阅读器添加免费书籍的便捷方法

如何从古腾堡计划创建一个新的、免费提供的书籍列表。
261 位读者喜欢这篇文章。
A pile of books in different colors

Opensource.com

我每天在平板电脑上阅读很多书。虽然我买了一些电子书,但我很喜欢在古腾堡计划 (Project Gutenberg)上找到免费的东西;这重新燃起了我对在图书馆书架中浏览,寻找能引起我兴趣的书籍的美好回忆。有各种方法可以通过标题或作者搜索 PG 网站,但这假定你对你正在寻找的东西有所了解。

我曾经使用过 Magic Catalog,但我似乎已经看过或读过那里列出的每一本我感兴趣的书,而且就我所知,该目录大约有十年历史了。仅在 2017 年,PG 就向其目录中添加了 2,423 本书,因此在过去十年中可能添加了 20,000 本书。

从古腾堡计划网站,你可以链接到离线目录 (Offline Catalogs)并下载所有免费提供的书籍的纯文本列表,但该文件为 6.6 MB——有点笨重。即使是仅 2017 年的列表也扫描起来有点乏味。所以我决定从这个列表中制作我自己的网页,包括每本书的链接(类似于 Magic Catalog),并将其转换为电子书。事实证明这比你想象的要容易。诀窍是使用 regex;具体来说,是 Kwrite 中使用的 regex 功能。

首先,去除序言文本,其中解释了关于古腾堡计划的各种细节。列表从那之后开始

~ ~ ~ ~ Posting Dates for the below eBooks:  1 Dec 2017 to 31 Dec 2017 ~ ~ ~ ~

TITLE and AUTHOR                                                     ETEXT NO.

The Origin and Development of Christian Dogma, by Charles A. H. Tuthill  56279
 [Subtitle: An essay in the science of history]

Frank Merriwell's Endurance, by Burt L. Standish                         56278
 [Subtitle: or A Square Shooter]

Derelicts, by James Sprunt                                               56277 
 [Subtitle: An Account of Ships Lost at Sea in General Commercial
  Traffic and a Brief History of Blockade Runners Stranded Along
  the North Carolina Coast 1861-1865]

Comical Pilgrim; or, Travels of a Cynick Philosopher..., by Anonymous    56276
 [Subtitle: Thro' the most Wicked Parts of the World, Namely,
  England, Wales, Scotland, Ireland, and Holland]

I'r Aifft Ac Yn Ol, by D. Rhagfyr Jones                                  56275
 [Language: Welsh]

这显示了文本文件的结构。5 位数字是每本书的搜索词——例如,第一本书可以在这里找到:http://www.gutenberg.org/ebooks/56279。每本书之间用一个空行分隔。

首先,下载文件 GUTINDEX.2017,将其加载到 Kwrite 中,去除序言,另存为 GUTINDEX.2017.xhtml,这样原始文件就不会被编辑,以防万一。你不妨放入 xhtml 序言

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GutIndex 2017</title>
</head>
<body>

然后在文件底部

</body>
</html>

我不喜欢 ~ ~ ~ ~(四个波浪号用三个空格分隔),所以在 Kwrite 中选择编辑 > 替换,调出底部的替换对话框。你不需要选择“模式”为“正则表达式”,但你稍后会需要它,所以继续这样做吧。

在“查找”中,输入 ~ ~ ~ ~,在“替换”中不输入任何内容。单击“全部替换”,它们都消失了,并显示消息:24 处替换。

现在让我们制作链接。在“查找”中,输入:(\d\d\d\d\d)。(你必须包含括号。)

在“替换”中,输入:<a href=”http://www.gutenberg.org/ebooks/\1”>\1</a>

这会搜索 5 位数字的序列,并将其替换为链接信息,其中包括特定的 5 位数字两次,用 \1 表示。现在鼓起勇气点击“全部替换”(记住,如果你犯了错误,你可以撤消此操作),奇迹发生了:2423 处替换。这是一个片段

The Origin and Development of Christian Dogma, by Charles A. H. Tuthill  <a href="http://www.gutenberg.org/ebooks/56279">56279</a>
 [Subtitle: An essay in the science of history]

Frank Merriwell's Endurance, by Burt L. Standish                         <a href="http://www.gutenberg.org/ebooks/56278">56278</a>
 [Subtitle: or A Square Shooter]

Derelicts, by James Sprunt                                               <a href="http://www.gutenberg.org/ebooks/56277">56277</a> 
 [Subtitle: An Account of Ships Lost at Sea in General Commercial
  Traffic and a Brief History of Blockade Runners Stranded Along
  the North Carolina Coast 1861-1865]

见证 regex 的力量!现在让我们创建段落来分隔这些单独的书籍,因为空格和换行符对于 HTML 来说没有任何意义。在这里我们使用书之间的空行。但在我们这样做之前,让我们先消除包含标题的行

TITLE and AUTHOR                                                     ETEXT NO.

我们这样做是因为它们是不必要的,并且第二个标题无论如何都不会与电子书编号对齐。我想去掉这一行和额外的换行符,并且由于只有 12 行,我手动浏览了文件——但你可以通过使用“编辑”>“查找”,搜索“ETEXT”来简化此操作。

现在更多 regex。在“查找”中,输入: \n\n

在“替换”中,输入: </p>\n\n<p>

然后“全部替换”。我保留了两个换行符,以便文本文件更易于阅读。你需要在列表末尾手动添加 </p>。在开头,你会看到这个

 Posting Dates for the below eBooks:  1 Dec 2017 to 31 Dec 2017 </p>

<p>The Origin and Development of Christian Dogma, by Charles A. H. Tuthill  <a href="http://www.gutenberg.org/ebooks/56279">56279</a>

我想将发布日期设为标题,但我也想消除 Posting Dates for the below eBooks:,因为仅显示日期就足够了。在“查找”中,输入:Posting Dates for the below eBooks:,在“替换”中,输入:<h3>(或 <h4>)。

现在让我们修复每个标题的尾随 </p>。你可以手动执行此操作,但如果你感到懒惰,请在“查找”空间中输入 2017 </p>,在“替换”中输入 </h3>。对于这些操作中的每一个,都有做过头的轻微风险,但反馈会告诉你有多少处替换(应该有 12 处)。你始终可以撤消。

现在进行一些手动清理。因为你添加了 <p></p> 标签,并且由于新的 <h3> 标签,在这些标题区域将会有额外的段落标签和不匹配。你可以简单地扫描这些点的文件,或者通过在“查找”空间中输入 <h3>,单击“全部查找”来突出显示它们,然后向下滚动文件以删除任何不需要的标签来获得一些帮助。

我发现 XHTML 的另一个问题是散布在各处的与号。由于 XHTML 比 HTML 更严格,请将 & 替换为 &amp;。你可能需要使用“替换”而不是“全部替换”来单独替换这些。

文本文件中的某些行有一些控制字符,其作用类似于 &nbsp;(不间断空格)。要修复此问题,请在 Kwrite 中突出显示一个——它们显示为带有垂直凸起的淡淡基线——将其粘贴到“查找”中,并在“替换”中输入一个空格。这保持了视觉间距作为文本,但作为 HTML 被忽略(顺便说一句,文档中有 12,586 个这样的字符)。

这是在缩小的浏览器窗口中的外观

Project Gutenberg index

单击链接会将你带到该书的古腾堡计划页面,你可以在那里查看或下载它。

我使用 Sigil 将其转换为电子书,这可能是整个过程中最容易的部分。启动 Sigil,然后从工具栏中选择“添加现有文件”,然后选择你的 XHTML 或 HTML 文件。要为每个月创建一个章节,请向下滚动到每月标题行,将光标放在行首,然后“在光标处拆分”(Ctrl + Return) 以创建 12 个章节。你还可以使用标题创建目录;编辑元数据以赋予其标题,该标题将显示在你的电子书阅读器中(你可以将自己设为作者)也是一个好主意。最后,保存文件,你就完成了。

祝你阅读愉快!

标签
Greg Pittman
Greg 是肯塔基州路易斯维尔的一位退休神经科医生,长期以来对计算机和编程感兴趣,从 1960 年代的 Fortran IV 开始。当 Linux 和开源软件出现时,它激发了学习更多知识并最终做出贡献的热情。他是 Scribus 团队的成员。

8 条评论

假设存在空行可能会让你误入歧途。这是来自 GUTINDEX.ALL 的一个片段

穿越波斯和俾路支斯坦的印度之旅,作者:Harry De Windt 10974
已故的 Null 夫人,作者:Frank Richard Stockton 10973
与西伯利亚的“顽固分子”在一起,作者:John Ward 10972
Dik Trom 之子,作者:Cornelis Johannes Kieviet 10971
[语言:荷兰语]
实用主义,作者:D.L. Murray 10970
[F.C.S. Schiller 博士的序言]

那里没有空行。还有许多其他地方也发生了这种情况。

这绝对是旧索引的问题。较新的索引似乎形成得更一致。我认为有一些选项可以尝试缓解这种情况,例如在每个 ']' 之后添加换行符(或可能是 \n)。我主要只是通过仔细阅读每个条目来忍受这一点。至少对我而言,在 GUTINDEX.ALL(一个 6.6MB 的文本文件)中手动编辑它是不可行的。

回复 作者:Mike Evans (未验证)

再次尝试
(或可能是 $lt;/p$gt;\n$lt;p$gt;)
很难让 HTML 显示在这些评论中。

回复 作者:Greg P

这是可能证明是此问题的解决方法。这是一个在 GUTINDEX.ALL 文件上运行的 Python 脚本,你可能在从文件中去除序言信息后执行此操作

#!/usr/bin/env python
# -*- coding: utf-8 -*-

linelist = []
gutfile = 'GUTINDEX.ALL' # 确保你获得了完整路径
for line in open(gutfile).xreadlines()
if len(line) > 5
if ((line[-4].isdigit()) and (line[-3].isdigit()))
line = '' + line
linelist.append(line)
myfile = open('gutindexmod.all', 'w')
for eachline in linelist
myfile.write(eachline)
myfile.close()

这样做是查找以数字结尾的行,并在这些行前面加上 HTML 换行标记。扫描结果文件,它似乎工作得很好。如果你要然后处理该文件,则必须允许电子书编号小于 5 位数字的情况。

回复 作者:Mike Evans (未验证)

在行
line = '' + line
单引号之间应该有一个 xhtml 换行标记——不会显示在评论中。

回复 作者:Greg P

缩进也不会过来(抱歉)。

回复 作者:Greg P

我应该在最后补充说,如果你需要 .mobi 文件(用于 Kindle),可以使用 calibre 轻松完成。

Greg,这是一篇很棒的文章,非常感谢!

Creative Commons License本作品根据 知识共享许可协议 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.