Вопрос

Мне нужно простое текстовое представление произвольного файла 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")

Ссылки или lynx , см. переключатель -dump . Часть кодирования, которую вы можете легко решить отдельно, используя iconv или что-то подобное.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top