Giả sử tôi có một chuỗi lớn và một mảng các đoạn mà khi nối bằng chuỗi lớn (với sự khác biệt nhỏ).Làm thế nào tôi có thể tìm thấy các chuỗi phù hợp nhất của một chuỗi lớn?
Ví dụ (lưu ý sự khác biệt tinh tế giữa dây):
large_str = "hello, this is a long string, that may be made up of multiple
substrings that approximately match the original string"
sub_strs = ["hello, ths is a lng strin", ", that ay be mad up of multiple",
"subsrings tat aproimately ", "match the orginal strng"]
Làm thế nào tôi có thể sắp xếp tốt nhất các dây để tạo ra một bộ mới của tiểu chuỗi từ bản gốc large_str
? Ví dụ:
["hello, this is a long string", ", that may be made up of multiple",
"substrings that approximately ", "match the original string"]
Thông tin cá
Các trường hợp sử dụng cho điều này là để tìm thấy những ngắt trang của văn bản gốc từ ngắt trang hiện có của văn bản được chiết xuất từ một tài liệu PDF. Văn bản được trích xuất từ PDF là OCR'd và có lỗi nhỏ so với văn bản gốc, nhưng văn bản gốc không có ngắt trang. Mục đích là để trang chính xác phá vỡ văn bản gốc tránh các lỗi OCR của văn bản PDF.
Đó có thể là một nhiệm vụ phức tạp. Ít nhất tôi không nhận thức được bất kỳ cách đơn giản nào để so sánh các phần của một chuỗi. Bạn có thể so sánh các phần của chuỗi bằng cách sử dụng tỷ lệ phần trăm để biện minh cho độ chính xác bằng cách so sánh từng ký tự với một phần của large_str và xem có bao nhiêu ký tự khớp nhau liên tiếp –
Phức tạp để tách chuỗi lớn để so sánh từng chuỗi con. Nhưng nếu bạn quản lý để làm điều này, bạn có thể sử dụng khoảng cách Levenshtein để so sánh chúng. Xem https://en.wikipedia.org/wiki/Levenshtein_distance – Xvolks
Một cách tôi có thể nghĩ đến là dựa trên thuật toán phân đoạn trang (còn được gọi là vấn đề bọc từ). Nói chung, đối với phân đoạn trang, chúng tôi có một hàm được xác định để tính toán chi phí phân tách văn bản. Nhưng hàm đó trong thuật toán này dựa trên số khoảng trắng xuất hiện trong văn bản. Tôi nghĩ rằng chúng ta có thể có một cách tiếp cận tương tự nhưng thay vì có chức năng chia tách của chúng tôi được xác định trên cơ sở của khoảng trắng, chúng tôi có thể có nó được thiết kế dựa trên sự giống nhau của chuỗi kết hợp với khoảng trắng. Đây có thể là một trong những cách tiếp cận để bắt đầu và xây dựng giải pháp một cách hiệu quả. – CodeHunter