我目前正在嘗試閱讀希臘戲劇,這些戲劇作爲XML文件在線提供給對話和演講者專欄的數據框中。 我運行以下命令來下載XML並解析對話和揚聲器。用演講者和對話解析古希臘戲劇的XML
library(XML)
library(RCurl)
url <- "http://www.perseus.tufts.edu/hopper/dltext?doc=Perseus%3Atext%3A1999.01.0186"
html <- getURL(url, followlocation = TRUE)
doc <- htmlParse(html, asText=TRUE)
plain.text <- xpathSApply(doc, "//p", xmlValue)
speakersc <- xpathSApply(doc, "//speaker", xmlValue)
dialogue <- data.frame(text = plain.text, stringsAsFactors = FALSE)
speakers <- data.frame(text = speakersc, stringsAsFactors = FALSE)
但是,我後來遇到了一個問題。對話將產生300行(對於劇中的300條不同線),但發言者將產生297. 問題的原因是由於下面轉載的XML的結構,其中<speaker>
標記不被重複用於繼續對話被舞臺方向打斷。因爲我必須將對話 與<p>
標記分開,所以它會產生兩個對話行,但只有一個揚聲器行,而不會相應地複製揚聲器。
<speaker>
克里昂</speaker>
<stage>
到保護。</stage>
-<p>
可以爲自己,無論你請,
<milestone n="445" unit="line" ed="p"/>
自由和清晰重收費。
<stage>
退出警衛。</stage>
</p>
</sp>
-<sp>
<stage>
要安提戈涅。</stage>
<p>
然而,你告訴我 - 不是簡要地,但是簡要地說 - 你知道一個詔書禁止這個嗎?</p>
</sp>
我如何解析XML這樣的數據將正確地產生相同數量的對話行的相同數目對應的揚聲器行的?
對於上面的例子,我希望得到的數據框要麼包含Creon對話框中對應於舞臺方向前後的兩行對話的兩行,要麼將一行將Creon的對話視爲一行忽略由於舞臺方向的分離。
非常感謝您的幫助。
非常感謝您的幫助。該代碼完美地工作,併產生正確的東西,我需要一個小的修改})移動到創建finaldf對象的上方。非常感謝您的工作! – jmlawler