gpt4 book ai didi

ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:56 24 4
gpt4 key购买 nike

我想将 html 转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为 <br> 插入换行符标签,检测段落并格式化它们等。

输入非常简单,通常是格式良好的 html(不是整个文档,只是一堆内容,通常没有 anchor 或图像)。

我可以将几个正则表达式放在一起,让我达到 80%,但我认为可能有一些现有的解决方案更智能。

最佳答案

首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着 HTML 的变化而崩溃,或者很难管理和维护。

您可以使用 Nokogiri 快速解析 HTML 并提取文本:

require 'nokogiri'

html = '
<html>
<body>
<p>This is
some text.</p>
<p>This is some more text.</p>
<pre>
This is
preformatted
text.
</pre>
</body>
</html>
'

doc = Nokogiri::HTML(html)
puts doc.text

>> This is
>> some text.
>> This is some more text.
>>
>> This is
>> preformatted
>> text.

之所以可行,是因为 Nokogiri 正在返回文本节点,这些节点基本上是标签周围的空白,以及标签中包含的文本。如果您使用 tidy 对 HTML 进行飞行前清理有时您可以获得更好的输出。

问题是当您将解析器的输出或查看 HTML 的任何方式与浏览器显示的内容进行比较时。浏览器关心的是以尽可能令人愉悦的方式呈现 HTML,而忽略了 HTML 可能会严重畸形和损坏的事实。解析器不是为这样做而设计的。

您可以在提取内容之前修改 HTML 以删除无关的换行符,例如 "\n" , 和 "\r"然后替换 <br>带有换行符的标签。这里有很多关于 SO 的问题,解释了如何用其他东西替换标签。我认为 Nokogiri site也将其作为教程之一。

如果你真的想把它做好,你需要弄清楚你想为 <li> 做什么里面的标签 <ul><ol>标签,以及表格。

另一种攻击方法是捕获其中一个文本浏览器(如 lynx)的输出。几年前,我需要对不使用 Meta-Keyword 标签的网站上的关键字进行文本处理,并找到了一款可以让我以这种方式获取渲染输出的文本浏览器。我没有可用的来源,所以我无法检查它是哪一个。

关于ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6073523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com