2012-05-31 30 views
7

Về cơ bản tôi chỉ cố gắng tìm một cách để tìm trận đấu gần nhất (không nhất thiết phải chính xác) của một StringJava: Có ai có phương pháp để tìm kết quả phù hợp nhất của chuỗi trong mảng không?

Ví dụ, tìm "delicous" trong {"pie", "delicious", "test"}

này là khá rõ ràng, nhưng các giá trị trong mảng có thể không phải lúc nào cũng khác biệt.

Ai đó có thể giúp tôi với cách để đạt được điều này.

Trả lời

17

Phụ thuộc vào cách bạn định nghĩa "gần nhất" nhưng một cách phổ biến là sử dụng một số điểm Levenshtein Distance. Apache Commons có số a method in StringUtils.

Từ đó phương pháp tìm kiếm của bạn về cơ bản trở thành: tìm chuỗi trong bộ sưu tập trong đó có khoảng cách Levenshtein nhỏ nhất cho một đầu vào nhất định.

+0

Cảm ơn, điều này làm việc khá tốt :) Nếu tôi có chocolatedessert và chocolatepie và tôi gõ chocolatedes có vẻ như đi cho bánh vẫn còn, nhưng nó vẫn tốt hơn nhiều so với trước: p Cảm ơn một tấn! –

+0

Liên kết thứ hai bị hỏng. Vui lòng cập nhật. (đây có thể là liên kết - https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#getLevenshteinDistance(java.lang.CharSequence,%20java.lang. CharSequence)) –

+0

@KazekageGaara cảm ơn, đã hoàn thành. –

2

Không có gì được tích hợp vào Java cho điều đó. Bạn có thể thử thư viện của bên thứ ba như SecondString hoặc FREJ.

2

Một cách tiếp cận khác có thể được sử dụng kết hợp với khoảng cách Levenshtein là lấy biểu diễn ngữ âm của các từ đầu tiên. Một thuật toán để thực hiện điều này là Metaphone.

user guide for Apache Commons Codec có chi tiết về điều này và một số bộ mã hóa khác.

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