Hướng dẫn Quy trình dọn rác epub - áp dụng cho những epub convert bằng Calibre và những epub có nhiều rác

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

  1. vinaguy

    vinaguy Lớp 11

    QUY TRÌNH DỌN RÁC EPUB

    (Được dùng cho những epub convert từ word, mobi, prc, azw3 bằng Calibre hoặc những epub có sẵn chứa nhiều rác)

    Nhóm xây dựng quy trình

    Ở đây, chúng tôi chỉ nêu ra một trong vô số các cách làm sạch code rác (code không cần thiết cho một epub). Do đó, các bạn khác có cách nào nhanh hơn thì có thể bổ sung thêm vào đây để chúng ta càng ngày càng hoàn thiện và thực hiện cách làm một ebook một cách nhanh chóng nhất có thể nhé.

    “Quy trình dọn rác” này được tổng hợp từ các phương pháp dọn rác của: Vinaguy, RGBCD và Tran Ngoc Anh (các thành viên của TVE).

    Hy vọng rằng, đây là một cách hữu ích cho những ai thích biên tập lại ebook theo ý của bản thân để có được một cuốn ebook đẹp.

    Tại sao phải “dọn rác” cho ebook?

    Dọn rác cho ebook sẽ mang lại rất nhiều lợi ích trong việc biên tập ebook:

    - Dọn xong rác, chúng ta sẽ dễ dàng định dạng lại epub theo sở thích của mình, và đương nhiên là có được một cuốn sách đẹp (theo nhìn nhận của người biên tập đó – Còn đẹp đến đâu thì nó còn phụ thuộc vào nghệ thuật của từng cá nhân).

    - Dọn rác làm giảm dung lượng của file epub đáng kể, có nhiều cuốn sách, nội dung chỉ chiếm 1/3 tài liệu, phần còn lại là rác.

    - Dễ dàng soát lỗi chính tả hơn: Với một cuốn sách ngập rác như hình minh họa dưới đây thì các thành viên không rành về epub và chỉ muốn tham gia soát lỗi trực tiếp trên epub cũng khó lòng mà tìm được vị trí lỗi để sửa lỗi chính tả. Và một điều quan trọng hơn nữa là chúng ta có thể dễ dàng dùng từ điển của máy tính để soát lỗi.

    Các bước dọn rác

    Bước 1: Mở sách cần sửa và kiểm tra sơ bộ

    Mở cuốn sách (mới được convert từ word sang epub bằng Calibre hoặc những cuốn sách được convert qua lại giữa các định dạng khác nhau epub/mobi/prc/azw3 vân vân…) bằng Calibre Editor chúng ta sẽ thấy rác tràn ngập (hình dưới).

    upload_2021-9-26_10-48-1.png

    Bước 2: Xác định các định dạng cần giữ lại cho cuốn sách

    Ở đây tùy mỗi cá nhân biên tập sách thích giữ những định dạng nào. Nhưng phần lớn là các định dạng sau:

    - In đậm (bold)

    - In nghiêng (italic)

    - In đậm nghiêng (bold and italic)

    - Tab giữa (căn lề ở giữa) (center)

    - Tab phải (căn lề về bên phải) (right)

    - Sup (số mũ, chú thích (viết cao lên và bé hơn so với bình thường))

    - Gạch chân (underline)

    - Vân vân… tùy người biên tập và tùy trường hợp.

    Bước 3: Xóa các class không cần giữ lại trong file css

    Sau khi đã mở epub bằng Calibre Editor, chúng ta hãy mở file có đuôi là *.css lên và bắt đầu xóa những class không chứa các yếu tố đã liệt kê ở bước 2 (xem hình).

    upload_2021-9-26_9-52-32.png

    Bước 4: Tẩy rác bằng Remove unused CSS rules

    Sau khi bỏ đi các class không liên quan như hình trên ta thực hiện tẩy sách:

    upload_2021-9-26_10-9-7.png

    upload_2021-9-26_10-9-47.png

    Sau khi tẩy xong thì rác đã ít hơn rất rất nhiều so với ban đầu:

    upload_2021-9-26_10-14-55.png

    Bước 5: Dọn Tag rỗng (tức là tag không chứa nội dung gì cả)

    Chúng ra dùng câu lệnh: Copy và dán cả vào ô FIND

    Find: <(p|span|div|i|b|em|strong|h\d+|body|li|a|aside|section|sup|sub|blockquote|figcaption|tbody|table|td|tr)\b[^>]*></\1>|<\1\b[^>]*> </\1>|<\1\b[^>]*> </\1>|<i> </i>|<b> </b>|</i><i>|</b><b>|<p> </p>|<div class="(.*?)"> </div>|<p>

    </p>|<span class="(.*?)"></span>|<span> </span>|<div> </div>

    Replace: Bỏ trống, không có gì hết

    Chọn All text files và bấm Replace All cho tới lúc nào giá trị thay thế về bằng 0 là được. Sau đó bấm bông hoa

    upload_2021-9-26_10-15-37.png

    upload_2021-9-26_10-16-14.png

    Bước 6: Xóa tag <span>. Tag này chẳng có tác dụng gì.

    Find: <span>

    Replace: Để trắng, không có gì

    Bước 7: Sửa các xuống hàng không đúng qui định, xuống hàng vô tội vạ. Bước này thực hiện gồm 3 lệnh liên tiếp theo thứ tự dưới đây, do mỗi file sẽ có nhiều dạng xuống hàng khác nhau.

    Lần 1:

    Find: >\s+<

    Replace: > <

    Bấm replace all

    Chú ý: Có dấu trắng chính giữa > <

    Lần này sẽ rút các tag nằm cạnh nhau nhưng bị xuống hàng không đúng chuẩn:

    Ví dụ:

    </givenname>

    <sn>

    Sau khi bấm Replace All rồi thì bấm bông hoa

    upload_2021-9-26_10-17-18.png

    Lần 2:

    Find: (\w)\s+<

    Replace: \1 <

    Chú ý: giữa \1 và < có dấu trắng

    Bấm replace all

    Lần 3:

    Find: >\s+(\w)

    Replace: > \1

    Chú ý: giữa > và \1 có dấu trắng

    Bấm replace all

    Bây giờ code rác đã sạch gần hết (hình dưới)

    upload_2021-9-26_10-18-3.png

    Bước 8: Bỏ các tag linh tinh khác mà không được điều khiển bởi css. ví dụ như trong hình

    upload_2021-9-26_10-27-55.png

    Chúng ta cứ copy từng tag đó và dán vào ô Find, ô Replace để trống, replace all. Sau đó bấm bông hoa lần nữa.

    Bước 9: Trả in nghiêng, đâm, về mặc định: Lần lượt đúng theo thứ tự dưới đây, kẻo sai nhé.

    Tìm và thay thế in nghiêng đậm; in đậm; in nghiêng theo đúng thứ tự dưới đây:

    upload_2021-9-26_10-28-28.png

    · In nghiêng đậm:

    Find: <span class="bold"><span class="italic">(.*?)</span></span>

    Replace: <b><i>\1</i></b>

    Replace all

    · In nghiêng:

    Find: <span class="italic">(.*?)</span>

    Replace: <i>\1</i>

    Replace all

    · In đậm:

    Find: <span class="bold">(.*?)</span>

    Replace: <b>\1</b>

    Replace all

    Tiếp theo chạy lại bước 5, bỏ tag rỗng… Vì sau quá trình xử lý tới đây, một số tag rỗng lại tiếp tục xuất hiện.

    Bước 10: Ở bước này, mỗi tài liệu sẽ có một class khác nhau để điều khiển các định dạng.

    Trong tài liệu lấy làm ví dụ, lần lượt thay các định dạng còn lại: tab giữa (căn lề giữa), tab phải (căn lề phải), sup (viết số mũ)… bằng cách copy class trong css dán vào ô search, tìm cấu trúc của các định dạng này ở trong các html nội dung và viết câu lệnh thay thế.

    Trong ví dụ trên thì các class: calibre_2; calibre_20; calibre_21; calibre_25 là những class căn lề giữa chạy lần lượt cho từng class này. Dưới đây là một mẫu:

    Find: <p class="calibre_2">

    Replace: <p style="text-align: center;">

    Thực hiện tương tự cho canh lề phải.

    Làm sup:

    Find: <sup(.*?)>

    Replace: <sup>

    Replace all

    Trải qua 10 bước trên chúng ta được một epub sạch sẽ. Giờ chỉ còn lại các code rác nằm trong các header nữa mà thôi, kiểm tra cẩn thận code rác để replace tạo thành header sạch sẽ nữa coi như hoàn tất “Quy trình dọn rác”.

    Toàn bộ quy trình này hết khoảng 10-15 phút đối với những ai mới tập làm, còn những người làm quen và hiểu hết css sẽ hết khoảng 5-7 phút.

    Lưu ý: Đây là một bài mẫu, các trường hợp cụ thể sẽ có một chút khác biệt về css, các bạn chú ý sửa câu lệnh cho đúng với mỗi tài liệu cụ thể. Nhưng các bước từ 1-9 gần như không đổi.

    LƯU Ý: TỐI QUAN TRỌNG, Các lệnh trên đây có thể copy, dán và lưu vào Save Search để sau này chúng ta sử dụng liên tục nhóe bà con.
     

    Các file đính kèm:

    Last edited by a moderator: 26/9/21
  2. tran ngoc anh

    tran ngoc anh Cử nhân

    Em đứng xa mà nhìn thôi ^ ^
     
  3. vinaguy

    vinaguy Lớp 11

    Sorry các bác. Hôm qua em tay thì làm mà lại quên ghi vào "quy trình". Đó là, hết bước 9 chạy lại bước 4 và hết bước 10 chạy lại bước 4 nữa nhé.
     
    tran ngoc anh thích bài này.
  4. tran ngoc anh

    tran ngoc anh Cử nhân

    Cụ làm thêm vài hình về cách nhập vào SS để mọi người biết cách dùng luôn ^^
     
    vinaguy thích bài này.
  5. vinaguy

    vinaguy Lớp 11

    Bác làm dùm mấy cái hình rồi dán lên đây cho bà con rõ cách kéo Save Search ra, và add lệnh vào giúp em đi. Bữa nay em lại còn bận quá đây. Mà mấy vụ hình minh họa em thấy bác làm khéo lắm cơ :)
     
    tran ngoc anh thích bài này.
  6. RGBCD

    RGBCD Lớp 3

    Cách làm của tôi có khác với bạn vinaguy nhé.

    Riêng với file có những file có những thẻ lạ lùng (như file (goc) Tap 09 - Nhung Bi Mat Ve Tien B - Robert T.Kiyosaki. Sharon L.Lec.epub đính kèm dưới đây), thì tôi không đi tìm và xóa từng thẻ đó mà dùng cách khác rồi mới chạy lệnh dọn rác thì sẽ đơn giản hơn rất nhiều.


    1. Xử lý file đó trước khi dọn rác:


    - Tìm trong css các định dạng cần giữ, cụ thể là: nghiêng, đậm, căn giữa, căn phải. Với file (goc) Tap 09 - Nhung Bi Mat Ve Tien B - Robert T.Kiyosaki. Sharon L.Lec.epub đính kèm làm ví dụ đây, tôi cắt ra được (dùng lệnh tìm kiếm với key: italic, bold, text-align: right, text-align: center, dùng lệnh cắt từng css một ra khi nào hết thì thôi).

    Xóa hết css cũ đi và thay những cái trên vào và bấm nút hình cái tẩy/cục gôm rồi lưu lại.

    upload_2021-9-26_21-29-10.png

    - Convert file đó sang .mobi, xóa file epub (gốc) đi rồi lại convert file .mobi sang epub. Mở file epub mới được convert từ mobi đó ở chế độ sửa và bấm bông hoa:

    upload_2021-9-26_21-26-58.png

    2. Xóa code rác, lần lượt chạy các lệnh sau: (với những epub bình thường có cấu trúc thẻ thuần hơn thì không cần làm bước 1)


    Xóa thẻ trắng 1 (thay bằng không)

    F: <(ul|p|span|div|i|b|em|strong|h1|h2|h3|h4|h5|h6|body|li|aside|section|sup|sub|a|blockquote|figcaption|tbody|table|td|tr)\b[^>]*></\1>|</i><i>|</b><b>|</strong><strong>|<i></i>|<b></b>|<strong></strong>|<hr/>
    R: không nhập gì
    Replace All
    Chế độ All text files

    Xóa thẻ trắng 2 (thay bằng một khoảng trắng)
    F: <(ul|p|span|div|i|b|em|strong|h1|h2|h3|h4|h5|h6|body|li|aside|section|sup|sub|a|blockquote|figcaption|tbody|table|td|tr)\b[^>]*>(\s+){1,}</\1>|<div>\s+<br>\s+</div>|<p><br>\s+</p>|<p>\s+<br>\s+</p>|<p>\s+<br></p>|</i> <i>|</b> <b>|</b></i> <i><b>|<p><br></p>
    R: gõ một khoảng trắng
    Replace All
    Chế độ All text files

    Sửa lỗi khoảng trắng ở sau dấu câu, đầu thẻ
    F: ([\[\(“‘<]|<(ul|p|div|i|b|em|strong|h[1-6]|body|li|aside|section|sup|sub|a|blockquote|figcaption|tbody|table|td|tr|br/|hr/)>)\s+
    R: \1
    Replace All
    Chế độ All text files

    Sửa lỗi khoảng trắng trước dấu câu, đuôi thẻ
    F: \s+([\.\)\]\!\?;,:>’”]|</(ul|p|div|i|b|em|strong|h[1-6]|body|li|aside|section|sup|sub|a|blockquote|figcaption|tbody|table|td|tr )>|<br/>|<hr/>)
    R: \1
    Replace All
    Chế độ All text files

    Sửa lỗi thẻ br ở giữa thẻ khác
    F: <(ul|p|span|div|i|b|em|strong|h[1-6]|body|li|aside|section|sup|sub|a|blockquote|figcaption|tbody|table|td|tr)>(.*?)<br/>(.*?)<(/\1)>
    R: <\1>\2<\4><\1>\3<\4>
    Replace All
    Chế độ All text files

    Sau đó lại tìm trong css: italic, bold, text-align: right, text-align: center, dùng lệnh cắt từng css một ra khi nào hết thì thôi

    Cụ thể trong file (đã xong) Tap 09 - Nhung Bi Mat Ve Tien B - Robert T.Kiyosaki. Sharon L.Lec.epub tôi cắt ra được:
    Xóa hết css cũ và thay bằng css mới nhấn nút hình cái tẩy/cục gôm. Là các class không dùng đến sẽ bị xóa sạch.

    upload_2021-9-26_21-29-10.png

    Xóa thẻ br còn sót (lệnh này sẽ xóa thẻ br đứng một mình bên ngoài thẻ khác):

    F: <br/>(\s+){0,}<(p|span|div|i|b|em|strong|h1|h2|h3|h4|h5|h6|body|li|aside|section|sup|sub|a|blockquote|figcaption|tbody|table|td|tr)\b[^>]*>
    R: <\2>
    Replace All
    Chế độ All text files

    Xóa thẻ span (lệnh này sẽ xóa đầu thẻ span không mang thuộc tính gì)

    F: <span>
    R: không nhập gì
    Replace All
    Chế độ All text files

    Nhớ nhấn bông hoa, việc này sẽ xóa các đuôi thẻ span vừa xóa ở trên:

    upload_2021-9-26_21-26-58.png

    Giữ định dạng bold
    F: <span class="(bold|bold1)">(.*?)</span>
    R: <b>\2</b>
    Replace All
    Chế độ All text files

    Giữ định dạng italic
    F: <span class="(italic|italic1)">(.*?)</span>
    R: <i>\2</i>
    Replace All
    Chế độ All text files

    Bấm hình bông hoa, để tự động cấu trúc lại các thẻ.

    upload_2021-9-26_21-26-58.png

    Rồi chạy mấy lệnh để làm gọn các class center và right:

    F: calibre_"|calibre_1"|calibre_5"|calibre_16"
    R: center"
    Replace All
    Chế độ All text files

    F: calibre_4"|calibre_7"
    R: right"
    Replace All

    Ở css chỉ cần để:
    Xin đính lên 3 file: epub gốc, mobi trung gian và epub đã dọn xong rác.

    P.S
    - Nếu thấy cấu trúc code có vẻ không gọn thì nhấn bông hoa cho calibre sắp xếp lại nhé.

    @vinaguy, bạn xem file cuối cùng (đã xong) Tap 09 - Nhung Bi Mat Ve Tien B - Robert T.Kiyosaki. Sharon L.Lec.epub này có cấu trúc đúng như ý bạn chưa? :D
     
    Chỉnh sửa cuối: 27/9/21
    tran ngoc anh and vinaguy like this.
  7. RGBCD

    RGBCD Lớp 3

    Cách làm của tôi lâu nhất là ở bước cắt các css cần giữ ra file txt/word để tạm giữ. Bước này chắc mất 3 phút, còn convert thì mỗi lần 5 giây, chạy các lệnh dọn rác mất độ 2 phút, cấu trúc lại css cuối cho gọn mất độ 2 phút nữa. Tổng cộng độ 10 phút một cách nhàn nhã, chắc chậm hơn bạn @vinaguy làm nhỉ? À, theo tôi bạn đừng định dạng bằng style ="..." mà nên dùng css thì sẽ dễ sửa định dạng hơn: chẳng hạn tô màu, tô đậm, làm nghiêng...
     
    tran ngoc anh thích bài này.
  8. tran ngoc anh

    tran ngoc anh Cử nhân

    Hẹn lại. Mình cài lại máy đã, vừa tiễn em laptop thân yêu cũ đi rồi
     
  9. vinaguy

    vinaguy Lớp 11

    Cách của bác có khác em một tí. Em kiêng dùng nhiều replace kia vì sợ một số bác khác ít tiếp xúc biên tập sách, mới trông vào lại sợ. :)
    Các trích dẫn phía trên bác nên đẩy lên xử lý trên cùng của bước 2. Mục đích là bỏ bớt các <span> lồng nhau trước. Nếu bác thay đậm, nghiêng...trước các trích dẫn trên thì Cali nó sẽ tìm và thay thế từ <span class...> tới </span> nó gặp đầu tiên, lúc đó nó sẽ làm đậm, làm nghiêng... sai vị trí sau này.
    Chúc mừng bác có hàng mới để phá. :)
     
    tran ngoc anh and RGBCD like this.
  10. RGBCD

    RGBCD Lớp 3

    Tôi vừa chỉnh sửa lại post sốVui lòng đăng nhập hoặc đăng ký để xem link, để sắp xếp lại thứ tự các lệnh cho đúng hơn và giải thích thêm về mục đích của các lệnh.
     
    tran ngoc anh thích bài này.
  11. RGBCD

    RGBCD Lớp 3

    Ok. Tôi sẽ 2 để lệnh giữ định dạng sau cùng. Trong các lệnh của tôi có 2 lệnh xóa khoảng trắng trước dấu câu, đuôi thẻ và xóa khoảng trắng sau dấu câu và đầu thẻ không nằm trong mục dọn rác mà nó chỉ sửa lỗi chính tả hoặc phục vụ việc khác như: chạy lệnh sửa lỗi xuống dòng không đúng chỗ (nối hai thẻ p lại). Trừ 2 lệnh này thì tất cả các lệnh và bước khác là cần thiết, nếu kiêng chạy lệnh thì cứ sửa tay vậy, tùy ý mà. :p
     
    Chỉnh sửa cuối: 27/9/21
    tran ngoc anh thích bài này.
  12. RGBCD

    RGBCD Lớp 3

    Năm mới máy mới, chúc mừng cô giáo nha!
     
    tran ngoc anh thích bài này.
  13. RGBCD

    RGBCD Lớp 3

    Hôm trước tôi còn dùng 2 lệnh xóa hết class, id, lang ... và lệnh thay nhiều khoảng trắng bằng một khoảng trắng, lệnh này có thể bổ sung. Có lẽ sẽ bổ sung lệnh xóa riêng từng thuộc tính, vì xóa class là lệnh khá nguy hiểm vì có thể làm mất định dạng các thẻ, dùng cục tẩy an toàn và chính xác hơn.
     
    tran ngoc anh thích bài này.
  14. vinaguy

    vinaguy Lớp 11

    Đúng rồi bác. Đó chính là tại sao em lại ưu tiên loại bỏ <span> lồng nhau trước, mục tiêu là để tránh bắt nhầm và replace nhầm chỗ đấy bác. Em bị bắt nhầm rồi bác ạ :). Ngay cả chỗ đậm nghiêng bác cũng nên ưu tiên bắt nó trước, rồi tới nghiêng, rồi tới đậm. Thứ tự này em đã tìm hiểu rồi bác nhé.
    Còn bác không nên xóa class, mà cứ xóa css rồi dùng cục tẩy, mức độ an toàn gần như tuyệt đối. Cách của em có thể nhanh hơn của bác chút xíu, do em không phải Vớt qua Vớt lại mà chỉ sử dụng 3 dòng lệnh đơn giản liên tiếp để nối chúng nó lại với nhau. Ngoài ra em còn 2 dòng lệnh để nối dòng nữa, nhưng không liên quan gì xóa rác nên em không nêu vào chỗ qui trình, như nếu viết qui trình edit để bổ sung vào topic "các mẫu css..." của @tran ngoc anh thì chúng ta sẽ bàn về vấn đề này.
     
    tran ngoc anh thích bài này.
  15. RGBCD

    RGBCD Lớp 3

    Chỗ "nhanh hơn" "chậm hơn" là tôi nói giỡn. :P Có lẽ cách của tôi lâu hơn vì phải tìm và giữ lại các css (định dạng) cần thiết 2 lần. Nhưng đảm bảo chắc chắn sau khi convert các thẻ sẽ về cơ bản hết. Nếu nói riêng về dọn code rác chạy các lệnh hết 30 giây thôi vì tôi để replace All hết. Với tôi thêm chỗ làm gọn class ở cuối nữa, tìm các class nào định dạng cái gì và viết lệnh cũng mất chút thời gian mà chắc mỗi ebook sẽ có css khác nhau nên mỗi lần phải tìm và viết lệnh lại. Rõ ràng giữa việc tìm ra các thẻ lạ như: middlename, sn, surname... là mất thời gian nhiều hơn việc vớt qua vớt lại, bạn có lệnh sẵn bởi vì đã tìm từ trước và cũng chỉ những thẻ mà bạn đã gặp, nếu ebook khác lại có những thẻ kiểu khác bạn tính sao? Với người chưa có kinh nghiệm thì thì còn mò mẫm rất nhiều thời gian mới biết hết những thẻ đó tên gì, phải dò tìm bằng mắt cả ebook mới ra chứ làm sao mà dùng lệnh tìm đây?

    Nói chung, ở đây là bàn luận để cùng nhau tìm ra cách tối ưu chứ nên không ganh đua, tôi sẽ chỉnh sửa lại một số cái theo ý kiến bạn cho tối ưu hơn.
     
    tran ngoc anh thích bài này.
  16. dọn trên sigil được không b ơi. Hướng dẫn mình chút với ạ
     
    tran ngoc anh thích bài này.
  17. machine

    machine Lớp 11

    Cách các bạn bên trên hướng dẫn áp dụng cho Sigil được đấy. Hoặc dùng Calibre chuyển đổi (convert) ebook chứa nhiều code rác thành file Word rồi đóng gói từ đầu cho nhanh.
    ^p
    </p>^p<p> (not bold, not italic)
    <b>^&</b>
    <i>^&</i>
    <sup>^&</sup>
     
  18. hoangducvy

    hoangducvy Lớp 1

    Trước tiên em xin được mạn đàm xíu về vấn đề này. Em thấy việc chỉnh sửa này dính đến HTML và CSS là 02(hai) cái lập trình Web mà em thì có học qua thấy cũng dễ nên thấy mọi người tìm một cuốn sách về xem qua là đủ dùng - em đính chính em ngành kinh tế nhưng tự học html5 và css3 thôi nên em mới nói nó dễ. Em bay vào bình luận linh tinh chỉ muốn khuyến khích mọi người có thể tự có được cho mình một cách làm tốt nhất cho bản thân thôi nhé.
     
    tran ngoc anh thích bài này.

Chia sẻ trang này