Оправданный простой текст из HTML
Вопрос
Мне нужно простое текстовое представление произвольного файла HTML (например, сообщения в блоге). Пока это не проблема, есть десятки конвертеров HTML в TXT. Однако текст в абзацах (см. «Элементы p
») должен быть выровнен в виде простого текста (с определенным количеством столбцов) и, по возможности, переноситься через дефис, чтобы дать более читаемый результат. Кроме того, полученный текстовый файл должен иметь формат UTF-8 или UTF-16.
Простой простой текстовый разговор, который я могу сделать с XSLT, это почти тривиально. Но обоснование текста находится за пределами его возможностей (не совсем верно, потому что XSLT завершен по Тьюрингу, но достаточно близок к реальности).
FOP и XSL-FO также не работают. Они делают так, как просили, но вывод простого текста FOP ужасен (разработчики говорят, что он не предназначен для такого использования).
Я также экспериментировал с HTML - > XSLT - > Roff, но я застрял с groff, и его поддержка Unicode далека от оптимальной. Поскольку существуют такие символы, как эллипсы (" ... ") и типографски правильные кавычки, довольно сложно сказать groff в таблице стилей XSLT escape-последовательности для десятков символов Unicode.
Другим способом может быть преобразование в TeX и вывод в виде простого текста, но я никогда не пробовал этого раньше с (La) TeX.
Возможно, я пропустил что-то действительно простое. У кого-нибудь есть идеи, как мне достичь вышеперечисленного? Между прочим: решение должно предпочтительно работать без прав root для установки с PHP, Python, Perl, XSLT или любой программой, найденной в полуприличном дистрибутиве Linux.
Решение
Попробуйте Python. Используйте BeautifulSoup для анализа HTML. модуль textwrap позволит вам форматировать текст.
Однако отсутствуют две функции. Чтобы оправдать текст, вам нужно добавить пробелы в каждой строке, но это не должно быть большой проблемой (см. этот пример кода ).
Для переноса слов попробуйте этот проект .
Другие советы
Если вы знакомы с Emacs, вы можете открыть файл HTML в Emacs-W3M ( т.е. Mx w3m-find-file foo.html
), сохраните отображаемую страницу в виде простого текстового файла и затем вызовите для него Mx set-justification-full
. р>
Вы даже можете написать небольшую функцию для выполнения работы:
(defun my-html-to-justifed-text (html-file text-file)
"Convert HTML-FILE to plain TEXT-FILE."
(find-file html-file)
(w3m-rendering-buffer)
(set-justification-full (point-min) (point-max))
(write-file text-file))
(my-html-to-justifed-text "~/tmp/2.html" "~/tmp/2.txt")