如何根据R中的条件将文本文件拆分为多个.txt文件或数据框?

时间:2015-01-17 14:48:15

标签: r

我有一个.txt格式的XML文件。

https://drive.google.com/file/d/0B4vNBNGasp-aVlRtaVMzcGlPQzQ/view?usp=sharing

我想以这样的方式拆分此文件:我只获取<TEXT></TEXT>之间的文本,并将其另存为不同的文本文件或数据框。有人可以帮我解决一下如何在R中做到这一点吗?

我尝试使用grep函数来提取文本,但是我无法实现我的目标。我对文本挖掘非常陌生,如果有人能帮助我,那将是非常好的。

test_2=grep("[^<TEXT>] [$</TEXT>]",test,ignore.case=T,value=T)

2 个答案:

答案 0 :(得分:0)

使用XML

尝试XPath
library(XML)
doc <- xmlParse("test.txt")
sapply(xpathApply(doc, "//*/TEXT"), xmlValue)

然后你会得到一个角色向量并做你想做的事。

答案 1 :(得分:0)

首先我做了

install.packages("XML")
library(XML)

现在这有点棘手,因为您的文档(如上所示)没有root。如果你将它包装在

<mydoc>
...
</mydoc>

或类似的东西,你可以用这个:

doc <- xmlRoot(xmlTreeParse("text.xml"))
df <- vector(length=length(doc))
for (i in 1:length(doc))
{ 
    text_node <- doc[[i]]$children$text
    text <- xmlToList(text_node)
    df[i] <- text
}

现在假设你不能添加我上面做的人造根。您仍然可以将其解析为HTML,它更容忍无效文档。我也在这个例子中使用XPath(你也可以在上面的那个中):

doc <- htmlTreeParse("text_noroot.xml")
content <- doc$children$html
textnodes <- getNodeSet(content, "//text")
df <- vector(length=length(textnodes))
for (i in 1:length(textnodes))
{ 
    text_node <- textnodes[[i]]$children$text
    text <- xmlToList(text_node)
    df[i] <- text
}