Ссылка на усеченную версию образца документа
Я пытаюсь извлечь большой кусок текста из последнего «pre», обработать его и вывести. Допустим, я хочу применить
concatMap (unwords . take 62 . drop 11) . lines
к тексту и выведите его.
Когда я это делаю, это занимает более 400 МБ места в HTML-документе размером 4 МБ.
Код, который у меня есть, довольно прост, поэтому я не включаю его, опасаясь искажения ответов.
Вот одна итерация кода:
file = readDocument [(a_validate, v_0), (a_parse_html, v_1)] "Cache entry information.xhtml"
text = fmap last $ runX $
file >>>
deep (hasName "pre") />
isText >>>
-- changeText (unwords . take 62 . drop 11 . lines) >>>
getText
Я думаю, проблема в том, что я делаю это так: HXT пытается сохранить весь текст в памяти по мере его чтения.
Согласно this, похоже, что HXT необходимо на минимум читать весь документ, хотя и не хранить его в памяти.
Я собираюсь попробовать другие парсеры, HaXmL, в качестве следующего.
N.B. Я решил исходную проблему, обработав входной файл как простой текст, а желаемую часть - разделенную "<pre>00000000:"
и "</pre></body>\n</html>"