Chuyển đổi các tệp .docx thành văn bản thuần túy và duy trì ngắt dòng để duy trì tham chiếu số dòng cho tài liệu nguồn: làm thế nào và ý nghĩa?


9

Tôi đang xuất nội dung MS Word sang văn bản thuần để sử dụng với các tiện ích văn bản và tệp. Tôi có một ràng buộc trong đó tính năng đánh số dòng đã được bật trong phần mềm MS và mọi tham chiếu đến số dòng trong đầu ra cuối cùng phải khớp với cách đánh số đó. Vì vậy, nhập "dòng đánh số":

nhập mô tả hình ảnh ở đây ( Poe, EA )

Rõ ràng đối với Word , kiểu đánh số đó không ngắt dòng ở dòng mới , nó ngắt "dòng" sau lề phải (hoặc một cái gì đó). Một tập lệnh như docx2txt, không có tài khoản này theo mặc định nó có vẻ như và phá vỡ các dòng ở dòng mới. Vì vậy, nếu tôi sử dụng grep -nvới đánh số, các dòng sẽ không khớp với tính năng số dòng nguồn, như minh họa ở trên. Không rõ chính xác từ tài liệu về cách tôi cần chỉnh sửa tập lệnh Perl để chuyển đổi các tệp theo cách tôi cần trong trường hợp này:

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

Tôi cố gắng thay thế \ncho \r\nnhưng điều đó dường như không làm việc cho tôi. Vì vậy, tôi đã sử dụng để xuất tài liệu trực tiếp từ Word với các cài đặt sau (lưu dưới dạng văn bản thuần túy , trên v.2013,64pc):

  • Unicode (UTF-8)
  • Chèn ngắt dòng + dòng kết thúc bằng (CR / LF)
  • Cho phép thay thế nhân vật

Và bây giờ, thực sự khi tôi sử dụng các .txttập tin, có một sự kết hợp hoàn hảo giữa các số dòng trong tính năng đánh số nguồn và grep -nđầu ra.


  • Có bất kỳ cấu hình / quy trình cụ thể nào tôi nên biết docx2txthoặc một tiện ích dòng lệnh tương tự có thể cho phép tôi chuyển đổi các tệp .docx của mình thành văn bản thuần trong khi duy trì ngắt dòng, mà không cần dùng đến Word như tôi đã làm không?
  • Các thực tiễn tốt nhất , nếu có, để xuất tài liệu MS Word (có thể chứa các ký tự có dấu) thành văn bản thuần để sử dụng với các tiện ích tệp / văn bản, liên quan đến ngắt dòng và định dạng; và có bất kỳ ý nghĩa tiêu cực nào với các cài đặt tôi đã chọn để xuất tức là chèn CR / LF không?

Mẫu vật

Theo đề nghị tôi cung cấp một mẫu. Trong kho lưu trữ rar này , tôi đã gói một tệp .docx với các đoạn đơn giản và tệp .txt đã xuất của nó bằng Word với các tùy chọn đã nói ở trên. Cái sau có thể được so sánh với một lần chạy mặc định docx2txttrên tệp nguồn.


Bạn có thể cho chúng tôi tập tin ví dụ?
cuonglm

Bạn không thể lưu nó dưới dạng tệp txt từ Word? Nếu nó mang lại cho bạn định dạng xấu thì tôi khuyên bạn nên sử dụng vim hoặc emacs để khắc phục sự cố (vì tôi chắc chắn rằng nó có khuôn mẫu).
Steven Walton

1
@Steven Walton Cảm ơn bạn, vâng, nó hoạt động khi tôi xuất sang txt từ Word. Nhưng tôi không muốn phải sử dụng Word là quan điểm của tôi. Tôi ước tôi chỉ có thể dựa vào kịch bản để làm điều đó. Tôi muốn một quá trình cho lô.

@Gnouc Mẫu đã được cung cấp. Cảm ơn bạn!

Câu trả lời:


8

docx2txthoạt động dựa trên thông tin trong docxtệp là tập hợp các tệp XML được nén.

Liên quan đến việc gói dòng .docxdữ liệu XML chỉ bao gồm thông tin về các đoạn văn và phần cứng, không phải về phần mềm. Các ngắt mềm là kết quả của việc hiển thị văn bản theo một phông chữ cụ thể, cỡ chữ và chiều rộng trang. docx2txtthông thường chỉ cố gắng khớp văn bản trong 80 cột (80 cột có thể định cấu hình) mà không liên quan đến phông chữ và cỡ chữ. Nếu .docxthông tin phông chữ của bạn chứa hệ thống Windows không có trên Unix / Linux, thì việc xuất sang .txtqua Open / LibreOffice cũng không thể dẫn đến bố cục tương tự, mặc dù nó cố gắng thực hiện tốt công việc.

Vì vậy, docx2txthoặc bất kỳ tiện ích dòng lệnh nào khác, bao gồm xử lý Open / LibreScript được điều khiển bằng dòng lệnh, sẽ không được đảm bảo chuyển đổi văn bản thành bố cục giống như xuất từ ​​Word does².

Nếu bạn muốn (hoặc bị ép buộc bởi các yêu cầu của khách hàng) để hiển thị chính xác như Word, thì theo kinh nghiệm của tôi, chỉ có một cách: hãy để Word thực hiện kết xuất. Khi gặp vấn đề tương tự như của bạn và có kết quả không tương thích khi sử dụng các công cụ khác, bao gồm OpenOffice, tôi đã hoàn nguyên để cài đặt Windows VM trên máy chủ Linux. Trên máy khách VM, một chương trình quan sát các tệp đến sẽ được chuyển đổi trên máy chủ, nó sẽ khởi động và điều khiển Word để thực hiện chuyển đổi và sau đó sao chép lại kết quả⁴.

Các quyết định về việc chỉ sử dụng CR / LF hoặc LF, hoặc UTF-8 hoặc một số mã hóa khác .txtphần lớn phụ thuộc vào cách các tệp kết quả được sử dụng. Nếu các tệp kết quả được sử dụng trên Windows, tôi chắc chắn sẽ sử dụng CR / LF, UTF-8 và UTF-8 BOM . Các chương trình hiện đại trên Linux có thể suy luận rằng một tệp là UTF-8, nhưng sẽ không barf trên BOM và / hoặc sử dụng thông tin đó. Bạn nên kiểm tra tất cả các ứng dụng mục tiêu của mình để biết tính tương thích nếu chúng được biết trước.

¹ loại này không tương thích là lý do chính một số người bạn của tôi không thể thay đổi sang Linux từ Windows, mặc dù họ muốn. Họ phải sử dụng MicroSoft Word, như Open / LibreScript mỗi lần một văn bản mangle mà họ trao đổi với khách hàng.
² Bạn có thể cài đặt tất cả các phông chữ được sử dụng trong các tệp Word và đôi khi có thể gặp may mắn đối với một số văn bản.
³ Rendering file PDF từ.doc/.docx
Chương trình sử dụng giao diện tự động hóa-như thể ai đó đang cách nhấn vào nó menu và không cố gắng lái xe Word thông qua một API. Tôi khá chắc chắn rằng điều sau cũng có thể được thực hiện và sẽ có lợi thế là không phá vỡ mọi thứ nếu Word được nâng cấp


Cảm ơn bạn, điều này thực sự sâu sắc! Tôi không quen thuộc với định dạng nhưng tôi đã gọi kịch bản từ đó vimvà tôi có thể thấy tất cả là về xml - tôi nên nhìn sâu hơn vào nó. Không nghĩ về phông chữ, hoặc thậm chí có thể gạch nối. Ngoài ra trong một số thao tác tôi đã có một tin nhắn từ một trình soạn thảo văn bản phàn nàn về BOM vì vậy tôi sẽ đọc liên kết (vì tôi không biết đây là gì). Tôi đã rất ngạc nhiên bởi giải pháp VM của bạn! Tôi có phần quen thuộc với tự động hóa GUI - Tôi đã thấy nó được sử dụng để xây dựng một máy trạm sau khi một hình ảnh cơ sở được sao chép; đã không nghĩ về điều này ...

Cuối cùng, điều đó có nghĩa là ai đó đi soho với những nhiệm vụ như vậy có thể cần phải nội bộ hóa chi phí của một vài giấy phép. Có thể một ngày nào đó họ thực hiện một lớp với API mỗi lần sử dụng. Các dòng ngắt trên phần mềm phá vỡ hoàn toàn thay đổi tính năng động của việc sử dụng một công cụ như grep; nếu các dòng dài, điều này làm giảm "độ chính xác" trên đầu ra. Tôi đoán các ràng buộc khác nhau tùy theo tính chất của nội dung và cách sử dụng. Mặt khác, những câu hỏi như vậy sẽ không xảy ra nếu các tài liệu không dựa vào tính năng đánh số Word ở đây. Xây dựng một khung tài liệu để bao gồm các tài liệu kế thừa là việc kinh doanh nghiêm túc. Chúc mừng!
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.