在我最近的文章《一种将免费图书添加到您的电子阅读器的便捷方法》中,我解释了如何将 Project Gutenberg 的纯文本索引转换为 HTML 和 EPUB。但正如一位评论者指出的那样,在较旧的索引中存在一个问题,即各个图书并不总是用额外的换行符分隔。
当我处理 2007 年的索引时,我非常清楚地看到了这个问题的严重程度,您会看到这样的情况:
Audio: The General Epistle of James 22931
Audio: The Epistle to the Hebrews 22930
Audio: The Epistle of Philemon 22929
Sacrifice, by Stephen French Whitman 22928
The Atlantic Monthly, Volume 18, No. 105, July 1866, by Various 22927
The Continental Monthly, Vol. 6, No 3, September 1864, by Various 22926
The Story of Young Abraham Lincoln, by Wayne Whipple 22925
Pathfinder, by Alan Douglas 22924
[Subtitle: or, The Missing Tenderfoot]
Pieni helmivyo, by Various 22923
[Subtitle: Suomen runoja koulunuorisolle]
[Editor: J. Waananen] [Language: Finnish]
The Posy Ring, by Various 22922
我的第一反应是:“好吧,在需要的地方添加换行符有多糟糕?” 答案是:“非常糟糕。” 在以这种方式工作了几天,直到手部痉挛变得难以忍受时才停止后,我决定重新审视这个问题。我以为我可能需要进行多次查找-替换操作,可能以 [Language: Finnish]
或许只是 ]
括号之类的东西为键,但这似乎几乎和手动方法一样费力。
然后我注意到一个特殊的特征:对于大多数需要换行符的情况,换行符后立即跟随着下一个标题的首字母大写字母。对于行中仍然有关于图书的更多信息的情况,换行符后跟随着空格。所以我尝试了这样做:在 KWrite 的“查找”文本框中(记住,我们正在使用正则表达式),我输入了
(\n[A-Z])
在“替换”中,我输入了
\n\1
对于括号内的每个匹配项,我添加了一个前导换行符,保留了首字母大写字母。这非常有效。少数失败的情况涉及到以数字或引号开头的书名。我手动修复了这些,但我可以输入这个
(\n[0-9])
在“查找”中再次运行“全部替换”。 稍后,我也尝试了引号——这需要一个反斜杠,像这样
(\n\”) and (\n\’)
一个副作用是,许多列表被三个换行符分隔。 这对于 XHTML 来说不是问题,但通过在“查找”中输入可以轻松修复
\n\n\n
在“替换”中输入
\n\n
回顾使用新功能的过程
- 删除前言和其他您不需要的文本
- 使用上面显示的方法添加额外的换行符
- 将三个连续的换行符转换为两个(可选)
- 在开头和结尾添加适当的 HTML 标签
- 基于查找
(\d\d\d\d\d)
创建链接,替换为<a href=”http://www.gutenberg.org/ebooks/
\1”>\1</a>
- 通过查找
\n\n
并替换为</p>\n\n<p>
来添加段落标签 - 在结尾处的
</body>
标签之前添加一个</p>
- 修复标题,在每个标题前加上
<h3>
并将</p>
更改为</h3>
– 较旧的索引只有一个标题 - 使用
.xhtml
后缀保存文件,然后导入到 Sigil 以制作您的 EPUB。
接下来出现的问题是当电子书编号仅包含四位数字时。 这是一个问题,因为列表中有许多四位数字,其中许多是日期。 答案来自于修改上面列表中的第 5 点中的策略。
在“查找”中,输入
(\d\d\d\d)\n
在“替换”中,输入
<a href="https://open-source.net.cn/%5Bhttp%3A//www.gutenberg.org/ebooks/%5D%28http%3A//www.gutenberg.org/ebooks/%29%5C1">\1</a>\n
请注意,\n
在括号之外; 因此,我们需要将其添加到新替换的末尾。 现在我们看到了这种新方法导致的另一个问题:一些电子书编号后面跟着 C(已版权)。 因此,我们需要在“查找”中再进行一次操作
(\d\d\d\d)C\n
在“替换”中输入
<a href=”[http://www.gutenberg.org/ebooks/](http://www.gutenberg.org/ebooks/)\1”>\1</a>C\n
我注意到,从 2002 年的索引开始,列表之间缺少额外换行符不再是一个问题,并且这种情况一直持续到最早的索引,因此步骤 2 和 3 变得不必要了。
我现在已经将整个过程追溯到最早的 GUTINDEX.1996,并且这个过程一直有效。 在某个时候,出现了三位数的电子书编号,因此您必须开始查找
(\d\d\d)\n
然后 (\d\d\d)C\n
然后稍后
(\d\d)\n
然后 (\d\d)C\n
最后
(\d)\n
唯一的故障是在一本书,电子书编号为 2 的书中,日期 “1798” 被三位数的搜索捕捉到了。 至此,我现在拥有了整个 Gutenberg 目录的电子书,不包括目前正在添加的新书。
故障排除和一个奖励
我强烈建议您通过尝试在浏览器中加载 XHTML 文件来测试它们。 您的浏览器应该会告诉您 XHTML 是否格式不正确,在这种情况下,该文件将不会显示在您的浏览器窗口中。 我发现的两个特殊问题,最初忽略了我自己的建议,是由不正确的字符引起的。 我从我的第一篇文章中复制了链接规范标签。 如果您这样做,您会发现打字机引号被替换为印刷体(弯引号)。 修复这个问题只是一个查找/替换的问题。
其次,列表中有许多 & 符号 (&),这些符号需要替换为&以便浏览器能够理解它们。 一些最近的列表也使用了 Unicode 不间断空格,这些空格应替换为常规空格。 (提示:复制一个,将其放入“查找”中,将常规空格放入“替换”中,然后“全部替换”)
最后,可能潜伏着一些重音字符,浏览器反馈应该有助于定位它们。 示例: Ibáñez 需要改为 Ibáñez。
现在是奖励:一旦您的 XHTML 格式良好,您就可以像在电子阅读器上一样使用浏览器来梳理 Project Gutenberg。 我还发现,在引号被修复之前,Calibre 无法正确创建链接。
最后,这是一个单独网页的模板,您可以将其放置在您的系统上,以便轻松链接到您系统上每年的列表。 确保您修复了个人目录结构和文件名的位置。 另外,请确保所有这些引号都是打字机引号,而不是弯引号。
<?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>GutIndexes</title>
</head>
<body leftmargin="100">
<h2>GutIndexes</h2>
<font size="5">
<table cellpadding="20"><tr>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.1996.xhtml">1996</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.1997.xhtml">1997</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.1998.xhtml">1998</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.1999.xhtml">1999</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2000.xhtml">2000</a></td></tr>
<tr><td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2001.xhtml">2001</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2002.xhtml">2002</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2003.xhtml">2003</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2004.xhtml">2004</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2005.xhtml">2005</a></td></tr>
<tr><td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2006.xhtml">2006</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2007.xhtml">2007</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2008.xhtml">2008</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2009.xhtml">2009</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2010.xhtml">2010</a></td></tr>
<tr><td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2011.xhtml">2011</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2012.xhtml">2012</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2013.xhtml">2013</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2014.xhtml">2014</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2015.xhtml">2015</a></td></tr>
<tr><td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2016.xhtml">2016</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2017.xhtml">2017</a></td>
<td><a href="https://open-source.net.cn/home/gregp/Documents/GUTINDEX.2018.xhtml">2018</a></td>
</tr>
</table>
</font>
</body>
</html>
评论已关闭。