Алгоритмы исправления неработающего HTML - PullRequest
3 голосов
/ 14 января 2011

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

  1. Использование регулярных выражений - кажется наивным подходом
  2. Создание DOM - но как дерево DOM будет создано с поврежденным html?

ОБНОВЛЕНИЕ: Это более общее обсуждение, которое я ожидаю.Но если вы ссылаетесь на какие-либо инструменты в C, C ++, Python или Java, то я в порядке.

спасибо

Ответы [ 3 ]

3 голосов
/ 14 января 2011

Разобрать разметку, используя алгоритм синтаксического анализа HTML 5 (который предназначен для обработки поломок), и построить DOM из него.Затем вы можете сериализоваться обратно в HTML.

2 голосов
/ 14 января 2011

RegEx + HTML = катастрофа.

Существует слишком много способов, чтобы HTML был действительным SGML, но нарушал правила RegEx.

На самом деле вам нужны парсеры SGML с сохранением состояния. Вы не упоминаете, на каких языках вы готовы работать, но есть много синтаксических анализаторов SGML.

В .NET мы регулярно используем SGMLReader - анализатор с сохранением состояния, который возвращает хорошо сформированный DOM и / или XML DOM.

В C W3C имеет разумный C SGML-парсер

В Java есть синтаксический анализатор SGML в стиле SAX

1 голос
/ 14 января 2011

Я согласен с идеей, что путь регулярных выражений длинный и извилистый: гораздо надежнее и проще использовать существующие коды, предназначенные только для чтения неработающего HTLM.

Поскольку вы упомянули Python, синтаксический анализатор Beautiful Soup по общему мнению довольно хорошо обрабатывает сломанный HTML.

...