非转义由 R XML 包生成的解析字符串?
Posted
技术标签:
【中文标题】非转义由 R XML 包生成的解析字符串?【英文标题】:unescaping parsed strings produced by R XML package? 【发布时间】:2012-08-09 02:58:32 【问题描述】:我一直在抄袭Scraping html tables into R data frames using the XML package 上非常有用的回复,以从网络上抓取一些 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'Reilly</b>
理想情况下,我想要一个可以搜索的函数或包
'
然后变回
'<b>Tim O'Reilly</b>'
编辑为了澄清,从下面的 cmets 中,我了解了如何针对撇号的特殊情况或我在数据中看到的任何其他字符执行此操作。我正在寻找的是一个有人更普遍地解决了这个问题的包。
到目前为止我所做的研究:
-阅读我在 XML documentation 中找到的关于转义的所有内容。
-在 CRAN NLP page 上寻找有前途的软件包。
-在 SO 上搜索了“unescape [R]”和“reverse escape [R]”。 无法取得任何进展,所以我想我会在这里提出问题。
【问题讨论】:
【参考方案1】:我不确定我是否理解其中的困难。替换的字符串处理是使用基本的正则表达式函数完成的:sub、gsub、regexpr、gregexpr
?sub # the same help page will also discuss 'gsub'
txt <- '<b>Tim O'Reilly</b>'
sub("\\'", "'", 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 提出的一个基本相同的问题,刚刚在 Rhelp 上由 David Carlson 回答。这是 Rhelp 档案上的帖子链接:
https://stat.ethz.ch/pipermail/r-help/2012-August/321478.html
他在创建翻译表方面已经做得比我做得更好,并且包含了通过 html 文本行进的代码。 (还有一个奖励......他包括&apos
)。 Michael Friendly 在第二天的跟进中将这个过程包含在一个函数中。您可以点击档案页面上的链接。
【讨论】:
对不起,如果我不清楚。撇号很简单,我可以通过 sub 或 stringr 来完成;我基本上想知道是否有更好的解决方案可以处理许多不同的转义字符(包括,比如' JoaquÃÂn Castro' -> 'Joaquín Castro') 所以,确切地说,我在问是否有人已经这样做了,包括我不会立即想到的奇怪的边缘情况。显然,我在问题中没有明确说明这一点。以上是关于非转义由 R XML 包生成的解析字符串?的主要内容,如果未能解决你的问题,请参考以下文章