Konversi file .docx ke teks biasa dan mempertahankan jeda baris untuk mempertahankan referensi nomor baris ke dokumen sumber: howto & implikasi?

9

Saya mengekspor konten MS Word ke teks biasa untuk digunakan dengan utilitas teks & file. Saya memiliki kendala di mana fitur penomoran baris telah diaktifkan di perangkat lunak MS, dan referensi ke nomor baris dalam hasil akhir harus cocok dengan penomoran itu. Jadi masukkan "garis penomoran":

masukkan deskripsi gambar di sini ( Poe, EA )

Jelas bagi Word , penomoran semacam itu tidak memecah garis pada baris baru , itu memecah "garis" setelah margin yang tepat (atau sesuatu). Skrip seperti docx2txt, sepertinya tidak menerangkan hal ini secara default dan memecah baris pada baris baru. Jadi jika saya gunakan grep -ndengan penomoran, garis tidak akan cocok dengan fitur nomor baris sumber, seperti diilustrasikan di atas. Tidak jelas dari dokumentasi bagaimana saya perlu mengedit skrip Perl untuk mengonversi file seperti yang saya perlukan dalam kasus ini:

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

Aku mencoba mengganti \nuntuk \r\ntapi itu tampaknya tidak bekerja untuk saya. Jadi saya terpaksa mengekspor dokumen langsung dari Word dengan pengaturan berikut (simpan sebagai teks biasa , di v.2013,64pc):

  • Unicode (UTF-8)
  • Masukkan jeda baris + garis akhir dengan (CR / LF)
  • Izinkan penggantian karakter

Dan sekarang memang ketika saya menggunakan itu .txtfile ada pertandingan yang sempurna antara nomor baris dalam fitur sumber penomoran dan grep -noutput.


  • Apakah ada konfigurasi / proses spesifik yang harus saya ketahui docx2txtatau utilitas baris perintah serupa yang akan memungkinkan saya untuk mengkonversi file .docx saya menjadi teks biasa sambil mempertahankan jeda baris, tanpa menggunakan Word seperti yang saya lakukan?
  • Apa praktik terbaik , jika ada, untuk mengekspor dokumen MS Word (yang mungkin berisi karakter beraksen) ke teks biasa untuk digunakan dengan utilitas file / teks, sehubungan dengan jeda baris dan pemformatan; dan apakah ada implikasi negatif dengan pengaturan yang saya pilih untuk mengekspor yaitu memasukkan CR / LF?

Sampel

Seperti yang disarankan, saya memberikan sampel. Dalam arsip rar ini , saya bundel file .docx dengan paragraf sederhana, dan file .txt yang diekspor menggunakan Word dengan opsi yang disebutkan di atas. Yang terakhir dapat dibandingkan dengan menjalankan default docx2txtpada file sumber.

Komunitas
sumber
Bisakah Anda memberi kami file contoh?
cuonglm
Bisakah Anda tidak menyimpannya sebagai file txt dari Word? Jika itu memberi Anda format buruk maka saya akan menyarankan menggunakan vim atau emacs untuk memperbaiki masalah (karena saya yakin itu terpola).
Steven Walton
1
@ Sebelas Walton Terima kasih, ya itu berfungsi ketika saya mengekspor ke txt dari Word. Tapi saya tidak mau harus menggunakan Word. Saya berharap saya hanya bisa mengandalkan skrip untuk melakukan itu. Saya ingin proses untuk batch.
@Gnouc Sampel telah disediakan. Terima kasih!

Jawaban:

8

docx2txtbekerja pada informasi dalam docxfile yang merupakan kumpulan file XML zip.

Berkenaan dengan pembungkus baris, .docxdata XML hanya mencakup informasi tentang paragraf dan hard-break, bukan tentang soft-breaks. Istirahat lunak adalah hasil dari rendering teks dalam font tertentu, ukuran font dan lebar halaman. docx2txtbiasanya hanya mencoba memasukkan teks dalam 80 kolom (80 kolom dapat dikonfigurasi), tanpa memperhatikan font dan ukuran font. Jika Anda .docxberisi informasi font dari sistem Windows yang tidak tersedia di Unix / Linux, maka melakukan ekspor ke .txtmelalui Open / LibreOffice juga tidak akan menghasilkan tata letak yang sama, meskipun ia mencoba melakukan pekerjaan yang baik¹.

Jadi docx2txtatau utilitas baris perintah lainnya, termasuk pemrosesan Open / LibreOffice yang digerakkan oleh commandline, tidak akan menjamin konversi teks ke tata letak yang sama seperti mengekspor dari Word does².

Jika Anda ingin (atau dipaksa oleh persyaratan klien) untuk membuat persis seperti yang dilakukan Word, dalam pengalaman saya hanya ada satu cara: biarkan Word melakukan rendering. Ketika dihadapkan dengan masalah yang sama dengan Anda³, dan memiliki hasil yang tidak kompatibel menggunakan alat lain, termasuk OpenOffice, saya kembali menginstal Windows VM pada server Linux host. Pada VM klien, sebuah program mengamati file yang masuk untuk dikonversi pada host, yang akan memulai dan mengarahkan Word untuk melakukan konversi dan kemudian menyalin kembali hasilnya⁴.

Keputusan tentang menggunakan CR / LF atau LF saja, atau UTF-8 atau pengkodean lainnya untuk .txtsebagian besar tergantung pada bagaimana file yang dihasilkan digunakan. Jika file yang dihasilkan digunakan pada Windows saya pasti akan pergi dengan CR / LF, UTF-8 dan BOM UTF-8 . Program modern di Linux dapat menyimpulkan bahwa suatu file adalah UTF-8, tetapi tidak akan muntah di BOM dan / atau menggunakan informasi itu. Anda harus menguji semua aplikasi target Anda untuk kompatibilitas jika diketahui di muka.

¹ Ketidakcocokan semacam ini adalah alasan utama beberapa teman saya tidak dapat mengubah ke Linux dari Windows, meskipun mereka menginginkannya. Mereka harus menggunakan MicroSoft Word, sebagai Open / LibreOffice sesekali mangles teks yang mereka tukarkan dengan klien.
² Anda dapat menginstal semua font yang digunakan dalam file Word dan mungkin beruntung untuk beberapa teks, kadang-kadang.
³ Rendering PDF dari.doc/.docx
Program ini menggunakan otomasi GUI — seolah-olah seseorang mengklik menunya — dan tidak berusaha menggerakkan Word melalui API. Saya cukup yakin yang terakhir dapat dilakukan juga dan akan memiliki keuntungan tidak melanggar hal-hal jika Word akan ditingkatkan

Anthon
sumber
Terima kasih, ini sangat mendalam! Saya tidak terbiasa dengan format tetapi saya memanggil skrip dari vimdan saya bisa melihat itu semua tentang xml memang - saya harus melihat lebih jauh ke dalamnya. Belum memikirkan font, atau bahkan mungkin tanda hubung. Juga selama beberapa operasi saya mendapat pesan dari editor teks yang mengeluh tentang BOM jadi saya akan membaca tautannya (karena saya tidak tahu apa ini). Saya terkejut dengan solusi VM Anda! Saya agak terbiasa dengan otomatisasi GUI - Saya pernah melihatnya digunakan untuk membangun workstation setelah gambar dasar direplikasi; tidak memikirkan hal ini ...
Pada akhirnya yang berarti bahwa seseorang akan soho dengan tugas-tugas seperti mungkin perlu internalisasi biaya beberapa lisensi. Mungkin suatu hari mereka melakukan tier dengan API sekali pakai. Garis putus-putus pada soft-break sepenuhnya mengubah dinamika penggunaan alat seperti grep; jika garisnya panjang, ini mengurangi "presisi" pada output. Saya kira kendala berbeda-beda sesuai dengan sifat konten dan bagaimana penggunaannya. Di sisi lain pertanyaan seperti itu tidak akan terjadi jika dokumen tidak mengandalkan fitur penomoran kata di sini. Membangun kerangka dokumen untuk mencakup materi warisan adalah bisnis serius. Bersulang!