从语料库中删除除html标签之外的所有内容

时间:2012-03-26 15:51:36

标签: regex r text-mining tm

我正在使用包tm。我有一个充满html文档的语料库,我想删除除html标签之外的所有内容。我一直试图这样做几天,但我似乎找不到任何好的解决方案。

例如,假设我有一个这样的文档:

<html>
<body>

<h1>hello</h1>

</body>
</html>

我希望文档变成这样:

<html> <body> <h1>

(或者使用结束标记,我真的不介意。)

我的目标是计算文档中每个标记的使用次数。

3 个答案:

答案 0 :(得分:2)

我不熟悉tm,但是你可以使用正则表达式来实现它。

(预设:你的字符串以HTML标签开头和结尾)

str <- "<html><body><p>test<p>test2</body></html>"
str <- gsub(">[^<^>]+<", "> <", str) # remove all the text in between HTML tags, leaving only HTML tags (opening and closing)
str <- gsub("</[^<^>]+>", "", str) #remove all closing HTML tags.

那会留下你想要的字符串。

如果您是RegEx新手,请查看this site以了解更多入门信息。基本上,上面的第一个gsub将替换><之间的所有文本,这些文本不是开放或封闭的括号(即所有非标签文本)。第二个gsub将替换所有以</开头并以>结尾的文本 - 从字符串中删除结束标记

答案 1 :(得分:0)

您应该查看http://rss.acs.unt.edu/Rdoc/library/XML/html/xmlTreeParse.html

之类的内容

在上面的链接中,查看示例代码。有一节介绍如何打印实体。我没有使用这个包,所以我不能直接担保。

答案 2 :(得分:0)

(1)gsubfn

假设s是输入字符串(可能包含换行符),则匹配<后跟任何非/>或空格的内容并将其提取到标签。 table函数将事件列表:

library(gsubfn)
tags <- strapply(tolower(s), "\\<([^/> ]+)", c, simplify = unlist)
table(tags)

例如,

s <- "<html>
<body>

<h1>hello</h1>

</body>
</html>"
tags <- strapply(tolower(s), "\\<([^/> ]+)", c, simplify = unlist)
table(tags)

给出了这个:

tags
body   h1 html 
   1    1    1 

如果您的文件非常大,则the development version of gsubfn有一个名为strapplyc的快速版本。

(2)XML

如果引用字符串和其他边框情况中有<>符号,则上述方法可能会混淆。无论如何,你的输入中可能没有任何这样的实例,但是如果第二种方法不应该有这个问题:

library(XML)
doc <- htmlTreeParse(tolower(s), asText = TRUE, useInternalNodes = TRUE)
tags <- xpathSApply(doc, "//*", xmlName)
table(tags)