Mẹo Python cách nhanh nhất để so sánh các chuỗi
Mẹo Hướng dẫn Python cách nhanh nhất có thể để so sánh những chuỗi Mới Nhất
Hoàng Duy Minh đang tìm kiếm từ khóa Python cách nhanh nhất có thể để so sánh những chuỗi được Update vào lúc : 2022-12-25 06:14:06 . Với phương châm chia sẻ Bí kíp Hướng dẫn trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi đọc nội dung bài viết vẫn ko hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Tác giả lý giải và hướng dẫn lại nha.Triển khai một công cụ để so sánh những văn bản song song với Python được cho phép có cái nhìn tổng quan hơn về sự khác lạ
Nội dung chính Show- Triển khai một công cụ để so sánh những văn bản song song với Python được cho phép có cái nhìn tổng quan hơn về sự khác biệtthư viện difflibTìm trình tự phù hợpCân bằng những chuỗiTrực quan hóa sự khác biệtTôi hoàn toàn có thể sử dụng == để so sánh những chuỗi trong Python không?Chúng ta hoàn toàn có thể so sánh hai chuỗi trong Python không?Làm cách nào để so sánh hai chuỗi không phân biệt chữ hoa chữ thường trong Python?So sánh số hay chuỗi nhanh hơn?
Hiện tại tôi đang thao tác trên bộ lọc bảo mật thông tin cho văn bản bằng Python. Trong quá trình phát triển, tôi thường xuyên gặp phải một vấn đề; . Lần này, đã đến lúc xử lý và xử lý vấn đề này
thư viện difflib
Một số nghiên cứu và phân tích trên internet đã nhanh gọn tiết lộ sự tồn tại của mô-đun difflib. Mô-đun mặc định này chứa một số trong những trình trợ giúp để so sánh những chuỗi, như mảng và chuỗi. Tất cả những thuật toán để so sánh trình tự có sẵn với một vài dòng mã. Trong một khoảnh khắc ngắn ngủi, ý tưởng thực hiện thuật toán của riêng tôi thoáng qua tâm trí tôi, nhưng nhanh gọn biến mất
Cơ sở của mô-đun difflib là lớp SequenceMatcher. Lớp này thực hiện thuật toán so sánh trình tự. Nó khởi đầu bằng phương pháp tìm những chuỗi chung lớn số 1 trong cả hai chuỗi đầu vào và tiếp tục thực hiện trách nhiệm này một cách đệ quy trên những phần khác cho tới lúc không hề chuỗi nào. Do tính chất đệ quy của nó, thời gian thực hiện hoàn toàn có thể trở thành bậc hai, tùy thuộc vào mức độ khác lạ trong chuỗi. Đối với tiềm năng của chúng tôi, hiệu suất này là hoàn toàn có thể đồng ý được. Sẽ không dùng để so sách kinh văn, mỗi lần chỉ vài dòng thôi.
Tìm trình tự phù hợp
Để khớp những chuỗi, trước tiên tất cả chúng ta phải tạo một thể hiện của lớp SequenceMatcher. Hàm tạo lấy hai chuỗi để khớp làm tham số a và b. Các tham số để phát hiện rác không được sử dụng. Khi truyền chuỗi dưới dạng đối số, chuỗi được xem là một chuỗi ký tự. Trình so khớp sẽ tìm kiếm những chuỗi ký tự phù hợp
Lớp SequenceMatcher có một số trong những cách trả về kết quả phù hợp, ví dụ như tìm kết quả khớp dài nhất, trả về những thao tác để quy đổi a thành b và trả về tất cả những kết quả tìm thấy. Chúng tôi sẽ sử dụng cái sau
Phương thức get_matching_blocks() trả về một list hoàn toàn có thể lặp lại của tất cả những kết quả khớp, được sắp xếp theo sự xuất hiện của chúng từ đầu chuỗi. Mỗi trận đấu gồm có vị trí của trận đấu trong chuỗi a, vị trí của trận đấu trong chuỗi b và độ dài của trận đấu. Trong ví dụ này, ba trận đấu được tìm thấy; . Nó là ”,” ờ. ”. Trận đấu được trả lại thứ tư là kết thúc của chuỗi
Vì vậy, chúng tôi đã tìm thấy tất cả những chuỗi phù hợp trong chuỗi. Nhưng để so sánh những văn bản, trận đấu ở đầu cuối “er. ” chỉ phù phù phù hợp với một phần của một từ. Tôi thích chỉ khớp với toàn bộ từ. Vì trình so khớp lấy những chuỗi (chuỗi là chuỗi ký tự trong Python), tất cả chúng ta nên thêm những từ vào trình so khớp. Vì vậy, hãy xem điều gì sẽ xảy ra nếu tất cả chúng ta mã hóa chuỗi trước khi thực hiện trình so khớp
Phương thức tokenize là một cách thực hiện thô sơ, rất đơn giản bằng phương pháp tách chuỗi tại những khoảng chừng trắng (‘ ’). Kết quả đầy hứa hẹn, chỉ có chuỗi “It is” và “warm. Nó là” được trả lại. Từ khớp một phần không hề được tìm thấy. Kiểm tra một vài dòng văn bản đã nhanh gọn chỉ ra mã thông báo hạn chế do chỉ phân tách tại những khoảng chừng trắng. Nó không thành công ở những dòng mới và những tab, vì vậy để đẩy mạnh trò chơi một chút ít, phần tách () được thay thế bằng một biểu thức chính quy phân tách văn bản ở tất cả những khoảng chừng trắng
Điều này mang lại kết quả tương tự như cách triển khai trước đó nhưng mạnh mẽ và tự tin hơn với những khoảng chừng trắng khác so với chính không khí đó
Cân bằng những chuỗi
Trình so khớp đang cho chúng tôi biết trình tự nào khớp và do đó cũng không khớp. Với thông tin này, hoàn toàn có thể làm cho tất cả hai chuỗi bằng nhau, thêm những phần không đủ từ chuỗi thứ nhất sang chuỗi thứ hai và ngược lại
Nhìn vào ví dụ trên ta thấy dãy khớp đầu tiên bắt nguồn từ vị trí 0 và có độ dài al là 2. Dãy khớp thứ hai khởi đầu ở vị trí 2 đối với dãy a và ở vị trí 3 đối với dãy b. Vậy dãy b chứa một phần không thuộc dãy a. Ta cần thêm vào dãy a một phần tử có cùng độ dài với phần tử của dãy b
Để xác định xem một phần tử có bị thiếu trong những chuỗi đã khớp hay là không, chúng tôi xem xét vị trí khởi đầu của một chuỗi khớp, thêm độ dài của chuỗi đã khớp và xác định xem chuỗi tiếp theo có khởi đầu bằng tổng của tất cả hai không. Trong ví dụ dưới đây, trận đấu thứ hai khởi đầu ở vị trí 0 + 3 cho tất cả hai chuỗi, trận đấu thứ hai khởi đầu ở vị trí 4 cho chuỗi thứ nhất và ở vị trí 3 cho chuỗi thứ hai. Vì 0 + 3 bằng 3 nên dãy khớp 'chạm' nhau ở dãy thứ hai và dãy thứ nhất chứa một phần tử tương hỗ update giữa cả hai dãy đã khớp. Điều này nghĩa là, một phần tử tương hỗ update sẽ được thêm vào chuỗi thứ hai
Hình ảnh của tác giảCó ba kĩ năng. Chuỗi đầu tiên chứa một hoặc nhiều phần tử tương hỗ update, chuỗi thứ hai chứa những phần tử tương hỗ update hoặc cả hai chuỗi chứa những phần tử tương hỗ update. Trong trường hợp sau, có sự không phù hợp trong trình tự, e. g. những từ 'ngày hè' và 'ngày đông' trong ví dụ đầu tiên của chúng tôi
Chúng ta sẽ cân đối dãy bằng phương pháp thêm những phần tử tương hỗ update vào những nơi mà dãy khác có những phần tử không khớp với nhau. Các phần tử tương hỗ update này sẽ có cùng độ dài với phần tử chưa khớp và sẽ gồm có những dấu gạch dưới
Phương thức lặp lại những kết quả tìm thấy (dòng 15) và đối với mỗi kết quả khớp sẽ kiểm tra xem nó có liền kề với kết quả khớp trước đó không. Nếu không đúng như vậy, những phần tử sẽ được thêm vào chuỗi khác để tạo đối sánh (dòng 16–23). Sau khi thêm những phần tử không đủ, cả hai chuỗi được mở rộng với chuỗi phù hợp. Trước khi trả về những giá trị, chúng không được mã hóa
Từ 'không' không còn trong chuỗi đầu tiên, được thêm dưới dạng dấu gạch dưới vào chuỗi đầu tiên. Các từ rất khác nhau 'ngày hè. ' và 'ngày đông. ' đều được thêm vào chuỗi khác. Nhìn thấy kết quả trên nhau đã đáp ứng một chiếc nhìn tổng quan về sự khác lạ giữa cả hai chuỗi
Trực quan hóa sự khác lạ
Vì vậy, giờ đây chúng tôi có những chuỗi cân đối và chúng tôi cần một cách thuận tiện để tưởng tượng sự so sánh. Đối với những câu đơn, in chúng lên nhau là một giải pháp tuyệt vời. Đối với những văn bản dài hơn thế nữa, so sánh song song sẽ thuận tiện hơn
Để so sánh song song, tất cả chúng ta cần ngắt những chuỗi thành từng đoạn có số lượng giới hạn bằng, e. g. 40 ký tự. Chúng tôi muốn ngắt Một trong những từ, vì vậy một hiên chạy cửa số hoàn toàn có thể hoàn toàn có thể đồng ý được thêm vào e. g. 10 ký tự, nghĩa là chúng tôi sẽ khởi đầu tìm kiếm khoảng chừng trắng sau 40 ký tự (dòng 5) và quay lại tối đa 10 ký tự để tìm khoảng chừng trắng đầu tiên nhỏ hơn và sớm nhất với 40 ký tự (dòng 7–8)
Hàm trả về một list những chuỗi, không dài hơn thế nữa 40. Vì việc cân đối những chuỗi đã làm cho chúng có độ dài bằng nhau, tất cả chúng ta hoàn toàn có thể sử dụng phương pháp này để ngắt cả hai chuỗi thành những chuỗi rác và những chuỗi này sẽ luôn chứa những từ giống nhau trên cùng một dòng. Chúng rất dễ so sánh. Chúng tôi hoàn toàn có thể in những chuỗi gồm có cả dấu gạch dưới với dấu gạch dưới bị xóa. Bằng cách vô hiệu dấu gạch dưới sau khi ngắt rồi nhập văn bản, chúng tôi đảm nói rằng những từ giống nhau trong cả hai văn bản sẽ nằm trên cùng một dòng
Hàm so sánh () lấy hai văn bản để so sánh làm tham số, theo sau là chiều rộng tùy chọn để hiển thị cạnh nhau, hiên chạy cửa số tìm khoảng chừng trắng từ chiều rộng này và thời tiết để hiển thị văn bản cạnh nhau hoặc cao hơn
mã hoàn hảo nhất
Chạy một ví dụ với tất cả những trực quan hóa hoàn toàn có thể
Tôi kỳ vọng phương pháp so sánh song song này hoàn toàn có thể giúp bạn nhiều như nó giúp tôi. Tìm sự khác lạ trong những văn bản thuận tiện và đơn giản hơn nhiều với phép so sánh này khi thực sự hữu ích khi cùng một văn bản bên trái và bên phải xuất hiện trên cùng một dòng. Đối với bộ lọc quyền riêng tư của tôi, sự khác lạ về độ dài trở nên khá lớn khiến việc so sánh trở nên khó xử khi những phần văn bản bằng nhau được hiển thị với nhiều dòng ở giữa
Post a Comment