W innym artykule widzieliśmy, czym są synonimy i jak uzyskać wszystkie synonimy dowolnego słowa. A co ze znalezieniem tych synonimów w różnych dokumentach? Z tego artykułu dowiesz się, jak wyszukiwać synonimy określonego zapytania (słowo) w wielu plikach przy użyciu języka C#.

Poniżej zostaną omówione następujące tematy:

.NET API do wyszukiwania synonimów w wielu plikach

GroupDocs.Search zapewnia interfejs API .NET, który umożliwia wyszukiwanie dowolnego słowa i jego synonimów w wielu plikach określonego folderu. Będę używać tego interfejsu API w pokazanych przykładach tego artykułu. Pozwala na przeszukiwanie dużej listy formatów dokumentów. Oprócz wyszukiwania synonimów GroupDocs.Search for .NET obsługuje również inne techniki wyszukiwania, w tym:

  • Wyszukiwanie rozmyte
  • Wyszukiwanie z uwzględnieniem wielkości liter
  • Wyszukiwanie homofonów
  • Wyszukiwanie wyrażeń regularnych
  • Wyszukiwanie dzikich kart

Możesz pobrać instalator bibliotek DLL lub MSI z sekcji pobierania lub zainstalować interfejs API w swojej aplikacji .NET za pośrednictwem NuGet.

PM> Install-Package GroupDocs.Search

Znajdź synonimy w wielu plikach za pomocą C#

Kroki pokazują, jak wyszukiwać synonimy (słowa o podobnym znaczeniu) w plikach w folderze przy użyciu języka C#.

  • Zdefiniuj zapytanie wyszukiwania, folder indeksu i folder dokumentu.
  • Utwórz indeks ze zdefiniowanym folderem indeksu przy użyciu klasy Indeks.
  • Dodaj folder dokumentu do indeksu.
  • Utwórz SearchOptions i ustaw UseSynonymSearch na true.
  • Wywołaj metodę Search klasy Index i przekaż opcje zapytania i wyszukiwania.
  • Aby wydrukować podsumowanie, użyj właściwości pobranego SearchResult.

Kod źródłowy pokazuje, jak znaleźć wszystkie synonimy we wszystkich plikach folderu przy użyciu języka C#

// Wyszukaj synonimy w wielu plikach i folderach za pomocą C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Tworzenie indeksu w określonym folderze
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Tworzenie obiektu opcji wyszukiwania
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Wyszukaj słowo „robić”
// Oprócz słowa „make” wyszukiwane będą również synonimy „robić, powodować, dostawać,…”
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

Poniższe kroki umożliwiają szczegółowe wydrukowanie wyników po uzyskaniu wszystkich synonimów i liczby ich wystąpień w każdym dokumencie.

  • Przejrzyj wyniki wyszukiwania, które są pobierane przy użyciu powyższego kodu.
  • Pobierz każdy FoundDocument przy użyciu metody GetFoundDocument.
  • Wydrukuj odpowiednie właściwości każdego znalezionego dokumentu.
  • Przejrzyj FoundFields w obrębie każdego FoundDocument, aby uzyskać Found Document Field.
  • Z każdego pola FoundDocumentField można uzyskać jego warunki i liczbę wystąpień w każdym dokumencie.

Poniższy kod źródłowy drukuje wyniki wyszukiwania synonimów wraz z liczbą wystąpień każdego wyszukiwanego terminu przy użyciu języka C#.

// Drukowanie wyników wyszukiwania synonimów w języku 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);
        // Drukowanie znalezionych terminów
        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

Wyszukiwanie synonimów i drukowanie wyników przy użyciu języka C# — pełny kod

Oto kompletny kod źródłowy, który najpierw znajduje wszystkie synonimy zgodnie z podanym zapytaniem, a następnie drukuje wszystkie wystąpienia wszystkich synonimów w każdym dokumencie w tym folderze przy użyciu języka C#.

// Wyszukaj synonimy w wielu plikach i folderach i wydrukuj wyniki za pomocą C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Tworzenie indeksu w określonym folderze
Index index = new Index(indexFolder);
// Indeksowanie dokumentów z określonego folderu
index.Add(documentsFolder);

// Tworzenie obiektu opcji wyszukiwania
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Wyszukaj słowo „robić”
// Oprócz słowa „make” wyszukiwane będą również słowa „zrobić, spowodować, uzyskać…”
SearchResult result = index.Search(query, options);

// Drukowanie wyniku
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);
        // Drukowanie znalezionych terminów
        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]);
            }
        }
    }
}

Wniosek

Podsumowując, nauczyłeś się znajdować określone słowa, a także ich synonimy w wielu dokumentach w określonym folderze, używając C#. Możesz spróbować opracować własną aplikację .NET do wyszukiwania dowolnego słowa i jego synonimów w wielu plikach.

Dowiedz się więcej o interfejsie .NET Search Automation API z dokumentacji. Aby zapoznać się z funkcjami, możesz zapoznać się z przykładami w repozytorium GitHub. W przypadku jakichkolwiek pytań skontaktuj się z nami za pośrednictwem forum.

Zobacz też