Tìm kiếm mờ bằng Java

Tìm kiếm mờ giúp bạn tìm thấy nội dung tương tự nhau, không hoàn toàn giống nhau, trong dữ liệu của bạn. Nó cực kỳ tiện dụng khi có một chút lỗi đánh máy, lỗi chính tả hoặc biến thể trong dữ liệu. Bài viết này nói về cách Java thực hiện tìm kiếm mờ để tìm trong các tệp nằm rải rác xung quanh các thư mục.

Dưới đây là một số ví dụ để xây dựng nội dung mẫu tìm kiếm mờ:

  • Bạn có thể không chắc liệu tài liệu sử dụng cách viết “màu” hay “màu”.
  • Khi tìm kiếm “John”, nó thực sự có thể được đánh vần là “Jon” hoặc có lẽ là “Jhon”.
  • Cố gắng tìm “USA” ngay cả khi ai đó gõ “USA”
  • Nếu bạn mắc một “sai lầm”, chờ đã, đó thực sự là một “sai lầm”.

Giải pháp để tìm những nội dung như vậy là Fuzzy Search.

Thư viện tìm kiếm mờ Java

Để thực hiện tìm kiếm mờ trong Java, chúng tôi sẽ sử dụng API GroupDocs.Search for Java. API có khả năng thể hiện tính linh hoạt cao và cung cấp mức độ chấp nhận lỗi có thể tùy chỉnh. Tính năng này rất thuận lợi khi xử lý các biến thể ngôn ngữ như tiếng Anh và tiếng Mỹ cũng như lỗi chính tả.

Với thư viện này, tìm kiếm mờ có thể được thực hiện trong nhiều định dạng tệp khác nhau. Sự hỗ trợ không chỉ giới hạn ở các tài liệu Word (DOC, DOCX), bảng tính (XLS, XLSX), bản trình bày (PPT, PPTX), PDF, ngôn ngữ đánh dấu (HTML, XML), Markdown (MD), sách điện tử (EPUB, CHM, FB2), email (MSG, EML), ghi chú OneNote và thậm chí cả kho lưu trữ ZIP.

Nếu bạn muốn biết tất cả các loại tệp mà phép thuật này có thể xử lý, chỉ cần xem qua tài liệu.

Để bắt đầu, bạn có thể lấy API từ phần tải xuống hoặc chỉ cần thêm cấu hình Maven phụ thuộc và kho lưu trữ mới nhất trực tiếp vào các ứng dụng Java của bạn.

Hãy tìm kiếm mờ trong tệp bằng Java

Hãy làm theo các bước sau để thực hiện tìm kiếm mờ trong nhiều tệp có định dạng tệp khác nhau trong các thư mục bằng Java:

  1. Bắt đầu bằng cách tạo Chỉ mục bằng cách sử dụng thư mục chứa tệp của bạn.
  2. Thêm đường dẫn thư mục chính vào tệp index.
  3. Cung cấp truy vấn tìm kiếm mà bạn muốn tìm kiếm.
  4. Bật sự kỳ diệu của Fuzzy Search để nó hiểu được những lỗi nhỏ.
  5. Đặt mức độ tương tự trong thuật toán mờ.
  6. Thực hiện tìm kiếm bằng phương pháp tìm kiếm để có được kết quả tìm kiếm.
  7. Bây giờ, bạn có thể duyệt qua SearchResults để tạo hoặc in kết quả đầu ra theo ý muốn.

Trong mã Java bên dưới, chương trình sẽ tìm kiếm nội dung tương tự giống như nội dung bạn yêu cầu trong tất cả các tệp và thư mục con. Nó có khả năng chịu lỗi chính tả, lỗi lên tới 25%. Nếu bạn xem qua mã, bạn sẽ thấy mức độ tương tự được đặt thành 0,75, tương đương với mức trùng khớp 75%. Nếu bạn muốn tinh chỉnh tìm kiếm, chỉ cần thay đổi mức độ tương tự trong mã.

// Fuzzy Tìm kiếm nhiều tệp trên nhiều thư mục bằng Java

// Tạo thư mục chỉ mục và thêm thư mục tài liệu vào đó
Index index = new Index("path/indexing-folder-path");
index.add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.getFuzzySearch().setEnabled(true); // Enabling the fuzzy search
options.getFuzzySearch().setFuzzyAlgorithm(new SimilarityLevel(0.75));

String query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.search(query, options);

Sau khi chạy mã, bạn sẽ nhận được danh sách các kết quả tìm kiếm mờ được tìm nạp. Nếu bạn muốn xem cách in kết quả tìm kiếm, hãy tiếp tục đọc bài viết này.

Query: nulla
 Documents: 2
 Occurrences: 135

     Document: Lorem ipsum.docx
     Occurrences: 132
         Field: content
         Occurrences: 132
             nulla               98
             nullam              34

     Document: EnglishText.txt
     Occurrences: 3
         Field: content
         Occurrences: 3
             dull                1
             full                1
             fully               1

In kết quả tìm kiếm

Mã Java sau đây cung cấp hai cách để trình bày kết quả tìm kiếm của bạn.

  • Đánh dấu tất cả các kết quả phù hợp gần đúng.
  • In kết quả ở định dạng dễ đọc và phân tích được
// Đánh dấu và in kết quả tìm kiếm cho tất cả tài liệu bằng Java
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
  
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "path/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
 
    System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
    System.out.println("\tOccurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\t\tField: " + field.getFieldName());
        System.out.println("\t\tOccurrences: " + field.getOccurrenceCount());

        // In các thuật ngữ được tìm thấy
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
    }
}

Nhận giấy phép miễn phí hoặc dùng thử miễn phí

Giấy phép miễn phí

Nhận [giấy phép tạm thời] miễn phí để khám phá thư viện này mà không bị ràng buộc.

Dùng thử miễn phí

Bạn có thể tải xuống bản dùng thử miễn phí từ phần tải xuống.

API Java để tìm kiếm trong tệp và thư mục

Phần kết luận

Trong bài viết này, chúng ta đã khám phá cách lập trình Java để thực hiện tìm kiếm mờ. Nó giúp tìm các từ khớp gần giống nhau, ngay cả khi có những lỗi nhỏ. Tính năng này rất hữu ích để xử lý sự khác biệt giữa tiếng Anh Anh và tiếng Anh Mỹ, lỗi chính tả, thay đổi tên và âm thanh tương tự trong từ.

Để biết thêm về API, hãy xem tài liệu.

Nếu bạn có thắc mắc hoặc muốn thảo luận thêm, hãy truy cập diễn đàn.


Xem thêm