Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Перенаправление вывода в файл: проблемы с кодировкой  (Прочитано 782 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tarik

  • Автор темы
  • Участник
  • *
  • Сообщений: 161
    • Просмотр профиля
Преамбула.
Мне нужны текстовые корпусы из Википедии на разных языках.
Википедия предоставляет дампы в своем формате xml, а также html. С их утилитами парсинга xml я не смог подружиться, поэтому накачал html-файлов.

Задача не хитрая: надо переконвертировать множество html-страниц в директории и поддиректориях в один огромный текстовый файл.


Я воспользовался утилитой html2text, которая не плохо работает, но у меня возникли проблемы с кодировкой.

На примере арабского. Вот команда, которой я собираю все в 1 файл и попутно вывожу в консоль:

tarik@tarik-virtual-machine ~/ARA $ find . -type f -name "*.html" -exec html2text -nobs -nometa -utf8 {} \; | tee ARA.txt

Redirecting to إخناتون


****** نقاش المستخدم:اخناتون ******
**** من ويكيبيديا، الموسوعة الحرة ****
مرحبا بك يا اخناتون في ويكيبيديا الموسوعة الحرة!
نتمنى لك مشاركة طيبة. هذه بعض الوصلات التي قد تكون مفيدة لك:
    * دروس
...............................................

Далее идут килотонны правильно отображенного арабского текста.

Но вот не задача: сам выходной файл не в utf-8:
tarik@tarik-virtual-machine ~/ARA $ file -i ARA.txt
ARA.txt: text/plain; charset=unknown-8bit

Если копировать из консоли кусок текста мышой и вставлять в редактор, то все ок, и при дальнейшем сохранении файла, по крайней мере редактором xed, файл определяется как utf-8. Но я не могу себе позволить такое копирование в связи с большими объемами данных.

При этом есть небольшая странность. На домашней системе Линукс Минт редактор категорически отказывается показывать содержимое файла. На работе стоит Минт чуть посвежее, и редактор отображает текст, но ругается. В конечном итоге, меня не особо волнует, как новый xed распознал этот недоформат, все равно файл будет обрабатываться под виндой, которая само собой его не понимает.

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4323
  • Capture the truth
    • Просмотр профиля
Цитировать
html2text is a Python script that converts a page of HTML into clean, easy-to-read plain ASCII text.

iconv -f ASCII -t UTF8
Пользователь добавил сообщение 17 Октябрь 2017, 15:32:06:
find . -type f -name "*.html" -exec html2text -nobs -nometa -utf8 {} \; | iconv -f ASCII -t UTF8 | tee ARA.txt
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн Tarik

  • Автор темы
  • Участник
  • *
  • Сообщений: 161
    • Просмотр профиля
Не все так просто.
Если html2text не указывать кодировку utf-8, то он действительно будет кодировать в ASCII:
$ file ARA.txt
ARA.txt: Non-ISO extended-ASCII text, with LF, NEL line terminators

Но проблема в том, что iconv не понимает эту кодировку и выдает ошибку при попытке конвертации в UTF-8:
$ iconv -f ASCII -t UTF-8 ARA.txt > ARA_.txt
iconv: недопустимая входная последовательность в позиции 16

Если же указывать кодировку utf-8 при создании файла, то получается не совсем utf-8. Там какие-то лишние символы встречаются. Утилита enca распознает эту кодировку так:
$ enca ARA.txt
Universal transformation format 8 bits; UTF-8
  Surrounded by/intermixed with non-text data
  Doubly-encoded to UTF-8 from ISO-8859-5

Xed открывает эту кодировку, но выделяет красным проблемные символы:
https://yadi.sk/i/FnBEMKzS3Nq7Vs


Если бы можно было их удалить в автоматическом режиме - это решило бы проблему.
« Последнее редактирование: 17 Октябрь 2017, 20:56:24 от Tarik »

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4323
  • Capture the truth
    • Просмотр профиля
выложите пример файла
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 2154
    • Просмотр профиля
М.б., в самих html есть ошибки? Проверка их "html2text -check" ничего не показывает?
Или попробовать вывод "html2text -nomet -utf8" ещё раз кодировать в utf8:
| iconv -c -f UTF-8 -t UTF-8 > out.txt
Пётр.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Если бы можно было их удалить в автоматическом режиме
sed 's/[^[:print:]]//g'

Оффлайн Tarik

  • Автор темы
  • Участник
  • *
  • Сообщений: 161
    • Просмотр профиля
Или попробовать вывод "html2text -nomet -utf8" ещё раз кодировать в utf8:
| iconv -c -f UTF-8 -t UTF-8 > out.txt

Это гениально! И чего я сразу так не попробовал. :)
Спасибо!

Может кому пригодится. Вот такая команда соберет все файлы html из директории и переконвертирует их в текстовый файл mega.txt:
find . -type f -name "*.html" -exec html2text -nobs -nometa -utf8 {} \; | iconv -c -f UTF-8 -t UTF-8 > mega.txt
« Последнее редактирование: 17 Октябрь 2017, 21:17:13 от Tarik »

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 2154
    • Просмотр профиля
Tarik, Я думаю, это благодаря опции iconv "-c". С ней она просто отбрасывает символы, которые не смогла конвертировать.
Пётр.

 

Страница сгенерирована за 0.21 секунд. Запросов: 24.