Как стать автором
Обновить

Получение текста из.doc. Как это лучше сделать?

Время на прочтение 2 мин
Количество просмотров 1.1K
Встала передо мной небольшая задачка — поработать с различными файлами, в которых нерадивые пользователи присылают информацию о себе. Начав, со сбора статистики, я увидел страшную картину — изгаляются кто во что горазд. Присылают все, что только можно. Начиная от простых текстовых файлов (слава богам, есть в мире адекватные люди) и заканчивая презентациями в PowerPoint или Flash (а в таких людей я не верил вплоть до того момента, как сам увидел). Я, как не дурак, естественно решил привести все это многообразие к единому виду, обеспечивающим возможность человеко-машинной обработки. Не долго думая, я выбрал старый добрый html.
Различные презентации и картинки были отсеяны из алгоритма практически сразу — смысла городить огород не так уж и много, благо не столь часто попадаются эти прекрасные порождения креатива. Обработать из вручную не столь проблематично, как основной поток. Текстовые, html и т.п. файлы, в связи с выбором единого формата, можно было не затрагивать. А вот с прочими распространенными форматами, ясное дело, пришлось повозиться.

В результате недолгих поисков, в репозитариях был найден пакет wv — набор утилит для преобразования из .doc (Мануал сообщает о возможности конвертации из Word 2000, Word 97, Word 95, и Word 6. А также ограниченную поддержку более ранних форматов.) в html, rtf, LaTeX. Качество его преобразования, судя по проведенным экспериментам, не самое лучшее — форматирование все-же несколько нарушалось. К счастью задачи сохранить форматирование у меня не стояло и я с чистой совестью начал использовать эти утилиты — сам текст они вытаскивали полностью и почти(об этом чуть ниже) без ошибок.

Также для нескольких других часто встречающихся форматов были использованы соответствующие утилиты (unrtf, unzip, unrar и т.п.) С ними я не встретился с трудностями, а потому мне о них даже рассказывать нечего.

Вернемся к doc-овским файлам. Как я уже упомянул, конвертация происходит вполне прилично, если бы не одна проблема, что попортила мне много нервов. Расскажу о ней поподробней. После преобразования в html, на текст натравливаются прочие скрипты, что обрабатывают текст, разбивая его на слова, ища кодовые фразы и выполняя прочую полезную работу, используя регулярные выражения. Все замечательно отрабатывало на прочих файлах, но текст, полученный из .doc упрямо обрабатывался с ошибками — то два слова посчитает за одно, то кодовую фразу не распознает. Исходная ошибка незначительная, но чтобы найти ее, мне пришлось раза три разбежаться об стенку. Суть ее сводится к тому, что в кодировке cp1251, в которой я обрабатывал эти файлы, есть один символ, который почти не используется в обычной жизни. Это пробел. Под кодовым номером 160 (А0 в шестнадцатеричных кодах). Именно об него ломались регулярные выражения, считая его не пробельным символом, а самым что ни на есть печатным. К счастью я понял в чем причина еще до того, как мне в голову пришла мысль утопиться в офисной кофеварке.

На этом я заканчиваю историю своих похождений. Если эта тема будет интересной, то напишу про свои дальнейшие мучения.

PS Самое главное. Будучи уверенным в собственной некомпетентности, хочу узнать у читателей — быть может есть более гуманные способы получения текста из вордовских файлов, о которых я не знаю? Также был бы признателен, если бы узнал о способах конвертирования из прочих форматов, которые могут содержать в себе текст, но с бухты-барахты не раскодируются. К примеру тот-же flash. Наверняка же есть способы.
Теги:
Хабы:
+8
Комментарии 10
Комментарии Комментарии 10

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн