我正在使用包tm
。我有一个充满html文档的语料库,我想删除除html标签之外的所有内容。我一直试图这样做几天,但我似乎找不到任何好的解决方案。
例如,假设我有一个这样的文档:
<html>
<body>
<h1>hello</h1>
</body>
</html>
我希望文档变成这样:
<html> <body> <h1>
(或者使用结束标记,我真的不介意。)
我的目标是计算文档中每个标记的使用次数。
答案 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)