2015-07-13 18 views
5

xem xét các Strings sau:Sorting Chuỗi dựa trên sự tương

  • ông llo
  • tạm biệt
  • chào
  • = (tạm biệt)
  • (anh) (llo)
  • tạm biệt
  • helium

Tôi đang cố gắng để sắp xếp chúng trong một cách mà các từ tương tự đến với nhau, tôi biết

  1. alphanumerical sorting không phải là một lựa chọn
  2. loại bỏ ký tự đặc biệt ",-_ and etc sau đó so sánh chắc chắn là hữu ích nhưng kết quả sẽ không tốt như tôi mong đợi.

LƯU Ý:

có thể có được vài ouput mong muốn khác nhau cho điều này, một trong số đó là:

MONG MUỐN OUTPUT:

  1. chào
  2. ông llo
  3. (ông) (llo)
  4. heli
  5. tạm biệt
  6. tạm biệt
  7. = (tạm biệt)

vì vậy câu hỏi của tôi là nếu có một gói java so sánh chuỗi và cuối cùng là sắp xếp chúng dựa trên đó.

Tôi đã nghe nói về các điều khoản như n-gramskip-gram nhưng không hoàn toàn hiểu chúng. Tôi thậm chí không chắc chắn nếu họ có thể hữu ích cho tôi cả.

CẬP NHẬT: tìm điểm tương đồng chắc chắn là một phần của câu hỏi của tôi nhưng vấn đề chính là phần sắp xếp.

+2

có thể trùng lặp của [So sánh chuỗi tương tự trong Java] (http://stackoverflow.com/questions/955110/similarity-string-comparison -in-java) – dognose

+0

Có thể khu vực bạn đang tìm kiếm là NLP, Natural Language Processing, khi bạn đề cập đến 'hello' (' helium') và 'goodbye'. Thuật toán soundex được thiết lập nhưng sẽ không giúp đỡ về không gian. –

+0

@dognose thx cho liên kết, tôi có thể thấy nó rất hữu ích để so sánh. nhưng cách tiếp cận này hạn chế việc phân loại. làm thế nào nó có thể được sử dụng để phân loại? – nafas

Trả lời

4

Dưới đây là một cách tiếp cận có thể có.

Tính edit distance/Levenshtein distance giữa mỗi cặp dây và sau đó bạn sử dụng xem chuỗi dưới dạng biểu đồ hoàn chỉnh trong đó trọng số cạnh đến từ khoảng cách chỉnh sửa. Chọn một ngưỡng cho những trọng số đó và loại bỏ tất cả các trọng số lên cao. Sau đó, tìm cliques trong biểu đồ này. Nếu ngưỡng của bạn khá thấp, thậm chí việc tìm kiếm các thành phần được kết nối sẽ là một lựa chọn.

Lưu ý: Có lẽ sẽ tốt hơn nếu thay thế khoảng cách chỉnh sửa bằng một trong các biện pháp tương tự trong liên kết mà @dognose được đăng. Ngoài ra, lưu ý rằng việc tìm kiếm các từ khóa sẽ rất chậm nếu bạn có một số lượng lớn các chuỗi

+0

Tôi đã sử dụng phương pháp tiếp cận clique cho một số vấn đề tương tự trước đây, nó chắc chắn hoạt động. nhưng như bạn đã đề cập, nó có thể rất chậm. không may cho tôi, tôi có khoảng 10mil + dữ liệu. Vì vậy, clique sẽ được ra khỏi tùy chọn – nafas

+0

Làm thế nào về việc chỉ tìm kiếm các thành phần kết nối? – Simon

+0

vấn đề có thể phát sinh khi chúng tôi có A-B và B-C và A-D nhưng không phải A-C và không B-D sau đó làm thế nào để chúng tôi quyết định làm thế nào để sắp xếp chúng? – nafas

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