Nano Hash - криптовалюты, майнинг, программирование

Разбирать файлы XML (>1 мегабайт) в R

В настоящее время у меня есть ~20 000 XML-файлов размером от пары КБ до нескольких МБ. Хотя это может быть не идеально, я использую функцию «xmlTreeParse» в пакете XML для циклического просмотра каждого из файлов и извлечения текста, который мне нужен, и сохранения документа в виде файла csv.

Код ниже отлично работает для файлов размером ‹1 МБ:

files <- list.files()
for (i in files) {
    doc <- xmlTreeParse(i, useInternalNodes = TRUE)
    root <- xmlRoot(doc)

    name <- xmlValue(root[[8]][[1]][[1]]) # Name
    data <- xmlValue(root[[8]][[1]]) # Full text

    x <- data.frame(c(name))
    x$data <- data

    write.csv(x, paste(i, ".csv"), row.names=FALSE, na="")
}

Проблема в том, что любой файл> 1 МБ дает мне следующую ошибку:

Excessive depth in document: 256 use XML_PARSE_HUGE option
Extra content at the end of the document
Error: 1: Excessive depth in document: 256 use XML_PARSE_HUGE option
2: Extra content at the end of the document

Пожалуйста, простите мое невежество, однако я пытался найти функцию «XML_PARSE_HUGE» в пакете XML и не смог ее найти. Кто-нибудь имел опыт использования этой функции? Если это так, я был бы очень признателен за любые советы о том, как заставить этот код обрабатывать XML-файлы немного большего размера.

Спасибо!

17.06.2013

  • попробуй xmlTreeParse(options = HUGE) 17.06.2013
  • Сработало блестяще - большое спасибо! 18.06.2013
  • если это отвечает на ваш вопрос, рассмотрите возможность пометить вопрос как отвеченный. stackoverflow.com/help/accepted-answer 14.07.2013
  • Спасибо - извините, что не понял, как это сделать раньше. 14.07.2013
  • Просто интересно, сталкивались ли вы с утечками памяти с файлами такого размера? Я пытаюсь проанализировать в XML 10Meg, и никакое количество free(), rm(), gc() в XML-документе после того, как я закончу с ним, освобождает (сотни мегабайт) памяти для O/ S (это Windows 7 64bit). 03.03.2015

Ответы:


1

Чтобы выбрать «XML_PARSE_HUGE», вам нужно указать это в настройках. XML:::parserOptions перечисляет варианты выбора:

> XML:::parserOptions
   RECOVER      NOENT    DTDLOAD    DTDATTR   DTDVALID    NOERROR  NOWARNING 
         1          2          4          8         16         32         64 
  PEDANTIC   NOBLANKS       SAX1   XINCLUDE      NONET     NODICT    NSCLEAN 
       128        256        512       1024       2048       4096       8192 
   NOCDATA NOXINCNODE    COMPACT      OLD10  NOBASEFIX       HUGE     OLDSAX 
     16384      32768      65536     131072     262144     524288    1048576 

Например

> HUGE
[1] 524288

Достаточно объявить вектор целых чисел с любой из этих опций. В твоем случае

xmlTreeParse(i, useInternalNodes = TRUE, options = HUGE)
18.06.2013
  • Можете ли вы сложить эти десятичные числа вместе (поскольку кажется, что это просто битовые позиции в двоичном числе)? 15.07.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..