4

我需要任意 HTML 文件(例如,博客文章)的纯文本表示。到目前为止,这不是问题,有几十个 HTML 到 txt 转换器。但是,段落中的文本(读作“p元素”)应该在纯文本视图中对齐(到一定数量的列),并且如果可能的话,使用连字符以提供更好的可读结果。此外,生成的文本文件必须是 UTF-8 或 UTF-16。

我可以使用 XSLT 进行简单的纯文本对话,这几乎是微不足道的。但是文本的合理性超出了它的可能性(不太正确,因为 XSLT 是图灵完备的,但足够接近现实)。

FOP和 XSL-FO 也不起作用。他们按照要求做,但是 FOP 的纯文本输出很糟糕(开发人员说,它不适合这种用途)。

我还尝试了 HTML -> XSLT -> Roff,但我坚持使用 groff,它的 Unicode 支持远非最佳。因为有像省略号(“...”)这样的字符和印刷正确的引号,所以在 XSLT 样式表中告诉 groff 几十个 Unicode 字符的转义序列是相当麻烦的。

另一种方法是转换为 TeX 并以纯文本形式输出,但我以前从未尝试过使用 (La)TeX。

也许我错过了一些非常简单的事情。有谁知道,我怎样才能实现上述目标?顺便说一句:解决方案最好在没有 root 权限的情况下使用 PHP、Python、Perl、XSLT 或在半体面的 Linux 发行版中找到的任何程序。

4

3 回答 3

4

试试 Python。使用BeautifulSoup解析 HTML。textwrap模块将允许您格式化文本。

但是,缺少两个功能。为了证明文本的合理性,您需要在每一行中添加空格,但这应该不是什么大问题(请参阅此代码示例)。

对于断字,试试这个项目

于 2009-10-30T09:12:38.623 回答
2

如果您熟悉 Emacs,您可以在Emacs-W3M(即M-x w3m-find-file foo.html)中打开 HTML 文件,将呈现的页面保存为纯文本文件,然后调用M-x set-justification-full它。

你甚至可以编写一个小函数来完成这项工作:

(defun my-html-to-justifed-text (html-file text-file)
  "Convert HTML-FILE to plain TEXT-FILE."
  (find-file html-file)
  (w3m-rendering-buffer)
  (set-justification-full (point-min) (point-max))
  (write-file text-file))

(my-html-to-justifed-text "~/tmp/2.html" "~/tmp/2.txt")
于 2009-11-10T16:04:49.393 回答
0

链接lynx可能值得一试,请参阅-dump开关。然后,您可以使用iconv或类似的东西轻松地单独解决编码部分。

于 2009-10-30T09:16:30.817 回答