So sánh hai văn bản
Dán cả hai phiên bản và xem chính xác chỗ thay đổi, song song, đến từng từ. Cùng thuật toán mà git sử dụng — không phải kiểu đoán từng dòng một, vốn đổ vỡ ngay khi bạn thêm một dòng.
- Không bao giờ lưu trữ
- Không xếp hàng, không phải chờ
- Không cần đăng ký, không watermark
Cách hoạt động
Dán cả hai phiên bản
Bản gốc ở bên trái, bản mới ở bên phải. Hoặc thả hai file vào.
Xem các điểm khác biệt
Dòng được thêm, bị xóa và bị sửa đều được đánh dấu, và trong một dòng bị sửa, đúng những từ thay đổi được tô sáng.
Bỏ qua những gì không quan trọng
Chữ hoa chữ thường, khoảng trắng và dòng trống đều có thể bỏ qua riêng từng loại — và trang sẽ cho bạn biết khi đó là lý do duy nhất khiến hai văn bản khớp nhau.
Thế nào được coi là cùng một dòng
Việc so sánh diễn ra trên một khóa chứ không phải trên chính dòng đó. Mỗi dòng được rút gọn thành một khóa tùy theo các tùy chọn bỏ qua đang bật, thuật toán diff chạy trên các khóa, và thứ bạn được xem luôn là văn bản gốc của bạn — nên bật “Không phân biệt chữ hoa chữ thường” sẽ thay đổi những dòng nào khớp nhau mà không sửa một ký tự nào trong phần hiển thị. Có hai tùy chọn khoảng trắng riêng biệt và chúng khác nhau nhiều hơn tên gọi gợi ý: một tùy chọn cắt khoảng trắng ở hai đầu dòng, tùy chọn kia trước tiên gộp các chuỗi dấu cách và tab thành một dấu cách rồi mới cắt. Không tùy chọn nào xóa hẳn khoảng trắng, và việc gộp chỉ tìm dấu cách và tab theo đúng nghĩa đen, nên dấu cách toàn khổ (ideographic space) hay dấu cách không ngắt dòng ở giữa dòng vẫn được giữ nguyên và vẫn bị tính là khác biệt.
Bỏ qua dòng trống là tùy chọn có một hệ quả mà không ai nhắc đến: các dòng trống bị loại bỏ trước khi phép so sánh chạy, nên số dòng bên cạnh kết quả chỉ đếm những dòng còn lại, và không còn khớp với số dòng trong file của bạn. Khi tắt tùy chọn này, chúng khớp chính xác. Việc tô sáng từng từ trong một dòng bị sửa chỉ theo cài đặt không phân biệt chữ hoa chữ thường — các tùy chọn khoảng trắng không áp dụng cho nó, nên khác biệt về khoảng trắng trong một dòng bị sửa vì lý do khác vẫn được tô là thay đổi.
Kết quả sao chép được là một unified diff ở mọi khía cạnh quan trọng khi đọc — hai tiêu đề file, các dòng trừ, các dòng cộng, ba dòng ngữ cảnh quanh mỗi thay đổi — với một ngoại lệ nên biết trước khi dựa vào nó. Các dấu mốc hunk của nó không kèm phạm vi dòng, nên nó dành cho báo cáo lỗi, bình luận review code hoặc email, còn lệnh patch và git apply sẽ từ chối nó. Nếu bạn cần thứ để áp dụng chứ không phải để đọc, hãy tạo nó bằng git.
Khi bạn cần công cụ khác
Các định dạng có cấu trúc so sánh theo dòng rất kém, và lỗi hiện ra rõ ràng chứ không hề kín đáo: hai tài liệu JSON chỉ khác nhau ở thứ tự khóa, hoặc hai file CSV có một cột bị dời chỗ, sẽ trả về một mảng thay đổi chẳng cho bạn biết gì. Hãy so sánh chúng bằng công cụ hiểu được cấu trúc — sắp xếp khóa của cả hai file JSON trước rồi so sánh kết quả, hoặc dùng daff, công cụ so sánh CSV theo hàng và cột, sẽ cho bạn biết một cột đã bị dời chỗ thay vì báo mọi dòng đều thay đổi.
Hai thư mục, hoặc hai thời điểm trong lịch sử của một kho mã nguồn, là việc của git chứ không phải của trang này. Và với văn xuôi có các đoạn văn bị ngắt dòng lại, xem theo dòng hoàn toàn là sai mức chi tiết — git diff --word-diff bỏ qua vị trí ngắt dòng và chỉ cho bạn thấy những từ đã thay đổi, đó mới là phép so sánh bạn thực sự cần khi một tài liệu đã được dàn lại dòng.
Câu hỏi thường gặp
Tài liệu của tôi có bị lưu trữ ở đâu không?
Không. Không lưu trữ gì cả và không gửi yêu cầu nào đi, và công cụ vẫn hoạt động khi đã ngắt mạng. Với văn bản, điều này quan trọng hơn bạn tưởng: thứ người ta dán vào một công cụ trực tuyến là bài viết chưa đăng, bản thảo pháp lý, bài làm của học sinh, sinh viên và tài liệu nội bộ. Khi so sánh hai phiên bản của một hợp đồng hay một bản nháp, đó chính là điều cốt lõi.
Vì sao cách này tốt hơn so sánh từng dòng một?
Vì so sánh lần lượt từng dòng sẽ đổ vỡ ngay khi có gì đó dịch chuyển. Thêm một dòng vào đầu file thì mọi dòng bên dưới đều nằm ở vị trí khác, nên một phép so sánh ngây thơ sẽ báo cả tài liệu đã thay đổi — hoàn toàn vô dụng. Công cụ này dùng thuật toán Myers, thuật toán đứng sau git diff và diff(1), tìm ra tập nhỏ nhất các lần chèn và xóa để biến văn bản này thành văn bản kia. Thêm một dòng ở đầu, nó báo một dòng được thêm.
Công cụ có cho thấy từ nào thay đổi, không chỉ dòng nào không?
Có. Khi một dòng được sửa chứ không phải được thêm hay bị xóa, nó được so sánh lại từng từ một và chỉ những từ thực sự thay đổi mới được tô sáng. Với một đoạn văn dài mà ai đó sửa ba từ, bạn thấy ba từ, chứ không phải một mảng màu kín mít.
Các tùy chọn “bỏ qua” làm gì?
Chúng thay đổi điều kiện để hai dòng được coi là giống nhau. Không phân biệt chữ hoa chữ thường, bỏ qua khoảng trắng hoặc bỏ qua dòng trống rất hữu ích khi so sánh code đã định dạng lại hoặc văn bản được dán lại. Một chi tiết quan trọng: nếu hai văn bản khớp nhau CHỈ vì có thứ đang bị bỏ qua, trang sẽ nói rõ điều đó thay vì báo chúng giống hệt nhau — “giống hệt nhau” và “giống hệt nhau nếu không phân biệt chữ hoa chữ thường” là hai sự thật khác nhau, và nhầm lẫn giữa chúng là cách một người gửi đi file mà họ tưởng chưa hề thay đổi.
Tôi có thể lấy kết quả dưới dạng patch không?
Được — kết quả so sánh có thể sao chép dưới dạng unified diff, cùng định dạng mà git và các patch gửi qua email sử dụng, kèm vài dòng ngữ cảnh quanh mỗi thay đổi. Đó là định dạng nên dán vào báo cáo lỗi.
Có giới hạn dung lượng không?
Giới hạn là bộ nhớ khả dụng, không phải một mức dung lượng cố định. So sánh hai tài liệu dài vẫn nhanh vì phần đầu và phần cuối giống nhau được khớp và bỏ qua trước khi công việc thật sự bắt đầu. Hai văn bản khác nhau ở hàng nghìn chỗ riêng biệt sẽ bị từ chối kèm lời giải thích thay vì làm treo tab — một bản diff lớn như vậy dù sao cũng không đọc được.
Công cụ có so sánh được file Word hay PDF không?
Không trực tiếp. Hãy chuyển chúng sang văn bản trước — công cụ [Chuyển PDF sang văn bản](pdf-to-text) và [Chuyển DOCX sang TXT](docx-to-txt) của chúng tôi làm đúng việc đó — rồi dán kết quả vào đây.
Nên biết: Phép so sánh được giới hạn ở 8.000 điểm khác biệt. Vượt quá mức đó, chi phí của thuật toán tăng nhanh đến mức làm treo tab, nên trang sẽ dừng lại và thông báo thay vì treo — hai tài liệu thật sự không liên quan sẽ nhanh chóng chạm mức này. So sánh hai phiên bản của cùng một file thì hầu như không bao giờ.
Đặt công cụ này lên website của bạn
Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.
Công cụ liên quan
Đếm số từ
Số từ, số câu và thời gian đọc
Xóa dòng trùng lặp
Bỏ dòng lặp, sắp xếp và làm gọn danh sách
Định dạng JSON
Biến JSON khó đọc thành dễ đọc
Đếm ký tự
Số ký tự, số byte và giới hạn thực sự đếm gì
Chuyển chữ hoa chữ thường
CHỮ HOA, chữ thường, Title Case, camelCase và hơn nữa
Nén HTML
Thu gọn HTML mà không làm hỏng trang