ruby - 如何通过 Nokogiri 访问没有名称的文本

标签 ruby nokogiri tokenize

我正在尝试将标记化字符串(英语句子)转换为 HTML span 标记以在 HTML 中显示。

这是我尝试执行的基本步骤

  1. 获取包含空格的标记化字符串
  2. <root></root> 括起来使其成为有效的 xml
  3. 创建 nokogiri 对象来访问 xml
  4. 能够迭代“element_children”节点集以访问名称和文本,并使用它将 token 转换为 <span class=token>
  5. 但是,无法访问 #(Text " ")它存在于 nokogiri 对象中(pry 中的第 7 步)
  6. 因此,当我尝试将这些元素添加到数组中时 稍后我将加入创建 HTML,但我丢失了原始字符串中的空格。

任何有关在 nokogiri 中使用正确方法的指示都将受到高度赞赏。同样,欢迎任何其他建议。

您可以查看代码:

require 'nokogiri'

sentence_tagged = '<det>A</det> <nn>fleet</nn> <in>of</in> <nns>warships</nns><stop>.</stop>'
sentence_xml = '<root>' + sentence_tagged + '</root>'
nok_sent = Nokogiri::XML(sentence_xml)
array = []
nok_sent.root.element_children.each {|child| array << "<span class='" + child.name + "'>"

array
# => ["<span class='det'>A</span>",
# "<span class='nn'>fleet</span>",
# "<span class='in'>of</span>",
# "<span class='nns'>warships</span>",
# "<span class='stop'>.</span>"]

array.join
# => "<span class='det'>A</span><span class='nn'>fleet</span><span class='in'>of</span><span class='nns'>warships</span><span class='stop'>.</span>"

最佳答案

您应该使用children而不是 element_children:

array = []
nok_sent.root.children.each {|child| array << "<span class='" + child.name + "'>" +child.text+ "</span>" }

array
# => ["<span class='det'>A</span>", "<span class='text'> </span>", "<span class='nn'>fleet</span>", "<span class='text'> </span>", "<span class='in'>of</span>", "<span class='text'> </span>", "<span class='nns'>warships</span>", "<span class='stop'>.</span>"] 
array.join
# => "<span class='det'>A</span><span class='text'> </span><span class='nn'>fleet</span><span class='text'> </span><span class='in'>of</span><span class='text'> </span><span class='nns'>warships</span><span class='stop'>.</span>" 

关于ruby - 如何通过 Nokogiri 访问没有名称的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656200/

相关文章:

ruby - 使用 Ruby 将单词分解为字母

ruby - 正面/负面和展望 future /展望 future 的困惑?

ruby - 如何用 nokogiri 包裹元素?

ruby - 如何在 Nokogiri 中使用 "doc"标签构建 XML 文档

ruby-on-rails - rails : how to load local file into the model?

token - 聊天GPT : How to use long texts of unknown content in a prompt?

c - C 中的字符串标记

ruby - 在两个平台之间开发时的 Gemfile

ruby-on-rails - Rails - Mina - 无法在 database.yml 文件中加载环境变量

ruby - 拖放对象并在放下前暂停