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

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

Opensource.com

我每天在平板电脑上阅读很多内容。虽然我买了一些电子书,但我很喜欢在古腾堡计划上寻找免费资源;这重新燃起了我对在图书馆书架上浏览,寻找吸引我兴趣的书籍的美好回忆。在 PG 网站上,有很多方法可以通过标题或作者进行搜索,但这假定您已经知道自己在寻找什么。

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

从古腾堡计划网站,您可以链接到离线目录并下载所有免费书籍的纯文本列表,但该文件为 6.6 MB——有点笨重。即使仅 2017 年的列表也有些乏味。因此,我决定从该列表制作自己的网页,包括指向每本书的链接(类似于魔法目录),并将其转换为电子书。事实证明,这比您想象的要容易。诀窍是使用 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]

这显示了文本文件的结构。五位数字是每本书的搜索词——例如,第一本书可以在这里找到: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
De Zoon van 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

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

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

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.