2012-08-12 37 views
4

我一直惡癖關上Scraping html tables into R data frames using the XML package很有幫助響應颳去一些HTML從網上和R.通過R XML包生成分析字符串?

使用它的XML包似乎是相當徹底的有關文本字符串逃逸非字母字符。有沒有一種簡單的方法在XML或一些其他包會顛倒一些/所有的字符轉義,通過XML傳遞我的數據呢?我開始做我自己,但遇到像'代表JoaquÃÂn卡斯特羅的思想情況後,「必須有一個更好的解決辦法......」

只是爲了清楚起見,使用XML封裝解析這個HTML

library(XML) 
apos_str <- c("<b>Tim O'Reilly</b>") 
apos_str.parsed <- htmlTreeParse(apos_str, error=function(...){}) 
apos_str.parsed$children$html[[1]][[1]] 

會產生

<b>Tim O&apos;Reilly</b> 

,我會非常喜歡,將搜索該

&apos; 
0123函數或包

,並把它放回

'<b>Tim O'Reilly</b>' 

編輯爲了澄清,從下面的評論中,我得到了如何爲撇號的具體情況,或其他任何字符我在數據看到這一點。我正在尋找的是一個包裝,其中有人已經更普遍地解決了這個問題。

研究,我這樣做的遠:

- 讀取了所有我能找到的XML documentation上逃跑。

在CRAN NLP page上尋找有前途的包裝。

- 在SO上搜索'unescape [R]'和'reverse escape [R]'。 無法取得任何進展,所以我想在這裏提出問題。

回答

4

我不知道我明白了難點。用於替換字符串處理與基本正則表達式函數完成:子,GSUB,regexpr,gregexpr

?sub # the same help page will also discuss 'gsub' 
txt <- '<b>Tim O&apos;Reilly</b>' 
sub("\\&apos;", "'", txt) 
[1] "<b>Tim O'Reilly</b>" 

如果你有「&」之間發生的值的列表和「;」你可以分裂這些,然後重新組合。我想你可能希望有人已經這樣做了。你應該澄清你希望達到的抽象級別。

編輯: 一個部落客討論「&者」 http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos/

我做我自己的一些進一步研究的具體情況。這些不是恰當地稱爲「逃生」,而是「命名實體」。我在rhelp檔案中找不到任何對它們的引用。我已經從w3.org網站下載了XML列表,該網站定義了這些「enities」,並試圖轉換爲支持搜索和替換的表格形式。但你對'代表JoaquènCastro'的評論令我感到困惑。奇怪的字符不是「$#xxx」的形式,所以...........你到底在問什麼?請發佈預期輸出的合適測試用例。

編輯2:這是一個基本上相同的問題,從邁克爾友好,剛剛得到大衛卡爾森對Rhelp的回答。這裏的鏈接張貼在Rhelp檔案:

https://stat.ethz.ch/pipermail/r-help/2012-August/321478.html

他已經做了更好的工作比我對建立一個轉換表,並已包含的代碼通過HTML文本到3月。 (和獎金......他包括&apos)。 Michael Friendly的第二天隨訪將這個過程包裝在一個函數中。您可以按照檔案頁面上的鏈接。

+0

對不起,如果我不清楚。撇號很簡單,我可以通過sub或stringr來完成;我基本上想知道是否有更好的解決方案可以處理許多不同的逃脫角色(包括'JoaquínCastro' - >'JoaquínCastro') – Andrew 2012-08-12 19:11:28

+0

所以,我問,如果有人已經這樣做了,包括奇怪的我不會立即想到的邊緣案例。在問題中我明確表達了這一點,我顯然做得不好。 – Andrew 2012-08-12 19:12:36