2014-03-13 29 views
0

假設一個字是數據幀和A的結構如下如何刪除一些標籤內含有作爲R

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等不同功能刪除詞組。但如何刪除具有特定標籤的單詞。在上面的例子中,我想刪除(代碼) - (/ code)標籤中的單詞,但無法這樣做。

回答

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>" 
+0

感謝您的回覆。但爲什麼使用qdap包將是一個骯髒的技巧... – tanay

+0

這裏有一個鏈接,解釋一點:http://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not我實際上並不在意,因爲我的時間是值得的,我可以在簡單的情況下比HTML解析更快地完成正則表達式。所以我有時會骯髒,享受我一天的餘生。 –

+0

@tanay這一個有點更有趣http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

1

在緊要關頭,你可以這樣做:

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

然而,也有很多注意事項,以使用正則表達式解析HTML。例如,如果我有一個字符串「# this is a標記」,最後的'標記'將而不是被剝離。

如果我調整了正則表達式使用.*而不是.*?來解決這個問題,字符串「some code和一些文字和some more code」將有一切從中剝離,這兩個代碼塊之間連(合法的)文本。

它歸結爲什麼你知道關於A$C1。你能依靠它在一個字符串中沒有多於一個的代碼塊嗎(或者多於一個的發生次數爲</code>)?然後使用<code>.*</code>。你能依靠字符串'從來沒有出現在一個代碼塊嗎?然後使用<code>.*?</code>

如果你真的要肯定的是,你實際上可以解析XML包中的XML(可依靠的A$C1內容是結構良好的HTML,即沒有缺失的標籤?)。

+0

我認爲不會有失蹤標籤。代碼將始終位於標籤內。但不能確定是否有一個代碼塊或字符串「'不會出現。 – tanay