来自HTML的合理纯文本

时间:2009-10-30 09:01:46

标签: html plaintext justify

我需要任意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发行版中找到的任何程序。

3 个答案:

答案 0 :(得分:4)

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

但是缺少两个功能。要证明文本的合理性,您需要为每一行添加空格,但这不应该是一个大问题(请参阅this code example)。

对于连字符,请尝试this project

答案 1 :(得分:2)

如果您熟悉Emacs,可以在Emacs-W3M中打开HTML文件(即M-x w3m-find-file foo.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")

答案 2 :(得分:0)

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