4

我一直在抄袭关于使用 XML 包将 html 表抓取到 R 数据框中的非常有用的响应,以从网络上抓取一些 html 并在 R 中使用它。

XML 包似乎非常彻底地转义文本字符串中的非字母字符。在 XML 或其他一些包中是否有一种简单的方法可以反转通过 XML 传递我的数据所做的部分/全部转义字符?我开始自己做,但在遇到像“代表华昆卡斯特罗”这样的案例后,我想“一定有更好的解决方案……”

只是为了清楚起见,使用 XML 包来解析这个 HTML

 library(XML)
 apos_str <- c("<b>Tim O'Reilly</b>")
 apos_str.parsed <- htmlTreeParse(apos_str, error=function(...){})
 apos_str.parsed$children$html[[1]][[1]]

会产生

 <b>Tim O&apos;Reilly</b>

理想情况下,我想要一个可以搜索它的函数或包

&apos; 

并将其变回

'<b>Tim O'Reilly</b>'

编辑为了澄清,从下面的评论中,我得到了如何针对撇号的特殊情况或我在数据中看到的任何其他字符执行此操作。我正在寻找的是一个有人更普遍地解决了这个问题的包。

到目前为止我所做的研究:

-阅读我可以在 XML文档中找到的关于转义的所有内容。

- 在 CRAN NLP 页面上寻找有前途的软件包。

- 在 SO 上搜索了“unes​​cape [R]”和“reverse escape [R]”。无法取得任何进展,所以我想我会在这里提出问题。

4

1 回答 1

4

我不确定我是否理解其中的困难。替换的字符串处理是使用基本的正则表达式函数完成的:sub、gsub、regexpr、gregexpr

?sub # the same help page will also discuss 'gsub'
txt <- '<b>Tim O&apos;Reilly</b>'
sub("\\&apos;", "'", txt)
[1] "<b>Tim O'Reilly</b>"

如果您有一个出现在“&”和“;”之间的值列表 您可以拆分这些然后重新组合。我想你可能希望有人已经这样做了。您应该澄清您希望达到的抽象级别。

编辑:一位博主讨论了“&apos”的具体案例 http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos/

我自己做了一些进一步的研究。这些不恰当地称为“转义”,而是“命名实体”。我在 rhelp 档案中找不到对它们的任何引用。我已经从 w3.org 网站下载了定义这些“实体”的 XML 列表,并试图转换为支持搜索和替换的表格形式。但你对“代表华昆卡斯特罗”的评论让我感到困惑。奇怪的字符不是“$#xxx”的形式,所以......你到底要什么?请发布具有预期输出的合适测试用例。

编辑 2:这是 Michael Friendly 提出的一个基本相同的问题,David Carlson 在 Rhelp 上回答了这个问题。这是 Rhelp 档案上的帖子链接:

https://stat.ethz.ch/pipermail/r-help/2012-August/321478.html

他在创建翻译表方面已经做得比我做得更好,并且包含了通过 html 文本行进的代码。(还有奖金……他包括在内&apos)。Michael Friendly 在第二天的跟进中将这个过程包含在一个函数中。您可以点击档案页面上的链接。

于 2012-08-12T19:01:35.407 回答