Чрезмерная глубина документа: параметр XML_PARSE_HUGE для xml2::read_html() в R

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

Я пытаюсь прочитать список из 100 символьных файлов размером от 90 КБ до 2 МБ, а затем с помощью пакета qdap сделать некоторую статистику с текстом, который я извлекаю из файлов, а именно подсчитать предложения, слова и т. д. Файлы содержат исходный код веб-страницы, ранее очищенный с помощью RSelenium::remoteDriver$getPageSource() и сохранить в файл с помощью write(pgSource, fileName.txt). Я читаю файлы в цикле, используя:

pgSource <- readChar(file.path(fPath, fileNames[i]), nchars = 1e6)
doc <- read_html(pgSource)

что для некоторых файлов кидает

Error in eval(substitute(expr), envir, enclos) : 
  Excessive depth in document: 256 use XML_PARSE_HUGE option [1] 

Я видел эти сообщения, SO33819103 и SO31419409, которые указывают на аналогичные проблемы но не могу полностью понять, как использовать обходной путь @shabbychef, предложенный в обоих сообщениях, с использованием фрагмента, предложенного @glossarch в первой ссылке выше.

library(drat)
drat:::add("shabbychef");
install.packages('xml2')
library("xml2")

РЕДАКТИРОВАТЬ: я заметил, что когда ранее я запускал другой скрипт, очищающий данные в реальном времени с веб-страниц с использованием URL-адресов, я не сталкивался с этой проблемой. Код был тот же, я просто читал doc <- read_html(pgSource) после того, как читал его из RSelenium's remoteDriver.

Что я хотел бы спросить у этого доброго сообщества, так это правильно ли я выполняю шаги по установке и загрузке xml2 после добавления shabbychef's drat или мне нужно добавить какой-то другой шаг, как предложено в SO17154308. Любая помощь или предложения приветствуются. Спасибо.


person salvu    schedule 24.09.2016    source источник
comment
Эти размеры довольно разумны, и я подозреваю, что это может быть искаженный HTML, как предполагает один из сообщений SO, на которые вы ссылаетесь. Можете ли вы предоставить некоторые данные? Если нет, запустите HTML через htmltidy (используйте версию GH, так как мне нужно выполнить отправку CRAN это скоро) может исправить это достаточно, чтобы предотвратить ошибку синтаксического анализатора. w/r/t, используя код Стивена, вы также можете сделать devtools::install_github("shabbychef/xml2"), если этот метод не работает.   -  person hrbrmstr    schedule 24.09.2016
comment
Спасибо за вашу помощь. Я попытался установить и htmltidy, и shabbchef/xml2, как вы любезно предложили. Мне также пришлось заранее установить RTools. На этот раз я не получил ошибку, как раньше, поскольку RStudio продолжал падать после doc <- read_html(pgSource) с уведомлением R Session Aborted / R обнаружил фатальную ошибку / Сеанс был завершен, после чего я должен перезапустить IDE. Если это поможет, следующая ссылка на файл, вызывающий проблему. Он весит около 400 КБ и находится на моем диске Google. ссылка   -  person salvu    schedule 24.09.2016
comment
Если у вас есть дамп ядра для htmltidy, возможно, это связано с использованием версии CRAN вместо версии GitHub (я исправил ошибку, которая еще не попала в CRAN). Однако установите пакет xml2 из CRAN в новом сеансе R. Затем попробуйте pg <- read_html("66951-77_src.html", options="HUGE"), так как кажется, что Хэдли или Джим недавно добавили его поддержку (почему они отклонились от фактического имени параметра, мне не понятно, поскольку они сохранили его для всех остальных).   -  person hrbrmstr    schedule 24.09.2016
comment
@hrbrmstr - Спасибо за вашу ценную помощь. По какой-то причине в старой сессии htmltidy не скачивался и не устанавливался должным образом. Я также использовал xml2 из CRAN. Теперь read_html работал при тестировании с одним из проблемных файлов. Тем временем я использовал живую версию для загрузки исходников страницы и использования их без сохранения, так как это не приводило к ошибкам. Но это решение позволяет мне использовать сохраненный исходный код, а не запускать его в прямом эфире. Я не хочу вызывать колокольчики веб-сервера :-). Спасибо миллион.   -  person salvu    schedule 25.09.2016


Ответы (1)


Не знаю, правильно ли это, но на мой вопрос ответил @hrbrmstr в одном из своих комментариев. Я решил опубликовать ответ, чтобы люди, наткнувшиеся на этот вопрос, увидели, что у него есть хотя бы один ответ.

Проблема в основном решается с помощью опции «ОГРОМНЫЙ» при чтении источника html. Моя проблема была связана только с загрузкой ранее сохраненного источника. Я не обнаружил такой же проблемы при использовании «живой» версии приложения, т.е. чтения исходного кода непосредственно с веб-сайта.

Во всяком случае, теперь обновление пакета xml2 за август 2016 года позволяет использовать параметр HUGE следующим образом:

doc <- read_html(pageSource, options = "HUGE")

Для получения дополнительной информации прочитайте xml2 справочное руководство здесь CRAN-xml2.

Я хочу еще раз поблагодарить @hrbrmstr за его ценный вклад.

person salvu    schedule 25.09.2016
comment
Это 100% круто ответить на свой собственный ответ! Рад, что это помогло (эти ошибки могут быть очень неприятными, так что здорово, что вы можете продолжить анализ против обработки данных :-) - person hrbrmstr; 25.09.2016