Удаление HTML, но сохранение блочной/встроенной структуры

Я хотел бы преобразовать HTML в обычный текст, но сохранить минимальную структуру.

  • Все разделы, которые содержат информацию, которую должен видеть только браузер, например ‹script› и ‹style›, должны быть полностью удалены.
  • Преобразуйте все блочные теги в ‹div›, а все встроенные теги в ‹span› или полностью удалите встроенные строки, не оставляя пробелов, и превратите все, что ограничено уровнями блоков, в абзацы с двумя разрывами строк.

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

Любой двоичный файл, библиотека или исходный код на любом языке программирования в порядке.

Есть ли стандартный исходный код, предпочтительно машиночитаемый, с полным списком элементов, определяющих, какие элементы являются блочными, какие встроенными, а какие похожи на «скрипт» и «стиль» выше?


person hippietrail    schedule 09.12.2010    source источник


Ответы (3)


Список блочных элементов HTML 4 находится здесь: http://htmlhelp.com/reference/html40/block.html

Наиболее популярными библиотеками синтаксического анализа HTML для Perl являются HTML::Parser, выполненные в стиле SAX. parser и HTML::TreeBuilder, который больше похож на DOM.

Кроме того, вам придется решить, какие элементы важны, а какие не основаны на том, что вы пытаетесь сделать.

person Brad Mace    schedule 21.12.2010
comment
спасибо за список. В итоге я использовал HTML 4 DTD, но не все элементы были помечены, включая tr и td. Кроме того, на некоторых активных страницах все еще используются устаревшие теги, такие как marquee, center и даже flash. Возможно, мне придется обратиться к источнику для некоторых веб-браузеров... - person hippietrail; 21.12.2010

Возможно, вы захотите провести небольшое исследование самостоятельно. Затем, когда вы столкнетесь с проблемой, задайте вопрос, связанный с проблемой. Это больше похоже на спецификацию проекта, который вы хотите, чтобы кто-то сделал для вас.

Во-первых, веб-сайты используют теги для самых разных вещей, и проблема очень сложна. Вы, вероятно, захотите сохранить информацию в тегах h# и p, но вы также можете сохранить информацию тега div, если они используют тег id. Короче говоря, вам придется писать правила для каждого веб-сайта, с которым вы сталкиваетесь, или использовать какую-то нечеткую логику.

Вместо того, чтобы делать это на основе тега за тегом, почему бы не попробовать определить предложения и грамматику или вещи, которые могут быть в заголовках, и выбрать теги, которые включают эти вещи, удаляя все остальное?

person Nathan Garabedian    schedule 17.12.2010
comment
Я не против заняться программированием сам. Я исследовал синтаксические анализаторы HTML для моего основного языка, Perl, но ни один из них, похоже, не предоставляет данные для элементов, которые говорят мне, являются ли они встроенными, блочными и т. д. Я также искал определенные модули Perl, которые могли бы предоставить эту информацию, но безрезультатно. . Так что, возможно, я пропустил такой парсер или модуль, или есть лучшие парсеры или библиотеки для других языков программирования. Разделение HTML является довольно распространенным явлением, поэтому может существовать инструмент с несколькими опциями, которые я пока не смог найти самостоятельно. Грамматический способ не сработает, потому что я имею дело со многими языками. - person hippietrail; 18.12.2010

Вот мой собственный инструмент для решения этой проблемы на Perl с использованием HTML::Parser в качестве сути github: html2txt.pl

Он незакончен и, возможно, немного ориентирован на Windows, но я решил поделиться им, так как несколько человек просмотрели мой вопрос здесь. Не стесняйтесь играть с ним.

person hippietrail    schedule 22.12.2010