如何删除R中某些标记中包含的单词

时间:2014-03-13 00:07:07

标签: r

假设A是数据帧,A的结构如下

Row no                           C1                                                  
1                               <p>I'd like to check if an uploaded file is </p> 

2                               <p>Is there a way to</p>

3                               <p>I am import matlab file and construct</p> <pre><code>Error in model.frame.default(formula = expert_data_frame$t_labels ~ .,</code></pre>

对于列C1我正在做的是使用tm包我将行转换为语料库然后使用不同的函数,如removewhitespace,removedopwords。但是如何删除带有特定标签的单词。在上面的例子中,我想删除(代码) - (/ code)标签内的单词但不能这样做。

2 个答案:

答案 0 :(得分:1)

正确答案是使用HTML解析器。这需要更多解释。您也可以使用qdap包以不正确的方式完成此操作:

library(qdap)
genX(A$C1, "<code>", "</code>")

## [1] "<p>I'd like to check if an uploaded file is </p>"        
## [2] "<p>Is there a way to</p>"                                
## [3] "<p>I am import matlab file and construct</p> <pre></pre>"

答案 1 :(得分:1)

在紧要关头,你可以这样做:

A$C1 <- gsub('<code>.*?</code>', '', A$C1)

但是,使用正则表达式解析HTML有很多注意事项。 例如,如果我有一个字符串&#39; # this is a 标记&#39;,最后一个&#39;标签&#39;将剥离。

如果我将正则表达式调整为使用.*而不是.*?来解决此问题,那么字符串&#39; some code和一些文字以及 some more code &#39 ;会删除所有,甚至是两个代码块之间的(合法)文本。

归结为您对A$C1所了解的内容。你可以依靠它在一个字符串中没有多个代码块(或者</code>出现多个代码块)吗?然后使用<code>.*</code>。你能依靠字符串&#39;&#39; 从不出现在代码块中?然后使用<code>.*?</code>

如果你真的想确定,你实际上可以用XML解析 XML(你可以依靠A$C1的内容来形成格式吗? HTML,即没有遗漏标签?)。