unescaping由R XML包生成的解析字符串?

时间:2012-08-12 18:48:18

标签: r xml-parsing escaping

我一直在讨论Scraping html tables into R data frames using the XML package上非常有用的回复,以便从网上抓取一些HTML并在R中使用它。

对于在文本字符串中转义非字母字符,XML包似乎非常彻底。在XML或其他一些包中是否有一种简单的方法可以反转通过XML传递数据的部分/全部字符转义?我开始自己做,但遇到像'代表JoaquÃÂnCastro'之类的案件后,我认为'必须有更好的解决方案......'

为了清楚起见,使用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 documentation中可以找到的所有内容。

- 在CRAN NLP page上寻找有前途的包。

- 在SO上搜索'unescape [R]'和'reverse escape [R]'。 无法取得任何进展,以为我会在这里提出问题。

1 个答案:

答案 0 :(得分: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>"

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

编辑: 博主讨论了“&amp;”http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos/

的具体情况

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

编辑2:这是一个基本相同的问题来自Michael Friendly,大卫卡尔森在Rhelp上得到了回答。这是Rhelp档案上发布的链接:

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

他已经做了比创建翻译表更好的工作,并且已经包含了通过HTML文本进行游行的代码。 (和奖金......他包括&apos)。 Michael Friendly的第二天跟进将这个过程包含在一个功能中。您可以点击档案页面上的链接。