Trong một bài viết khác, chúng ta đã biết thế nào là từ đồng nghĩa và cách lấy tất cả các từ đồng nghĩa của bất kỳ từ nào. Còn việc tìm những từ đồng nghĩa này trong các tài liệu khác nhau thì sao? Bài viết này sẽ hướng dẫn bạn cách tìm kiếm từ đồng nghĩa của bất kỳ truy vấn (từ) cụ thể nào trong nhiều tệp bằng C#.

Các chủ đề sau đây sẽ được đề cập dưới đây:

.NET API để tìm kiếm từ đồng nghĩa trong nhiều tệp

GroupDocs.Search cung cấp API .NET cho phép tìm kiếm bất kỳ từ nào và từ đồng nghĩa của từ đó trong nhiều tệp của thư mục đã chỉ định. Tôi sẽ sử dụng API này trong các ví dụ hiển thị của bài viết này. Nó cho phép bạn tìm kiếm trong một danh sách lớn các định dạng tài liệu. Cùng với việc tìm kiếm các từ đồng nghĩa, GroupDocs.Search for .NET cũng hỗ trợ một số kỹ thuật tìm kiếm khác bao gồm:

  • Tìm kiếm mờ
  • Tìm kiếm phân biệt chữ hoa chữ thường
  • Tìm kiếm từ đồng âm
  • Tìm kiếm biểu thức chính quy
  • Tìm kiếm thẻ hoang dã

Bạn có thể tải xuống trình cài đặt DLL hoặc MSI từ phần tải xuống hoặc cài đặt API trong ứng dụng .NET của bạn qua NuGet.

PM> Install-Package GroupDocs.Search

Tìm từ đồng nghĩa trong nhiều tệp bằng C#

Các bước chỉ ra cách tìm kiếm các từ đồng nghĩa (các từ có nghĩa tương tự) trong các tệp trong một thư mục bằng C#.

  • Xác định truy vấn tìm kiếm, thư mục chỉ mục và thư mục của tài liệu.
  • Tạo chỉ mục với Thư mục chỉ mục được xác định bằng lớp Chỉ mục.
  • Thêm thư mục của tài liệu vào chỉ mục.
  • Tạo SearchOptions và đặt UseSynonymSearch thành true.
  • Gọi phương thức Search của lớp Index và chuyển các tùy chọn truy vấn và tìm kiếm.
  • Để in bản tóm tắt, hãy sử dụng các thuộc tính của SearchResult đã truy xuất.

Mã nguồn cho biết cách tìm tất cả các từ đồng nghĩa trong tất cả các tệp của một thư mục bằng C#

// Tìm kiếm từ đồng nghĩa trong nhiều tệp và thư mục bằng C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Tạo một chỉ mục trong thư mục được chỉ định
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Tạo một đối tượng tùy chọn tìm kiếm
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Tìm kiếm từ 'make'
// Ngoài từ 'make', các từ đồng nghĩa "do, cause, get,..." cũng sẽ được tìm kiếm
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);
Query: **make**
Documents: 2
Occurrences: 22

Các bước sau in chi tiết kết quả sau khi nhận được tất cả các từ đồng nghĩa và số lần xuất hiện của chúng trong mỗi tài liệu.

  • Duyệt qua các kết quả tìm kiếm được truy xuất bằng mã ở trên.
  • Nhận từng FoundDocument bằng phương pháp GetFoundDocument.
  • In các thuộc tính lặp lại của từng FoundDocument.
  • Di chuyển qua FoundFields trong mỗi FoundDocument để lấy Found Document Field.
  • Từ mỗi FoundDocumentField, bạn có thể lấy các thuật ngữ và số lần xuất hiện của nó trong mỗi tài liệu.

Mã nguồn sau đây in kết quả tìm kiếm từ đồng nghĩa cùng với số lần xuất hiện của từng thuật ngữ được tìm kiếm bằng C#.

// In kết quả Tìm kiếm Từ đồng nghĩa trong C#
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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]);
            }
        }
    }
}
Query: **make**
Documents: 2
Total occurrences: 22

Document: C:/documents/sample.docx
Occurrences: 6
    Field: content
    Occurrences: 6
        make             1
        get                 2
        cause            1
        do                  2
Document: C:/documents/sample.txt
Occurrences: 16
    Field: content
    Occurrences: 16
        get                  4
        cause             1
        do                  11

Tìm từ đồng nghĩa và in kết quả bằng C# - Complete Code

Đây là mã nguồn hoàn chỉnh đầu tiên tìm thấy tất cả các từ đồng nghĩa theo truy vấn được cung cấp, sau đó in tất cả các lần xuất hiện của tất cả các từ đồng nghĩa trong mỗi tài liệu trong thư mục đó bằng C#.

// Tìm kiếm Từ đồng nghĩa trong nhiều tệp và thư mục và In kết quả bằng C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Tạo một chỉ mục trong thư mục được chỉ định
Index index = new Index(indexFolder);
// Lập chỉ mục tài liệu từ thư mục được chỉ định
index.Add(documentsFolder);

// Tạo một đối tượng tùy chọn tìm kiếm
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Tìm kiếm từ 'make'
// Ngoài từ 'make', các từ "do, cause, get,..." cũng sẽ được tìm kiếm
SearchResult result = index.Search(query, options);

// In kết quả
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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]);
            }
        }
    }
}

Sự kết luận

Để kết luận, bạn đã học cách tìm các từ cụ thể và cả từ đồng nghĩa của chúng trong nhiều tài liệu trong thư mục được chỉ định bằng C#. Bạn có thể thử phát triển ứng dụng .NET của riêng mình để tìm kiếm bất kỳ từ nào và từ đồng nghĩa của từ đó trong nhiều tệp.

Tìm hiểu thêm về .NET Search Automation API từ tài liệu. Để trải nghiệm các tính năng, bạn có thể xem các ví dụ trên kho lưu trữ GitHub. Hãy liên hệ với chúng tôi nếu có bất kỳ thắc mắc nào thông qua diễn đàn.

Xem thêm