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

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

Opensource.com

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

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

从古腾堡计划网站,您可以链接到离线目录并下载所有免费书籍的纯文本列表,但该文件为 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 的片段

A Ride to India across Persia and Baluchistan, by Harry De Windt 10974
The Late Mrs. Null, by Frank Richard Stockton 10973
With the "Die-Hards" in Siberia, by John Ward 10972
De Zoon van Dik Trom, by Cornelis Johannes Kieviet 10971
[语言:荷兰语]
Pragmatism, by D.L. Murray 10970
[Dr. F.C.S. Schiller 的序言]

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

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

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

这是可能证明是此问题的解决方法。这是一个在 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.