如何删除<style>标签之间的所有文本?</style>

时间:2014-06-10 15:13:11

标签: r text-mining gsub

我正在对R进行文本挖掘任务,并且我有一个包含一些html文档的语料库。我想删除<style>标记以及它们之间的所有文本,最好使用gsub函数。

示例:

转过来:

<style>
.s4-tn{
border-left: 1px #0071C5 solid;
padding: 0px;
margin: 0px;
font-family: "Intel Clear", Verdana, verdana, san-serif;
font-size: 15px;
font-weight: lighter;
color: #0071C5; }

.s4-toplinks .s4-tn a.selected:hover{
    color:#1F497D;
    text-decoration: none;
}
</style>
<img id="corner" src="/sites/HR_ETM/SitePages/img/bottom_bar.png"/>

到此:

<img id="corner" src="/sites/HR_ETM/SitePages/img/bottom_bar.png"/>

2 个答案:

答案 0 :(得分:5)

我会使用removeNodes

library(XML)
doc <- htmlParse(txt,asText=TRUE)
styleNodes <- getNodeSet(doc, "//style")
removeNodes(styleNodes)
doc

> removeNodes(styleNodes)
NULL
> doc
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head></head>
<body><img id="corner" src="/sites/HR_ETM/SitePages/img/bottom_bar.png"></body>
</html>

> 

要保存已修改的XML,您可以使用saveXML

> saveXML(doc)
[1] "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html>\n<head></head>\n<body><img id=\"corner\" src=\"/sites/HR_ETM/SitePages/img/bottom_bar.png\"></body>\n</html>\n"

要选择评论节点,请使用:

commentNodes <- getNodeSet(doc, "//comment()")

答案 1 :(得分:3)

避免在此处使用正则表达式并使用html / xml解析器。

txt <- '<style>
.s4-tn{
border-left: 1px #0071C5 solid;
padding: 0px;
margin: 0px;
font-family: "Intel Clear", Verdana, verdana, san-serif;
font-size: 15px;
font-weight: lighter;
color: #0071C5; }

.s4-toplinks .s4-tn a.selected:hover{
    color:#1F497D;
    text-decoration: none;
}
</style>
<img id="corner" src="/sites/HR_ETM/SitePages/img/bottom_bar.png"/>'

然后你阅读并解析它。例如,只获取“img”标签:

library(XML)
doc <- htmlParse(txt,asText=TRUE)
 xpathSApply(doc,'//img')
[[1]]
<img id="corner" src="/sites/HR_ETM/SitePages/img/bottom_bar.png"/> 

PS:评论后编辑。