Преобразование файлов .docx в обычный текст и сохранение разрывов строк для сохранения ссылок на номера строк в исходном документе: как и какие последствия?


9

Я экспортирую содержимое MS Word в обычный текст для использования с текстовыми и файловыми утилитами. У меня есть ограничение, когда функция нумерации строк была включена в программном обеспечении MS, и любая ссылка на номера строк в конечном выводе должна соответствовать этой нумерации. Итак, введите «нумерация строк»:

введите описание изображения здесь ( Poe, EA )

Очевидно, что для Word такая нумерация не разбивает строки на новой строке , она разбивает «строки» после правого поля (или чего-то еще). Похоже docx2txt, что сценарий не учитывает это по умолчанию и разрывает строки на новую строку. Поэтому, если я использую grep -nнумерацию, строки не будут соответствовать функции нумерации исходных строк, как показано выше. Из документации не совсем понятно, как мне нужно отредактировать скрипт Perl для преобразования файлов так, как мне нужно в этом случае:

our $config_newLine = "\n"; # Alternative is "\r\n".
our $config_lineWidth = 80; # Line width, used for short line justification.

Я попытался подставляя \nдля \r\nно это не похоже на работу для меня. Поэтому я прибег к экспорту документов напрямую из Word со следующими настройками (сохранить в виде обычного текста на v.2013,64pc):

  • Unicode (UTF-8)
  • Вставить разрывы строк + конец строк с помощью (CR / LF)
  • Разрешить замену персонажа

И теперь действительно , когда я использовать те .txtфайлы , есть идеальное совпадение между номерами строк , в особенности нумерации источника и grep -nвыводе.


  • Есть ли какая-то конкретная конфигурация / процесс, о котором я должен знать, docx2txtили подобная утилита командной строки, которая позволила бы мне конвертировать мои файлы .docx в обычный текст, сохраняя разрывы строк, не прибегая к Word, как я?
  • Каковы наилучшие практики для экспорта документов MS Word (которые могут содержать символы с акцентом) в простой текст для использования с файловыми / текстовыми утилитами в отношении разрывов строк и форматирования; и есть ли какие-либо негативные последствия с настройками, которые я выбрал для экспорта, т.е. вставкой CR / LF?

Образец

Как предложено, я предоставлю образец. В этом архиве rar я упаковал файл .docx с простыми абзацами и его экспортированный файл .txt, используя Word с вышеупомянутыми параметрами. Последнее можно сравнить с запуском по умолчанию для docx2txtисходного файла.


Можете ли вы дать нам пример файла?
cuonglm

Не можете ли вы сохранить его как текстовый файл из Word? Если это дает вам плохое форматирование, то я бы предложил использовать vim или emacs для решения проблемы (потому что я уверен, что это шаблон).
Стивен Уолтон

1
@ Стивен Уолтон Спасибо, да, это работает, когда я экспортирую в текст из Word. Но я не хочу использовать Word, это моя точка зрения. Я хотел бы полагаться только на сценарий, чтобы сделать это. Я хочу процесс для партии.

@Gnouc Образец предоставлен. Спасибо!

Ответы:


8

docx2txtработает с информацией в docxфайле, который представляет собой сжатый набор файлов XML.

Что касается переноса строк, .docxданные XML включают в себя только информацию о параграфах и жестких переносах , а не о мягких переносах. Мягкие разрывы являются результатом рендеринга текста с использованием определенного шрифта, размера шрифта и ширины страницы. docx2txtобычно просто пытается разместить текст в 80 столбцах (можно настроить 80 столбцов), не обращая внимания на шрифт и размер шрифта. Если ваш файл .docxсодержит информацию о шрифтах из системы Windows, которая недоступна в Unix / Linux, то выполнение экспорта в .txtчерез Open / LibreOffice также вряд ли приведет к такой же компоновке, хотя она и пытается сделать хорошую работу¹.

Так docx2txtили любая другая утилита командной строки, включая управляемую командной строкой обработку Open / LibreOffice, не гарантированно преобразует текст в ту же компоновку, что и экспорт из Word².

Если вы хотите (или вынуждает требования клиента) выполнять рендеринг точно так, как это делает Word, то, по моему опыту, есть только один способ: пусть Word выполняет рендеринг. Столкнувшись с такой же проблемой, как у вас, и получив несовместимые результаты с использованием других инструментов, включая OpenOffice, я вернулся к установке виртуальной машины Windows на хост-сервере Linux. На клиентской виртуальной машине программа наблюдает за тем, чтобы входящие файлы были преобразованы на хосте, который запускается и запускает Word, чтобы выполнить преобразование, а затем копировать обратно результат⁴.

Решения об использовании только CR / LF или LF, или UTF-8, или какой-либо другой кодировки в .txtзначительной степени зависят от того, как используются полученные файлы. Если полученные файлы используются в Windows, я бы определенно выбрал CR / LF, UTF-8 и спецификацию UTF-8 . Современные программы в Linux могут сделать вывод, что файл имеет формат UTF-8, но не будут раздражать спецификацию и / или использовать эту информацию. Вы должны проверить все ваши целевые приложения на совместимость, если они известны заранее.

Sort Такая несовместимость является основной причиной, по которой некоторые из моих друзей не могут перейти на Linux с Windows, хотя им бы этого хотелось. Они должны использовать MicroSoft Word, так как Open / LibreOffice время от времени искажает тексты, которыми они обмениваются с клиентами.
² Вы можете установить все шрифты, используемые в файлах Word, и иногда вам может повезти с некоторыми текстами.
³ Рендеринг PDF-файлов из.doc/.docx
Программа использует автоматизацию графического интерфейса - как будто кто-то щелкает по ее меню - и не пытается управлять Word через API. Я почти уверен, что последнее может быть выполнено и будет иметь преимущество в том, что не сломает вещи, если Word будет обновлен


Спасибо, это действительно проницательно! Я не был знаком с форматом, но я вызвал сценарий, vimи я понял, что это действительно все о xml - я должен изучить его дальше. Не думал о шрифтах или даже переносах. Также во время какой-то операции мне пришло сообщение от текстового редактора с жалобой на спецификацию, поэтому я прочитаю ссылку (так как понятия не имел, что это было). Я был удивлен вашим решением VM! Я немного знаком с автоматизацией графического интерфейса - я видел, как она использовалась для создания рабочей станции после репликации базового образа; не думал об этом ...

В конце концов, это означает, что кому-то, выполняющему подобные задачи, может потребоваться усвоить стоимость нескольких лицензий. Может быть, однажды они сделают уровень с API для каждого использования. Разрывание линий на мягких перерывах полностью меняет динамику использования такого инструмента, как grep; если строки длинные, это снижает «точность» на выходе. Я предполагаю, что ограничения зависят от характера контента и от того, как он используется. С другой стороны, таких вопросов не было бы, если бы в документах не использовалась функция нумерации Word. Создание структуры документа, чтобы охватить унаследованные материалы, является серьезным бизнесом. Ура!
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.