我正试图提取文档的文本,以便为其编制索引进行搜索。下面的大部分工作,除了各种文字和标点符号运行在一起当它删除标记时,我需要用空格替换它们,这样我就不会遇到这个问题我一直在试图找出最有效的方法来做这件事,但到目前为止我还是一无所获。

doc = Nokogiri::HTML(html)
doc.xpath("//script").remove
doc.xpath("//style").remove
doc.xpath("//a").remove
text = doc.text.gsub(/\s+/,' ')

以下是我从http://www.washingtontimes.com/blog/redskins-watch/2012/oct/18/redskins-linemen-respond-jason-pierre-paul-rg3-com/中提取的一些示例文本
本赛季之前是纽约巨人队的防守端奥西乌梅尼奥拉
他说他不会用“RG3”来称呼罗伯特格里芬三世,引起了轩然大波
直到他做了什么在那之前,是“鲍勃·格里芬”。
格里芬在华盛顿红人队的胜利中76码触地得分
在明尼苏达维京人队,巨人队防守端杰森
皮埃尔·保罗是那个对格里芬有意见的人
把它放在我这边,”皮埃尔·保罗对纽约媒体说。“去另一个
太好了“是的,这将是一场很好的比赛。但不是站在我这边。不是
站在我这边或者另一边。”格里芬在周三开玩笑地问道
他说:“我还有很多人要竞选
从现在开始,皮埃尔·保罗,奥西,所有那些人。
对于一对红人巡警来说,格里芬不必太担心
如果罗伯特进入球场的话
情况是,我不认为有多少人能让他倒下。
右后卫克里斯·切斯特说“我还是要出去
试着挡住,确保没有人碰罗伯特但他是个
足够好的运动员能在这方面超过很多人
在皮埃尔·保罗的评论的推动下,左铲球特伦特
威廉姆斯回答说:“你想让我怎么说?“罗伯特的
我的人。我不认识皮埃尔·保罗我不知道他为什么会说
他说“也许他知道一些我不知道的事情。”

最佳答案

可以尝试在每个p标记之前插入空格:

doc.search('p').each{|el| el.before ' '}

但更好的方法可能是:
text = doc.search('div.story p').map{|p| p.text}.join(" ")

关于ruby - Nokogiri如何从HTML中以正确的间距提取文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12983937/

10-15 07:46