Оправданный простой текст из HTML - PullRequest
4 голосов
/ 30 октября 2009

Мне нужно простое текстовое представление произвольного файла HTML (например, сообщение в блоге). Пока это не проблема, есть десятки конвертеров HTML в TXT. Однако текст в параграфах (читается «p elements») должен быть выровнен в виде простого текста (с определенным количеством столбцов) и, если возможно, переносится через дефис, чтобы дать лучший читаемый результат. Кроме того, полученный текстовый файл должен иметь формат 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.

Ответы [ 3 ]

4 голосов
/ 30 октября 2009

Попробуйте Python. Используйте BeautifulSoup для анализа HTML. Модуль textwrap позволит вам отформатировать текст.

Однако отсутствуют две функции. Чтобы оправдать текст, вам нужно добавить пробелы в каждой строке, но это не должно быть большой проблемой (см. этот пример кода ).

Для переноса слов, попробуйте этот проект .

2 голосов
/ 10 ноября 2009

Если вы знакомы с Emacs, вы можете открыть файл HTML в Emacs-W3M (то есть M-x w3m-find-file foo.html), сохранить отображенную страницу в виде простого текстового файла и затем вызвать M-x 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")
0 голосов
/ 30 октября 2009

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

...