Hỏi đáp Đánh số chương tự động?

Thảo luận trong 'Hỏi đáp - Góp ý' bắt đầu bởi xversion1, 3/12/22.

  1. xversion1

    xversion1 Lớp 2

    Em có 1 file bị thỉnh thoảng số chương bị đánh sai, cấu trúc chương thế này:
    Mã:
    <h1 id=....>Chương [số][tiêu đề]</h1>
    Cái phần số nó bị lộn xộn thỉnh thoảng không theo đúng thứ tự, mà chương lại nhiều đến hàng nghìn chương nên soát thủ công hơi vất vả. Chương nằm trong các file html khác nhau chứ không ở cùng 1 file. Giờ có lệnh nào cho nó tự động đánh số lại đúng thứ tự từ 1 đến hết không các bác?
     
    Chỉnh sửa cuối: 3/12/22
    machine thích bài này.
  2. xversion1

    xversion1 Lớp 2

    Vừa thử dùng lệnh đánh số note của bác inno14 (Vui lòng đăng nhập hoặc đăng ký để xem link):
    Mã:
    def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
        note_number = '%d' % number
        return "[" + note_number + "]"
    
    # Ensure that when running over multiple files, the files are processed
    # in the order in which they appear in the book
    replace.file_order = 'spine'
    em thay thành:
    Mã:
    def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
        note_number = '%d' % number
        return "Chương" + note_number + ":"
    
    # Ensure that when running over multiple files, the files are processed
    # in the order in which they appear in the book
    replace.file_order = 'spine'
    Chạy thử thì thấy nó cũng đánh số nhưng ko biết có sai sót/lỗi chỗ nào không, hiện chưa phát hiện ra. Vì lệnh của bác inno là dùng cho 1 file không biết chạy cho nhiều file có đc không, với lại phần code em đọc cũng ko hiểu, chỉ đoán để thay tương ứng.
     
    Chỉnh sửa cuối: 3/12/22
    machine thích bài này.
  3. tran ngoc anh

    tran ngoc anh Moderator Thành viên BQT

    Function chạy số của mr Inno14 có thể chạy được trên tất cả html luôn đó bạn.
     
    xversion1 thích bài này.
  4. tran ngoc anh

    tran ngoc anh Moderator Thành viên BQT

    Cần đảm bảo thứ tự của các html trong epub đúng trước đã. Thì chạy function đánh số mới vào mới chuẩn được gì function dựa vào thứ tự của html.
     
    xversion1 thích bài này.
  5. Hy Eo Chang

    Hy Eo Chang Banned

    @xversion1

    Tôi không bàn về cách đánh số trang tự động, tôi bàn về cách kiểm tra kết quả đánh số. Theo tôi, dùng NotePad++ có vẻ khá hữu ích. Chức năng Find and Replace cho các tệp chương sách dạng html. Khả năng của NotePad++ là tìm kiếm và thay thế cho hàng loại tệp trong cùng một lần thực hiện. Tôi hay dùng cách này để kiểm tra sự sai lệch số thứ tự hay thiếu tệp... Kết quả tìm kiếm chuyển sang Excel để rà soát, đảm bảo chính xác 100%.
     
    xversion1 thích bài này.
  6. xversion1

    xversion1 Lớp 2

    Bác có thể nói kỹ hơn đc ko? Em ko phải coder nên từ trc đến nay chỉ biết dùng note để đọc mấy file text.
     
    Hy Eo Chang thích bài này.
  7. tran ngoc anh

    tran ngoc anh Moderator Thành viên BQT

    Tiếp vấn đề ở đầu thread: sau khi bạn chạy function, muốn biết chính xác những thay đổi mà function đã thực hiện thì bạn chọn như hình dưới:


    1. [​IMG]

    2. [​IMG]

    Đây là mình chụp ví dụ khi Beautify all files, editor thực hiện một thay đổi trên hàng loạt file thì nó sẽ hiện pop-up 1 để cho mình thấy chi tiết các thay đổi ở bảng so sánh số 2. Bạn nhớ chợp thời cơ sau khi xử lý bất cứ cái gì nhé, vì bảng so sánh đó không có cách nào khác để truy cập nếu ban đầu không chọn nó.

    Như vậy chỉ cần bạn sửa function phù hợp với nhu cầu rồi kiểm tra kết quả bằng pop-up đó kỹ kỹ một chút là ổn.

    Trường hợp hiện tại bạn đã xử lý xong file rồi, mà vẫn muốn có cái bảng đó để kiểm tra lại, thì bắt buộc phải có file gốc trước khi xử lý function, lúc này ta dùng tính năng compare 2 file epub cũng có thể có được bảng so sánh sự khác nhau giữa file gốc và file đã xử lý.

    Ở menu File của calibre editor chọn:

    [​IMG]

    Sau đó chọn đến file epub cần so sánh, cũng sẽ hiện ra bảng so sánh chi tiết các thay đổi.

    Chúc bạn thành công!
     
    xversion1 and machine like this.
  8. Hy Eo Chang

    Hy Eo Chang Banned

    @xversion1 #18
    Bạn chờ nhé, tôi sẽ hướng dẫn
     
    xversion1 thích bài này.
  9. Hy Eo Chang

    Hy Eo Chang Banned

    @@@xversion1 #18
    mẫu tìm kiếm: <h1 id=...>Chương [số][tiêu đề]</h1>
    Chức năng Find and Replace (Ctrl + F) của Notepad++ là chức năng mạnh mẽ. Có thể trả về toàn bộ kết quả tìm kiếm trong một tệp hoặc nhiều tệp cùng lúc trên một cửa sổ phụ nằm bên dưới cửa sổ chính của văn bản đang soạn thảo và tìm kiếm. Tại đây người sử dụng (NSD) duyệt từng kết quả để sử dụng. Kết quả tìm kiếm bao gồm: tổng số kết quả tìm được, số hiệu dòng chứa giá trị tìm kiếm, đường dẫn của tệp chứa giá trị tìm kiếm; khả năng định vị tới từng dòng kết quả trên văn bản soạn thảo, từng tệp; sao chép riêng từng kết quả, nhiều kết quả hoặc toàn bộ; sao chép đường dẫn tệp có kết quả tìm kiếm xuất hiện...
    Tuỳ chọn tìm kiếm theo biểu thức chính quy (Regular Expression) dùng để tìm kiếm các mẫu tìm kiếm không xác định (bất định) độ dài và giá trị giữa mốc ban đầu và kết thúc của chuỗi tìm kiếm. Kết quả tìm kiếm được định vị theo dòng (dòng chứa giá trị cần tìm), kết quả thay thế chỉ trong phạm vi mẫu tìm kiếm, nhưng ở đây tôi không đề cập đến việc thay thế. Quá trình tìm kiếm đạt hiệu quả cao nếu giá trị tìm kiếm nằm gọn trên một dòng văn bản. Do đó, dòng chứa giá trị cần tìm trên văn bản phải được tách ra nằm gọn trong một đoạn/phân đoạn (paragraph), tức là nằm giữa 2 dấu xuống dòng (\n hoặc \r\n).
    Mỗi kết quả tìm được nằm trên dòng riêng biệt, do đó để bảo đảm thứ tự dòng kết quả tương ứng với số hiệu chương, số hiệu tên tệp thì tên tệp phải có số hiệu; số hiệu phải có độ dài giống nhau theo thứ tự, điền số 0 trước số hiệu cho đủ độ dài chữ số trong số hiệu tệp: ví dụ phải điền 000 cho các tệp có số hiệu dưới 10, 00 cho các tệp có số hiệu dưới 100 nhưng lớn hơn 10... đối với số lượng tệp đến 9999.
    Từ mẫu tìm kiếm của bạn, có thể thấy một số vấn đề sau:
    1. Có thể có nhiều hơn 1 thẻ h1;
    2. Mỗi thẻ h1 có thuộc tính id khác nhau;
    3. Nội dung thẻ h1 trong một tệp văn bản / các tệp văn bản có giá trị khác nhau;
    4. Cụm ký tự "Chương" (hoặc "Chapter") là giá trị bất biến.

    Như vậy sẽ xác định được mẫu tìm kiếm như sau: <h1 id=.*?>Chương.*?</h1>

    Mẫu này có giá trị xác định kết quả tìm kiếm cho thẻ h1 với thuộc tính id bất kỳ, nội dung thẻ h1 bất kỳ cho đến khi đóng thẻ h1 (</h1>).

    Áp dụng mẫu tìm kiếm này sẽ diễn ra như sau:
    1. Nhấn Ctrl + F mở hộp thoại tìm kiếm (Find);
    2. Dán mẫu tìm kiếm vào dòng "Fand what:";
    3. Chọn: "Search Mode" là "Regular Expression";
    4. Nhấn Tab "Find in Files";
    5. Dòng "Filters:" đặt theo phần mở rộng tên tập tin của bạn: "*.html" hoặc "*.htm" hoặc "*.xhtml"...;
    6. Dòng "Directory:", nhấn nút "..." để chọn thư mục chứa tệp tin của bạn;
    7. Các tuỳ chọn khác bạn tự tìm hiểu. Nhấn nút "Find All" và đợi kết quả xuất hiện;

    Sử dụng kết quả tìm kiếm:
    Kết quả tìm kiếm có cấu trúc dạng "cây thư mục" với các nút "+" hoặc "-" để mở rộng hoặc thu gọn kết quả tìm kiếm. Nhìn vào kết quả tìm kiếm có thể thấy được tổng số kết quả, tổng số tệp chứa kết quả, tổng số kết quả của từng tệp và các chi tiết cụ thể khác. Các chức năng của cửa sổ này xuất hiện khi nhấn chuột phải (Right click): Select..., copy... clear... Chức năng nguy hiểm là chức năng "Open All".

    Các chỉ số thống kê giúp bạn phát hiện bước đầu sự sai lệch về số lượng chương.

    Thu gọn cây tìm kiếm về một dòng, Right click lên dòng đó và chọn "Copy Selected Line(s)" để sao chép toàn bộ kết quả tìm kiếm (chỉ có kết quả tìm kiếm, không có các nội dung phụ khác: các tổng sô, đường dẫn...).
    Mở một tệp trống và dán xuống để lọc lại kết quả này.
    Lần này vẫn dùng "Search Mode" là "Regular Expression". Mẫu tìm kiếm là: "Chương \d*". Trong hộp thoại tìm kiếm, nhấn Tab "Mark", tiếp theo nhấn mút "Mark All", nhấn tiếp "Copy Marked Text", sau đó đóng hộp thoại Find, nhấn luôn Ctrl + A, Ctrl + V để hưởng thụ kết quả.
    Duyệt kết quả này hoặc dùng Excel để xác định vị trí số hiệu chương thiếu, trùng lặp... khi dán kết quả vào Excel.

    Tiến hành tìm kiếm hai lần bảo đảm kết quả nhận được là chuẩn xác và nhanh chóng phát hiện được sai lệch.
    Hy vọng diễn đạt này giúp ích cho bạn.
     
    machine, xversion1 and tran ngoc anh like this.
  10. tran ngoc anh

    tran ngoc anh Moderator Thành viên BQT

    Cần lắm nhiều hơn những hướng dẫn dành cho Notepad++. Npp hỗ trợ khá tốt để làm epub nhưng mọi người chú ý vào Sigil với Calibre hay Finereader nhiều hơn.
     

Chia sẻ trang này