Bạn đã bao giờ tự hỏi làm thế nào để dễ dàng tìm kiếm trong nhiều tệp hoặc vượt qua thử thách tìm kiếm trong các tệp trên các thư mục khác nhau chưa? Bài viết này có câu trả lời mà bạn đang tìm kiếm. Hãy cùng đi sâu vào thế giới tìm kiếm văn bản và khám phá cách tìm kiếm các văn bản hoặc cụm từ khác nhau trong các tệp khác nhau trên các thư mục khác nhau bằng C#.

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

Bây giờ, chúng tôi sẽ sử dụng API GroupDocs.Search for .NET để khám phá nhiều văn bản trong các tệp có định dạng đa dạng 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 một cách có hệ thống ở nhiều định dạng tệp khác nhau, chẳng hạn như 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. Để biết danh sách chuyên sâu về các định dạng tệp được hỗ trợ, hãy tham khảo tài liệu toàn diện.

Bạn có tùy chọn lấy tệp DLL hoặc trình cài đặt MSI từ phần tải xuống hoặc bạn có thể cài đặt API vào ứng dụng .NET của mình bằng NuGet.

PM> Install-Package GroupDocs.Search

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

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# và tạo 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 xuất từng tài liệu được tìm thấy bằng phương pháp GetFoundDocument.
    • Truy xuất 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 C#

// Tạo chỉ mục và lập chỉ mục tài liệu từ thư mục được chỉ định
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Tìm kiếm tài liệu có chứa từ “water” hoặc “non” hoặc cụm từ “Lorem ipsum”
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// In kết quả
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Làm nổi bật kết quả tìm kiếm
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
}

Đ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ả
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // In các thuật ngữ được tìm thấy
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // In các cụm từ tìm thấy
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[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:

Documents: 3
Total occurrences: 141
	Document: Lorem ipsum.docx
	Occurrences: 101
		Field: filename
		Occurrences: 101
			lorem ipsum		1
		Field: content
		Occurrences: 101
			non			94
			lorem ipsum		6
	Document: Lorem ipsum.pdf
	Occurrences: 1
		Field: filename
		Occurrences: 1
			lorem ipsum		1
	Document: English.txt
	Occurrences: 39
		Field: content
		Occurrences: 39
			water			39

Mã hoàn chỉnh

Đây là mã C# 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 C#

// Tạo chỉ mục và lập chỉ mục tài liệu từ thư mục được chỉ định
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Tìm kiếm tài liệu có chứa từ “water” hoặc “non” hoặc cụm từ “Lorem ipsum”
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// In kết quả
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Làm nổi bật kết quả tìm kiếm
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // In các thuật ngữ được tìm thấy
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // In các cụm từ tìm thấy
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[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 .NET để 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 tôi đã nghiên cứu tính năng quét văn bản để tìm kiếm các văn bản khác nhau trong nhiều tệp trên nhiều thư mục bằng C#. Bắt đầu với truy vấn tìm kiếm, chúng tôi đã khám phá trong nhiều tệp và thư mục, đánh dấu các từ hoặc cụm từ được tìm kiếm trong các tệp HTML tương ứng.

Để biết chi tiết đầy đủ về API, độc giả nên tham khảo tài liệu.

Mọi thắc mắc hoặc thảo luận bổ sung có thể được chuyển đến diễn đàn có sẵn.

Xem thêm