2016-11-03 1 views
2

Я пытаюсь читать и обрабатывать ~ 5,8 ГБ .xml из Википедии Дампы с использованием R. У меня не так много ОЗУ, поэтому я хотел бы обработать его в кусках. (В настоящее время при использовании xml2::read_xml блоков мой компьютер полностью)прочитайте и проанализируйте xml в кусках в R

Файл contais один xml элемент для каждой страницы википедии, как это:

<page> 
    <title>AccessibleComputing</title> 
    <ns>0</ns> 
    <id>10</id> 
    <redirect title="Computer accessibility" /> 
    <revision> 
     <id>631144794</id> 
     <parentid>381202555</parentid> 
     <timestamp>2014-10-26T04:50:23Z</timestamp> 
     <contributor> 
     <username>Paine Ellsworth</username> 
     <id>9092818</id> 
     </contributor> 
     <comment>add [[WP:RCAT|rcat]]s</comment> 
     <model>wikitext</model> 
     <format>text/x-wiki</format> 
     <text xml:space="preserve">#REDIRECT [[Computer accessibility]] 

{{Redr|move|from CamelCase|up}}</text> 
     <sha1>4ro7vvppa5kmm0o1egfjztzcwd0vabw</sha1> 
    </revision> 
</page> 

Образец файла можно найти here

от моего перспектива, я бы подумал, что это можно прочитать в кусках, что-то вроде страницы на страницу в файле. Ans сохраняют каждый обработанный элемент page как строку в файле .csv.

Я хотел бы иметь data.frame со следующими столбцами.

ID, название и текст.

Как я могу это сделать .xml в кусках?

+0

Я не уверен, что мы можем решить вашу проблему. Образец, который вы нам предоставили, невелик, поэтому я не могу воспроизвести вашу проблему. Вы пробовали что-то вроде [this] (http://stackoverflow.com/questions/21222113/how-to-read-first-1000-lines-of-csv-file-into-r) (ответ jlhoward)? –

+0

Представьте себе '.xml' с множеством, многими элементами, подобными одному в вопросе. Я не могу просто читать строки за строкой, так как он разбивает структуру xml. Я хотел бы прочитать элемент по элементу, но я не знаю, как это сделать ... Очевидно, что я связан с небольшим образцом, но вы можете скачать полный файл здесь: https://dumps.wikimedia.org/ptwiki/ 20161101/Это ptwiki-20161101-pages-articles.xml.bz2 –

ответ

1

Это может быть улучшено, но главная идеа здесь. Вам все еще нужно определить наилучший способ определить количество строк, ваши будут читать в каждом взаимодействии внутри readLines() функции, а также способ прочитать каждый кусок, но решение для получения ломтей здесь:

xml <- readLines("ptwiki-20161101-pages-articles.xml", n = 2000) 

inicio <- grep(pattern = "<page>", x = xml) 
fim <- grep(pattern = "</page>", x = xml) 
if (length(inicio) > length(fim)) { # if you get more beginnings then ends 
    inicio <- inicio[-length(inicio)] # drop the last one 
} 

chunks <- vector("list", length(inicio)) 

for (i in seq_along(chunks)) { 
    chunks[[i]] <- xml[inicio[i]:fim[i]] 
} 

chunks <- sapply(chunks, paste, collapse = " ") 

Я пробовал read_xml(chunks[1]) %>% xml_nodes("text") %>% xml_text(), и это сработало.

 Смежные вопросы

  • Нет связанных вопросов^_^