PC Sử dụng pandoc lấy text sạch từ docx

Thảo luận trong 'Hướng dẫn chung' bắt đầu bởi tran ngoc anh, 4/9/21.

  1. tran ngoc anh

    tran ngoc anh Cử nhân

    Mình học lóm được một chiêu của anh @inno14, mình kết hợp với dùng pandoc để xử lý docx sau đó đóng gói epub. Sau khi cài Vui lòng đăng nhập hoặc đăng ký để xem link ta tiến hành như sau:

    - Xóa định dạng cho các dấu xuống dòng (hạn chế gây lỗi đóng tag </i>, </b> bị bị rớt xuống dòng khác sau khi mã hóa.):

    [​IMG]

    - mã hóa cho nghiêng đậm:

    [​IMG]

    [​IMG]

    - mã hóa cho canh giữa, canh phải:

    [​IMG]

    - Ngoài ra các định dạng khác như heading, danh sách, superscript, footnote hay endnote thì cứ mặc nó, pandoc sẽ chuyển qua thành tag html rất sạch. html sẽ được ngắt sẵn ở mỗi h1.

    - Lưu lại docx, mở cmd tại vị trí lưu file docx, gõ lệnh để pandoc chuyển docx thành epub. Với file pandoc.docx muốn pandoc chuyển thành pandoc.epub thì gõ:

    pandoc pandoc.docx -o pandoc.epub

    - Xong ta mở file pandoc.epub để giải mã nghiêng đậm bằng Saved search:

    + Sửa ngôn ngữ:

    [​IMG]

    + giải mã các </i> và </b>

    [​IMG]

    + giải mã các <i> và <b>

    [​IMG]

    + giải mã canh giữa (nhớ phân biệt hai loại dấu nháy kép: kép cong ôm và kép thẳng đứng):

    [​IMG]

    + Xóa title:

    [​IMG]

    + Dạng danh sách được pandoc chuyển thành html rất mượt:

    [​IMG]

    => Cái blockquote chỗ mũi tên hơi thừa, các bạn xóa <blockquote> (bằng regex nếu muốn xóa tất cả) rồi bấm nút bông tulip là sạch ngay.

    => Song đây là một tính năng hay của pandoc, tất cả các đoạn trên docx được định dạng thành hội thoại thì chuyển qua epub sẽ được blockquote như thế, cái này cũng như các heading và note, sup hay <u>, được mặc định khỏi mã hóa. Cứ hễ đoạn nào mà có lề trái được kéo rộng như thế thì thành blockquote hết, rất tiện nếu cuốn bạn đang làm có blockquote.

    + Xử lý thêm cho <li></li> ôm nội dung nếu chỉ có một dòng <p></p>:

    [​IMG]

    [​IMG]

    + Xóa section nếu muốn:

    [​IMG]

    => Section này là một tag khá hay, các bạn có thể tận dụng để chia khu vực để định dạng riêgn, ví dụ trong cùng một chương có khu vực màu đỏ, khu vực màu xanh chẳng hạn, hay một khu vực nào đó cần định dạng font riêng, như vậy ta ôm lấy khu vực đó bằng <section class="font-rieng">...</section> sau đó trong css thì section.font-rieng p {font-family: ...;} để cho các thẻ p bên trong section đó có font riêng theo ý mình.

    ==>> xem như tạm ổn, định dạng thêm sau đó nếu thích ^^ sơ sơ thì pandoc cộng với mã hóa (chỉ mã hóa nghiêng đậm, rút gọn so với phương pháp gốc của anh Inno14) sẽ có epub sạch, nền mà sạch thì vẽ gì lên cũng đẹp, chứ dọn rác class="calibre.."... oải lắm ^^

    Update: hình đầu tiên, rút gọn cách xóa định dạng của các dấu ngắt dòng.

    Update 2: vì chúng ta đã mã hoá các in nghiêng đậm thành <i> và <b> rồi, pandoc thì sau khi chuyển docx sang epub có những chỗ tự tạo thẻ <em> và <strong> nên chúng ta cần xoá <em> và <strong> trong epub đi nhé.
     
    Chỉnh sửa cuối: 6/5/22
    STTGK1999, nhanjkl, Lzero and 8 others like this.
  2. TPC13

    TPC13 Mầm non

    Thank you
     
    tran ngoc anh thích bài này.
  3. Numeron

    Numeron Lớp 5

    Xin phép chia sẻ cách của mình:
    - Dùng plugin Vui lòng đăng nhập hoặc đăng ký để xem link cho Sigil.
    - Dùng Vui lòng đăng nhập hoặc đăng ký để xem link của nó: dán nội dung vào rồi copy HTML đã được clean.
     
  4. vinaguy

    vinaguy Lớp 11

    Em thấy bác giải thích tỉ mỉ rồi, có thể em cũng đã làm được rồi... nhưng nhìn vào <i> và <b> rồi <center> gì gì đó (trong epub) mà em rối bời lên hết. Rồi em có ý này... Thay vì cứ replace ở word là <i> và <b> rồi <center> thì chúng ta hãy thay nó bằng một ký tự gì đó đặc biệt (Tùy mình chọn, mà không bị ảnh hưởng gì khi convert) rồi mặc xác pandoc nó muốn làm gì nó làm. Sau đó vào epub replace nó cho dễ coi, được không bác?
    Ví dụ:
    Word: In nghiêng: Thay vì <i>Bla bla bla</i> thì ta đặt thành là **Bla bla bla**
    Epub: Find: \*\*(.*?)\*\*
    Replace: <i>\1</i>
    Có lẽ dễ nhìn hơn biết bao nhiêu bác nhễ?
    Ý kiến ngu tí. Nếu sai bác bỏ qua :)
     
    tran ngoc anh thích bài này.
  5. tran ngoc anh

    tran ngoc anh Cử nhân

    Với đề xuất một ký tự mã hóa khác thay cho <i> hoặc <b> mình thấy ổn nhé.

    Với mình mình dùng chính tag html lý do để tránh nhầm lẫn, vì tag mở và tag đóng khó bị lẫn vào nhau như khi dùng **...**

    Về khoảng rối mắt thì rối thật, song lại không rối lắm khi Saved search của mình mình đã up file vào thread Các mẩu Css rồi.

    Khi mở file epub vừa được pandoc convert ra, bấm xong 3,4 saved search đó lấy đi không quá 1p đâu ^^

    Bonus, kiểu đánh dấu markdown rất dễ nhìn, nhân đề xuất của @vinaguy mình sẽ làm một thread khác về markdown, cũng là một phương pháp đánh dấu và chuyển thành epub cực kỳ sạch sẽ.
     
    songuyento and vinaguy like this.
  6. tran ngoc anh

    tran ngoc anh Cử nhân

    Vì mình có rất ít kinh nghiệm dùng Sigil nên mình sẽ thử pp của bạn, mai mình cài Sigil xem sao ^^ thank.
     
  7. tran ngoc anh

    tran ngoc anh Cử nhân

    Mình quên giải thích tại sao dùng pandoc vẫn phải mã hóa nghiêng đậm.

    Vốn dĩ pandoc sẽ xử lý nghiêng đậm thành tag <i>, <b> thuần như thế khi chuyển thành epub. Các tag thuần này chính là sự sạch sẽ mà chúng ta cần. Chứ không phải các class định dạng style italic hay bold.

    Tuy nhiên trong quá trình mình đóng epub giúp bạn @songuyento thì bạn ấy phát hiện mình chuyển file bị lệch nghiêng đậm. Cụ thể thì một dòng có phần đầu in nghiêng, phần sau thẳng, thì pandoc chuyển lỗi thành nửa đầu thẳng nửa sau nghiêng. Tương tự với cả in đậm.

    Tụi mình cũng phát hiện thêm là những chỗ chúng ta tự tay bôi đậm, xô nghiêng cho chữ, pandoc sẽ chuyển rất chính xác. Còn những chỗ lỗi, phần đa là có sẵn từ việc chuyển text từ PDF hoặc file OCR. Các dạng nghiêng đậm đó của docx tụi mình giả thiết là có style ẩn giống như các style css vậy, có lẽ quá rối mà với tốc độ chuyển đổi cao như pandoc sẽ gây lỗi. Vì docx cũng dựa trên cơ sở ngôn ngữ đánh dấu xml mà.

    Với phát hiện đó, mình quyết định sống chung với lũ, tận dụng thủ thuật rất hay trước đây của anh Inno14, kết hợp với các ưu điểm còn lại của pandoc cho ra tốc độ chuyển đổi nhanh, mã hóa chính xác, có luôn file epub được phân chương và thậm chí có sẵn liên kết chú thích sạch.
     
    songuyento and vinaguy like this.
  8. blue_green

    blue_green Mầm non

    Có cách nào convert từ docx mà giữ được các style không ạ?
    Ví dụ, trong Word mình set style abc cho 1 đoạn, thì khi convert sang HTML sẽ có <p class=“abc”>…</p>

    Cảm ơn mọi người :)
     
    tran ngoc anh thích bài này.
  9. machine

    machine Lớp 12

    Dùng thủ thuật "đánh dấu".
    B1: Trong Word:
    abcĐoạn 1
    abcĐoạn 2
    ...
    abcĐoạn n

    B2: Thêm thẻ <p>:
    <p>abcĐoạn 1</p>
    <p>abcĐoạn 2</p>
    ...
    <p>abcĐoạn n</p>

    B3: thay thế là xong:
    Find: <p>abc
    Replace: <p class="abc">

    Trong file css khai báo/định nghĩa class abc
    .abc{
    ...
    ...
    }
     
    tran ngoc anh, vinaguy and blue_green like this.
  10. tran ngoc anh

    tran ngoc anh Cử nhân

    Dùng markdown cũng được đó bạn.

    Nhưng mình nghĩ nếu muốn định dạng trang trí thì định dạng cuối trên epub sẽ tốt hơn. Trên docx chỉ nên định dạng các cấu trúc cơ bản như heading, khối blockquote, nghiêng đậm...
     
    machine, vinaguy and blue_green like this.
  11. vinaguy

    vinaguy Lớp 11

    Kết quả cuối cùng của chúng ta là epub. Nên em đồng ý là trên word chỉ nên là định dang cơ bản. Định dạng phức tạp nên làm trực tiếp trên epub (cũng không khó gì). Định dạng trên word có đẹp bao nhiêu rồi lúc convert nó cũng xiêu xẹo méo mó và rác nhiều mà thôi
     
    machine and tran ngoc anh like this.
  12. tran ngoc anh

    tran ngoc anh Cử nhân

    Tách thread.
     
    Chỉnh sửa cuối: 5/9/21
  13. tran ngoc anh

    tran ngoc anh Cử nhân

    Phần thêm cụ thể chi tiết cho footnote:

    [​IMG]

    => Song mình lại rất ít khi đánh dấu chú thích cụ thể như thế này, mình chỉ chấm 1 dấu tại vị trí đó mà thôi, ở trong epub mình chạy function theo mẫu chứ mình không đủ kiên nhẫn đánh dấu như hình.
     
  14. machine

    machine Lớp 12

    Bí quyết là "đánh dấu" để thẻ p chặn 2 đầu paragraph ở dạng thường (Not Bold Not Italic) :D Sau đó mới định dạng thẻ i và thẻ b.
    Chú ý: Khi đó ở đầu văn bản sẽ thiếu 1 thẻ <p>, cuối văn bản sẽ thừa 1 thẻ <p>.

    Cụ thể:
    B1: thêm thẻ p (đánh dấu thẻ p)
    p.jpg

    B2: sau đó lần lượt thêm thẻ <b> và <i>
    i.jpg

    Video chi tiết và file Word trong đính kèm.
     

    Các file đính kèm:

  15. tran ngoc anh

    tran ngoc anh Cử nhân

    @machine có trích nhầm đoạn không vậy ^ ^
     
  16. tran ngoc anh

    tran ngoc anh Cử nhân

    Thôi để mình tách thread ra vậy, dài quá các bạn đọc không kỹ gây hiểu lầm điểm mấu chốt của phương pháp quá!
     
  17. machine

    machine Lớp 12

    Mình thấy đoạn trích dẫn đó với post 1 bạn xử lý thẻ <p> hơi cồng kềnh nên muốn góp ý đoạn xử lý thẻ <p> :D
     
  18. tran ngoc anh

    tran ngoc anh Cử nhân

    Ái chà, phương pháp của mình hoàn toàn vắng bóng thẻ <p> machine ơi, mình đã nói học hỏi từ anh Inno14 rồi nên cái vụ gắn thẻ <p> mình quá rõ.
     
    machine thích bài này.
  19. machine

    machine Lớp 12

    OK đã hiểu :D
    Lúc trước đọc nhanh quá :D
    Nhờ Mod nào đi qua xóa giùm post này cho đỡ loãng topic. Cảm ơn.
     
    Chỉnh sửa cuối: 5/9/21
    tran ngoc anh thích bài này.
  20. machine

    machine Lớp 12

    Đoạn "chạy function theo mẫu" đọc ở đâu ấy nhỉ? Hóng :D
    Nhờ Mod nào đi qua xóa giùm post này cho đỡ loãng topic.
     
    Chỉnh sửa cuối: 5/9/21
: epub, pandoc

Chia sẻ trang này