2010-05-24 21 views
5

Tôi có hai phần văn bản. Tôi muốn tạo sự khác biệt dựa trên từ giữa chúng (như whe unix utility wdiff) nhưng với nhiều thông tin hơn ở đầu ra (ý tôi là, vị trí của ký tự nơi từ được thêm/bắt đầu).Có thư viện java nào để thực hiện một sự khác biệt dựa trên từ không?

Tôi cần làm điều này trong Java, do đó, một đầu ra đơn giản của sự khác biệt (như wdiff) không dành cho tôi: Tôi muốn thao tác các đối tượng đại diện cho sự khác biệt.

+0

xem http://stackoverflow.com/questions/479654/java-library-for-free-text-diff – mdma

+0

Cảm ơn nhưng nó không phải những gì tôi đang tìm kiếm: tôi muốn làm một từ dựa trên khác biệt nhưng không đơn giản có đầu ra, nhưng có thể thao tác các dữ liệu này. Trong tâm trí của tôi ở đó là một đối tượng java với các lĩnh vực: - Thêm/Xóa - String (word) thêm (hoặc xóa) - Vị trí của add/xóa trong lần đầu tiên (hoặc thứ hai, btw) tập tin – Mycol

Trả lời

3

Diff,Match,Patch - có sẵn trong Java và bản trình diễn là avilable - có vẻ như có sự khác biệt về từ.

+1

Tôi đã thử rất nhiều và dựa trên nền tảng char. Nếu bạn muốn một con người outuput bạn phải thiết lập một thời gian rất cao, tính toán thực sự chậm và tuy nhiên không phải là từ dựa trên (tôi có nghĩa là "nhà" và "vợ" được tìm thấy là khác nhau chỉ trong "hous" và "wif") – Mycol

+0

Bạn có thấy phần về dọn dẹp sau xử lý không? Bạn có thể thêm bộ xử lý bài viết để căn chỉnh sự khác biệt với các từ. Có phải là văn bản tiếng Anh không? Khi bạn nâng mức độ lên các từ, vấn đề trở nên phức tạp hơn. Thậm chí chỉ cần mã hóa văn bản một cách chính xác thành từ là một số nỗ lực, và sau đó bạn có vấn đề về sự khác biệt rõ rệt - những thay đổi có thể được diễn giải theo nhiều cách - cái nào có ý nghĩa có thể phụ thuộc vào ứng dụng của bạn. Xử lý các khối văn bản được cắt và dán vào một nơi khác là về nguyên tắc một hoạt động, nhưng việc phát hiện điều này có thể khó khăn. – mdma

+0

Nếu bạn có thể ánh xạ từ thành ký tự (ví dụ: đảm bảo không có nhiều hơn 64k từ duy nhất.) Sau đó, bạn có thể phân tích cú pháp văn bản, ánh xạ từng từ thành một ký tự và chạy ký tự khác biệt. Tất nhiên, nếu việc thực hiện thuật toán Diff là bạn có thể dễ dàng thay thế các kiểu dữ liệu được so sánh, thì bạn có thể thực hiện sự khác biệt từ bằng cách truyền các đối tượng từ làm đầu vào thay vì ký tự. Tôi đã không nhìn thấy các api Diff, vì vậy tôi không thể nói chắc chắn. – mdma

Các vấn đề liên quan