Convertendo arquivos .docx em texto sem formatação e preservando quebras de linha para manter as referências de número de linha ao documento de origem: instruções e implicações?


9

Estou exportando o conteúdo do MS Word para texto sem formatação para uso com os utilitários de texto e arquivo. Eu tenho uma restrição em que a linha numeração recurso tenha sido habilitado no software MS, e qualquer referência a números de linha no resultado final deve corresponder à numeração. Então digite "linhas numeradas":

insira a descrição da imagem aqui ( Poe, EA )

Obviamente, para o Word , esse tipo de numeração não quebra linhas na nova linha , quebra "linhas" após a margem direita (ou algo assim). Um script como docx2txt, não explica isso por padrão, parece e quebra linhas na nova linha. Portanto, se eu usar grep -na numeração, as linhas não corresponderão ao recurso de números de linha de origem, conforme ilustrado acima. Não está exatamente claro na documentação como eu precisaria editar o script Perl para converter os arquivos da maneira que preciso neste caso:

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

Eu tentei substituir \npara \r\n, mas isso não parece trabalhar para mim. Por isso, comecei a exportar os documentos diretamente do Word com as seguintes configurações (salve como texto simples , na v.2013,64pc):

  • Unicode (UTF-8)
  • Inserir quebras de linha + linhas finais com (CR / LF)
  • Permitir substituição de caracteres

E agora, de fato, quando eu uso os .txtarquivos, há uma combinação perfeita entre os números de linha no recurso de numeração de origem e a grep -nsaída.


  • Existe alguma configuração / processo específico que eu deva conhecer docx2txtou um utilitário de linha de comando semelhante que me permita converter meus arquivos .docx em texto sem formatação, preservando as quebras de linha, sem recorrer ao Word como eu fiz?
  • Quais são as práticas recomendadas , se houver, para exportar documentos do MS Word (que podem conter caracteres acentuados) para texto sem formatação para uso com utilitários de arquivo / texto, com relação a quebras de linha e formatação; e existem implicações negativas nas configurações que escolhi para exportar, ou seja, inserir CR / LF?

Amostra

Como sugerido, forneço uma amostra. Neste arquivo rar , agrupei um arquivo .docx com parágrafos simples e seu arquivo .txt exportado usando o Word com as opções acima mencionadas. O último pode ser comparado com uma execução padrão docx2txtno arquivo de origem.


Você pode nos dar um arquivo de exemplo?
precisa saber é

Você não pode salvá-lo como um arquivo txt do Word? Se você tiver uma formatação incorreta, sugiro usar o vim ou o emacs para corrigir o problema (porque tenho certeza de que é padronizado).
Steven Walton

1
@ Steven Walton Obrigado, sim, funciona quando eu exporto para o txt do Word. Mas não quero usar o Word, é o meu ponto. Eu gostaria de poder confiar apenas no script para fazer isso. Eu quero um processo para lote.

@Gnouc A amostra foi fornecida. Obrigado!

Respostas:


8

docx2txttrabalha com as informações no docxarquivo que é um conjunto compactado de arquivos XML.

Com relação à quebra automática de linha, os .docxdados XML incluem apenas informações sobre parágrafos e interrupções, e não sobre interrupções. Quebras suaves são o resultado da renderização do texto em uma fonte, tamanho e largura de página específicos. docx2txtnormalmente, apenas tenta ajustar o texto em 80 colunas (80 colunas são configuráveis), sem considerar a fonte e o tamanho da fonte. Se você .docxcontém informações de fontes de um sistema Windows que não está disponível no Unix / Linux, a exportação para o .txtOpen / LibreOffice também dificilmente resultaria no mesmo layout, embora tente fazer um bom trabalho¹.

Então, docx2txtou qualquer outro utilitário de linha de comando, incluindo linha de comando impulsionada processamento Abrir / LibreOffice, vai não garantida converter o texto para o mesmo layout como a exportação de Word does².

Se você deseja (ou é forçado pelos requisitos do cliente) a renderizar exatamente como o Word, existe na minha experiência apenas uma maneira: deixe o Word fazer a renderização. Quando me deparei com um problema semelhante ao seu³ e com resultados incompatíveis usando outras ferramentas, incluindo o OpenOffice, voltei a instalar uma VM do Windows no servidor Linux host. Na VM do cliente, um programa observa os arquivos recebidos a serem convertidos no host, o que iniciaria e conduziria o Word para fazer a conversão e, em seguida, copiaria novamente o resultado⁴.

As decisões sobre o uso apenas de CR / LF ou LF, ou UTF-8 ou alguma outra codificação .txtdependem amplamente de como os arquivos resultantes são usados. Se os arquivos resultantes forem usados ​​no Windows, eu definitivamente utilizaria CR / LF, UTF-8 e uma UTF-8 BOM . Os programas modernos no Linux podem deduzir que um arquivo é UTF-8, mas não vomitam na BOM e / ou usam essas informações. Você deve testar todos os aplicativos de destino quanto à compatibilidade, se esses forem conhecidos antecipadamente.

¹ Este tipo de incompatibilidade é o principal motivo alguns dos meus amigos não pode mudar para o Linux a partir do Windows, embora eles gostariam de. Eles precisam usar o MicroSoft Word, pois o Open / LibreOffice de vez em quando gerencia os textos que eles trocam com os clientes.
² Você pode instalar todas as fontes usadas nos arquivos do Word e pode ter sorte com alguns textos, algumas vezes.
³ Renderizando PDFs de.doc/.docx
O programa usa a automação da GUI - como se alguém estivesse clicando em seus menus - e não tenta dirigir o Word por meio de uma API. Tenho certeza de que o último pode ser feito também e teria a vantagem de não quebrar as coisas se o Word fosse atualizado


Obrigado, isso é realmente perspicaz! Eu não estava familiarizado com o formato, mas chamei o script vime pude ver que é tudo sobre xml - de fato, devo procurar mais. Não tinha pensado em fontes, ou talvez até hifenização. Também durante alguma operação, recebi uma mensagem de um editor de texto reclamando sobre a lista técnica, por isso vou ler o link (pois não sabia o que era). Fiquei surpreso com sua solução de VM! Eu estou um pouco familiarizado com a automação da GUI - vi que ela era usada para criar uma estação de trabalho após a replicação de uma imagem base; não pensar sobre isso ...

No final, isso significa que alguém que está indo para o alto com essas tarefas pode precisar internalizar o custo de algumas licenças. Talvez um dia eles façam uma camada com a API por uso. Quebrar linhas em interrupções suaves altera completamente a dinâmica do uso de uma ferramenta como grep; se as linhas são longas, isso diminui a "precisão" na saída. Eu acho que as restrições variam de acordo com a natureza do conteúdo e como ele é usado. Por outro lado, essas perguntas não aconteceriam se os documentos não tivessem contado com o recurso de numeração do Word aqui. Construir uma estrutura de documentos para abranger material legado é um negócio sério. Felicidades!
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.