Bạn đã bao giờ tự hỏi làm thế nào để tìm kiếm liền mạch qua nhiều tệp hoặc có thể điều hướng sự phức tạp của việc tìm kiếm trong các tệp trên nhiều thư mục chưa? Tất cả các truy vấn của bạn tìm thấy câu trả lời ở đây. Bài viết này đi sâu vào lĩnh vực quét văn bản, giới thiệu cách tìm kiếm nhiều văn bản hoặc cụm từ trong nhiều tệp khác nhau trải rộng trên nhiều thư mục khác nhau bằng cách sử dụng Java.

API Java để quét văn bản trên các tệp và thư mục

Hôm nay, chúng ta sẽ sử dụng API GroupDocs.Search for Java để tìm kiếm nhiều văn bản trong các tệp có định dạng tệp khác nhau trên các thư mục. Thư viện này cho phép chúng tôi quét văn bản theo chương trình trong nhiều định dạng tệp cho tài liệu Word, bảng tính, bản trình bày, tệp PDF, tệp Đánh dấu, sách điện tử, thư email, tài liệu One Note và kho lưu trữ ZIP. Tài liệu cung cấp danh sách chi tiết các định dạng tệp được hỗ trợ.

Bạn có thể tải xuống tệp JAR từ phần tải xuống hoặc sử dụng cấu hình Maven phụ thuộc và kho lưu trữ mới nhất trong các ứng dụng Java của bạn.

Tìm kiếm nhiều văn bản trong tệp trên các thư mục bằng Java

Hãy làm theo các bước sau để thực hiện tìm kiếm văn bản trong nhiều tệp trong nhiều thư mục bằng cách sử dụng Java và tạo các tệp đầu ra HTML được đánh dấu cho mỗi tài liệu được tìm thấy.

  • Tạo một đối tượng Index với đường dẫn thư mục chỉ mục đã chỉ định.
  • Lập chỉ mục thư mục tài liệu gốc bằng phương thức thêm.
  • Xác định truy vấn tìm kiếm có nhiều thuật ngữ hoặc cụm từ.
  • Thực hiện quét văn bản bằng phương pháp tìm kiếm và lưu trữ kết quả.
  • Lặp lại thông qua các kết quả tìm kiếm:
    • Truy cập từng tài liệu được tìm thấy bằng phương thức getFoundDocument.
    • Truy cập hoặc in bất kỳ thông tin tệp nào cho tài liệu được tìm thấy.
    • Thiết lập OutputAdapter cho định dạng và đường dẫn mong muốn.
    • Tạo Highlighter cho tài liệu.
    • Đánh dấu và xuất kết quả tìm kiếm thành tệp HTML bằng phương pháp đánh dấu.
// Tìm kiếm văn bản trong nhiều tệp có định dạng tệp khác nhau trong nhiều thư mục bằng Java

// Tạo chỉ mục trong thư mục được chỉ định
Index index = new Index("path/for/indexingFolder");

// Lập chỉ mục tài liệu từ thư mục được chỉ định
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
}

Đoạn mã trên cho phép bạn tìm kiếm các văn bản cụ thể trong nhiều tệp và tạo các tệp đầu ra HTML được đánh dấu cho mỗi tài liệu được tìm thấy.

Kết quả tìm kiếm văn bản được đánh dấu ở định dạng HTML

In kết quả tìm kiếm văn bản

Từ kết quả của truy vấn tìm kiếm, bạn có thể trích xuất thêm thông tin về các tài liệu được tìm thấy.

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

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // In kết quả tìm kiếm ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\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" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // In các cụm từ tìm thấy
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }
}

Sau đây sẽ là đầu ra của việc in các kết quả tìm kiếm trên thu được từ các tệp DOCX, PDF và TXT:

File Name: Lorem ipsum.docx
Occurrences: 101
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 100
		non - 94
		lorem ipsum  - 6
====================================
File Name: Lorem ipsum.pdf
Occurrences: 60
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 59
		non - 53
		lorem ipsum  - 6
====================================
File Name: English.txt
Occurrences: 39
	Field: content
	Occurrences: 39
		water - 39

Mã hoàn chỉnh

Đây là mã Java hoàn chỉnh để tìm kiếm chung các chuỗi văn bản và cụm từ trong nhiều tệp và thư mục:

// Tìm kiếm văn bản trong nhiều tệp có định dạng tệp khác nhau trong nhiều thư mục bằng Java

// Tạo chỉ mục trong thư mục được chỉ định
Index index = new Index("path/for/indexingFolder");

// Lập chỉ mục tài liệu từ thư mục được chỉ định
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
  
    // In kết quả tìm kiếm ============
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\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" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // In các cụm từ tìm thấy
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[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í

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

Dùng thử miễn phí

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 vừa khám phá tính năng quét văn bản để tìm kiếm nhiều văn bản trong nhiều tệp trên nhiều thư mục bằng Java. Bắt đầu với truy vấn tìm kiếm, chúng tôi đã tìm kiếm trong nhiều tệp và thư mục, đồng thời đánh dấu các kết quả tìm thấy trong các tệp HTML tương ứng.

Để biết thông tin chi tiết về API, độc giả nên tham khảo tài liệu. Các câu hỏi và thảo luận thêm có thể được chuyển đến diễn đàn được cung cấp.

Xem thêm