【问题标题】:Stripping HTML but retaining block/inline structure剥离 HTML 但保留块/内联结构
【发布时间】:2010-12-09 09:11:29
【问题描述】:

我想将 HTML 转换为纯文本,但保留最小结构。

  • 包含只有浏览器需要查看的内容的所有部分,例如要完全剥离的
  • 将所有块标记转换为
    并将所有内联标记转换为 完全删除内联而不留下空格,并将块级别描述的任何内容转换为带有两个换行符的段落。

    这个想法是将随机网页变成适合自然语言文本处理的东西,而不会因为天真地删除标记而人为地打断单词或使不相关的块看起来像句子而留下人工制品。

    任何编程语言的任何二进制文件、库或源代码都可以。

    是否有一个标准源,最好是机器可读的,其中包含定义哪些是块、哪些内联以及哪些类似于上面的

    【问题讨论】:

    标签: html filter text-processing text-extraction text-formatting


    【解决方案1】:

    HTML 4 块级元素列表在这里:http://htmlhelp.com/reference/html40/block.html

    最流行的 Perl HTML 解析库是 HTML::Parser,它是一个 SAX 风格的解析器,HTML::TreeBuilder,它更像是 DOM。

    除此之外,您还必须决定哪些元素很重要,哪些元素不重要。

    【讨论】:

    • 感谢您的列表。我最终使用了 HTML 4 DTD,但并未标记所有元素,包括 tr 和 td。此外,一些实时页面仍然使用不推荐使用的标签,例如 marquee、center 甚至 flash。我可能需要查阅一些网络浏览器的源代码...
    【解决方案2】:

    您可能想自己做一些研究。然后,当您遇到问题时,请提出与该问题相关的问题。这听起来更像是您希望有人为您做的项目的规范。

    对于初学者来说,网站对各种事物都使用标签,而且问题非常复杂。您可能希望将信息保存在 h# 和 p 标签中,但如果它们使用 id 标签,您也可能希望保存 div 标签信息。简而言之,您必须为遇到的每个网站编写规则,或者采用某种模糊逻辑。

    与其逐个标签地做,为什么不尝试检测句子和语法,或者可能在标题中的东西,然后选择包含这些东西的标签,同时去掉其余的东西?

    【讨论】:

    • 我不介意自己编程。我研究了我的主要语言 Perl 的 HTML 解析器,但似乎没有一个提供数据来告诉我它们是否是内联、块等的元素。我还寻找了可能提供此信息的特定 Perl 模块无济于事.所以可能我错过了这样的解析器或模块,或者有更好的解析器或库可用于其他编程语言。剥离 HTML 非常普遍,因此可能存在一个带有几个选项的工具,而我自己还没有找到。语法方法行不通,因为我要处理多种语言。
    【解决方案3】:

    这是我自己在 Perl 中使用 HTML::Parser 作为 github 要点解决此问题的工具:html2txt.pl

    它尚未完成,可能有点以 Windows 为中心,但我想我会分享它,因为有几个人在这里查看了我的问题。随意玩吧。

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多