2008-09-17 30 views
57

Có câu hỏi tương tự, nhưng không liên quan đến thư viện C# mà tôi có thể sử dụng trong mã nguồn của mình.Có bất kỳ thư viện Chức năng tìm kiếm mờ hoặc chuỗi tương tự nào được viết cho C# không?

Cảm ơn tất cả vì sự giúp đỡ của bạn.

Tôi đã thấy rõ ràng, nhưng tôi cần một cái gì đó dễ dàng hơn để tìm kiếm các chuỗi tương tự và không có chi phí của phần lập chỉ mục.

Câu trả lời tôi đánh dấu có hai thuật toán rất dễ, và một thuật toán cũng sử dụng LINQ, vì vậy nó hoàn hảo.

+3

Tại sao chủ đề này thoát khỏi chủ đề của tôi. OP yêu cầu nếu có một hàm trong thư viện mà SO hỗ trợ chuyên sâu. – 010110110101

Trả lời

30

khoảng cách levenshtein thực hiện:

Tôi có một dự án .NET 1.1, trong đó tôi sử dụng dự án thứ hai. Nó đơn giản, nhưng hoạt động hoàn hảo cho những gì tôi cần. Từ những gì tôi nhớ nó cần một chút tinh chỉnh, nhưng không có gì không rõ ràng.

+0

Tại sao bạn nói "Sử dụng LINQ"? Không có triển khai nào trong số này triển khai LINQ ... –

+1

Trên thực tế, việc triển khai này giống hệt nhau, ngoại trừ trường hợp sử dụng chuỗi con, chậm hơn nhiều so với việc sử dụng trình lập chỉ mục vì nó tạo ra các cá thể String mới mỗi lần ... –

+0

Thực tế là bạn đúng. Tôi có thể thề rằng có một số LINQ-tình yêu trong đó, hoặc ít nhất là tiêu đề tuyên bố đó là LINQy hoặc một cái gì đó. –

0

Beagle Project cho Linux được viết bằng C# (mono) và là công cụ tìm kiếm giống như trên máy tính để bàn của google. Nó có thể có một số mã trong đó cho các loại chuỗi phù hợp.

Nếu tôi nhớ chính xác, nó sử dụng thư viện Lucene để tìm kiếm và truy lục dữ liệu. Có lẽ điều đó cũng có thể hữu ích cho dự án của bạn.

2

Bạn đã xem Lucene.net chưa? Nó là một cổng của API công cụ tìm kiếm Lucene của Java tới nền tảng .Net. Thư viện đó cung cấp rất nhiều chức năng tìm kiếm. Tôi chơi xung quanh với nó một năm hoặc lâu hơn trước đây, do đó, không có đề nghị của tôi dựa trên tấn kinh nghiệm. Tôi đã thấy nó trong cuốn sách Công cụ điện dành cho nhà phát triển Windows và lấy nó cho một ổ đĩa thử nghiệm. Bạn có thể xem qua số API documentation để xem nó có cung cấp thứ gì đó giống như Tìm kiếm mờ mà bạn đang tìm kiếm hay không.

+0

Bạn có thể cho biết làm thế nào để có được mức độ tương tự bằng cách sử dụng Lucene? –

+0

Xin lỗi, tôi đã không sử dụng nó một cách chuyên nghiệp. Như tôi đã đề cập trong bài viết của tôi, tôi chỉ chơi xung quanh với nó có lẽ khoảng năm 2007/2008. –

+0

Có lẽ cuốn sách [Lucene in Action, 2ed] (http://goo.gl/0sKkw7) có thể cho biết làm thế nào để có được mức độ tương tự. – AechoLiu

1

Có những điều sau Levenshtein cách Thuật toán mà gán một giá trị cho sự giống nhau của hai chuỗi (tốt, sự khác biệt thực sự), mà có thể được sử dụng để xây dựng dựa trên: http://www.merriampark.com/ldcsharp.htm

27

bạn cũng có thể ghé qua thư viện rất ấn tượng mang tên Sam Chuỗi Metrics http://sourceforge.net/projects/simmetrics/files/. điều này bao gồm một loạt các thuật toán.

  • khoảng cách Hamming
  • khoảng cách levenshtein
  • Needleman-Wunch khoảng cách hoặc bán Algorithm
  • Smith-Waterman khoảng cách
  • Gotoh cách hoặc Smith-Waterman-Gotoh khoảng cách
  • Khối khoảng cách hoặc khoảng cách L1 hoặc khoảng cách khối Thành phố
  • Monge Khoảng cách Elkan
  • Jaro khoảng cách metric
  • Jaro Winkler
  • khoảng cách Soundex metric
  • Matching Hệ số
  • Dice của Hệ
  • Jaccard tương đồng hoặc Jaccard Hệ số hoặc Tanimoto hệ số
  • chồng chéo Hệ số
  • khoảng cách Euclide hay khoảng cách L2
  • Độ tương tự Cosine
  • V khoảng cách ariational
  • khoảng cách hellinger hoặc khoảng cách Bhattacharyya
  • Thông tin Radius (Jensen-Shannon divergence)
  • Harmonic Mean
  • phân kỳ Skew
  • Lẫn lộn Xác suất
  • Tàu
  • Fellegi và Sunters (SFS) metric
  • TFIDF hoặc TF/IDF
  • FastA
  • blastp
  • tối đa phù hợp với
  • q-gram
  • Ukkonen Algorithms
+14

Liên kết trong câu trả lời này đang cho tôi lỗi 403. Bạn có thể sử dụng [Máy ​​Wayback] (http://web.archive.org/web/http://staffwww.dcs.shef.ac.uk/people/[email protected]/stringmetrics .html) thay thế. –

+0

Tôi tin rằng phiên bản .NET của thư viện được đề cập ở trên là [ở đây] (http://sourceforge.net/projects/simmetrics/files/). Sau khi tôi chuyển đổi nó sang Visual Studio 2010, và cập nhật các tham chiếu NUnit, nó xây dựng. Nó cũng vượt qua 87 bài kiểm tra. – dalenewman

+0

Tôi tìm thấy một phiên bản thư viện .net của thư viện này trên [SimMetrics.Net trên GitHub] (https://github.com/StefH/SimMetrics.Net). Giống như gợi ý từ @dalenewman, chỉ trên github có lẽ? – Spiralis

11

Họ không phải là phát minh của riêng tôi, nhưng họ yêu thích của tôi và tôi vừa viết blog về họ và xuất bản của riêng tôi các phiên bản tinh chỉnh của Hệ số xúc xắc, khoảng cách Levenshtein, Hậu quả thường gặp nhất và Siêu nhân đôi trong bài đăng trên blog có tên là Four Functions for Finding Fuzzy String Matches in C# Extensions.

+1

Chúng được làm sẵn trong một lớp học mà bạn chỉ có thể thả vào dự án của bạn. Đây là cách dễ dàng của con người để đi. – cjbarth

+0

mã ngay bây giờ trên GitHub https://github.com/tylerjensen/duovia-fuzzystrings – DanO

+0

Cập nhật liên kết tới bài đăng trên blog: http://www.tsjensen.com/blog/post/2011/05/27/Four+Functions+ Đối với + Tìm kiếm + Fuzzy + Chuỗi + Kết hợp + Trong + C + Tiện ích mở rộng.aspx –

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