2015-01-17 1 views
0

У меня есть файл XML в формате .txt.Как разбить текстовый файл на несколько TXT-файлов или фреймов данных на основе условий в R?

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

Фотографии не воспроизводятся –

ответ

0

Попробуйте XPath с XML

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

Тогда вы получите вектор символов и делать то, что вы хотите.

0

Сначала я сделал

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

Теперь это немного сложнее, потому что ваш документ (как показано выше) не имеет корней. Если вы заключаете его в

<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 
} 
Смежные вопросы