我正在尝试提取文档的文本以将其编入索引以进行搜索。以下大多数工作除了各种单词和标点符号一起运行。当它删除标签时,我需要用空格替换它们,所以我不会遇到这个问题。我一直试图找出最有效的方法,但到目前为止,我已经空了。
doc = Nokogiri::HTML(html)
doc.xpath("//script").remove
doc.xpath("//style").remove
doc.xpath("//a").remove
text = doc.text.gsub(/\s+/,' ')
中提取的一些示例文字
本赛季之前,纽约巨人队的防守端是Osi Umenyiora 谁说他不会用“RG3”打电话给Robert Griffin III 直到他做了什么。在那之前,它是“鲍勃格里芬。”之后 格里芬的76码触地得分在华盛顿红人队的胜利中进行 在明尼苏达维京队,巨人队的防守端杰森 皮埃尔 - 保罗是对格里芬有一些评论的人。“不要 把它带到我这边,“皮埃尔 - 保罗告诉纽约媒体。”走另一边 办法。 ......“是的,这将是一场非常好的比赛。不过,不在我身边。不 在我身边或者另一边。“格里芬星期三开玩笑地问道 跑到办公室说:“我有很多其他人要跑 从现在开始,皮埃尔 - 保罗,奥西,所有这些人。“但是根据 对于几个红人队的队员来说,格里芬应该不用担心 关于周日,如果他进入开放的领域。“如果罗伯特进入那个 情况,我不认为有很多人可以让他失望,“ 右后卫克里斯切斯特说。 “我还是会去那里 试图阻止并确保没有人接触到罗伯特。但他是一个 很多优秀的运动员能够在这方面超过很多人 “提示皮埃尔 - 保罗的评论,左截锋特伦特 威廉姆斯回答:“你想让我对此说些什么?”“罗伯特 我的家伙。我不认识皮埃尔 - 保罗。我不知道他为什么会说 类似的东西,“他说。 “也许他知道我不知道的事情。”
答案 0 :(得分:0)
其他答案正在讨论在文档中插入空格,但如果(如问题所示)您的要求是替换那些具有空格的节点,Nokogiri有一个替换方法。所以用空格替换脚本标签:
doc.xpath('//script').each do |node|
node.replace(' ')
end
这个问题也提出了正确的问题。间距。大多数浏览器在<script>
标记周围呈现时不会插入空格,因此虽然对文本提取很有用,但这并不一定是正确的。要做的事。
答案 1 :(得分:-1)
您可以尝试在每个p标签前插入一个空格:
doc.search('p').each{|el| el.before ' '}
但更好的方法可能是:
text = doc.search('div.story p').map{|p| p.text}.join(" ")