我目前正在尝试阅读希腊戏剧,这些戏剧作为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