V jiném článku jsme viděli, co jsou synonyma a jak získat všechna synonyma jakéhokoli slova. Co takhle najít tato synonyma v různých dokumentech? Tento článek vás provede hledáním synonym jakéhokoli konkrétního dotazu (slova) ve více souborech pomocí C#.

Níže budou probrána následující témata:

.NET API pro vyhledávání synonym ve více souborech

GroupDocs.Search poskytuje rozhraní .NET API, které umožňuje vyhledávat libovolné slovo a jeho synonyma ve více souborech zadané složky. Budu používat toto API v ukázaných příkladech tohoto článku. Umožňuje vám prohledávat velký seznam formátů dokumentů. Kromě hledání synonym podporuje GroupDocs.Search for .NET také některé další techniky vyhledávání, které zahrnují:

  • Fuzzy vyhledávání
  • Vyhledávání rozlišující malá a velká písmena
  • Vyhledávání homofonů
  • Hledání regulárních výrazů
  • Vyhledávání divokých karet

Můžete si stáhnout DLL nebo MSI instalační program z části ke stažení nebo nainstalovat API do vaší aplikace .NET prostřednictvím NuGet.

PM> Install-Package GroupDocs.Search

Najít synonyma ve více souborech pomocí C#

Kroky ukazují, jak vyhledávat synonyma (slova s podobným významem) v souborech ve složce pomocí C#.

  • Definujte vyhledávací dotaz, indexovou složku a složku dokumentu.
  • Vytvořte index s definovanou složkou indexu pomocí třídy Index.
  • Přidejte složku dokumentu do rejstříku.
  • Vytvořte SearchOptions a nastavte UseSynonymSearch na true.
  • Zavolejte metodu Search třídy Index a předejte možnosti dotazu a vyhledávání.
  • Chcete-li souhrn vytisknout, použijte vlastnosti obnoveného SearchResult.

Zdrojový kód ukazuje, jak najít všechna synonyma ve všech souborech složky pomocí C#

// Hledání synonym ve více souborech a složkách pomocí C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Vytvoření indexu v zadané složce
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Vytvoření objektu možností hledání
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Hledejte slovo 'make'
// Kromě slova 'make' se budou hledat i synonyma "dělat, způsobit, dostat, ..."
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

Následující kroky vytisknou výsledky podrobně po získání všech synonym a jejich počtu výskytů v každém dokumentu.

  • Procházejte výsledky vyhledávání, které jsou načteny pomocí výše uvedeného kódu.
  • Získejte každý FoundDocument pomocí metody GetFoundDocument.
  • Vytiskněte příslušné vlastnosti každého FoundDocumentu.
  • Procházejte FoundFields v rámci každého FoundDocumentu a získejte Found Document Field.
  • Z každého FoundDocumentField můžete získat jeho podmínky a počet výskytů v každém dokumentu.

Následující zdrojový kód vytiskne výsledky hledání synonym spolu s počtem výskytů každého hledaného výrazu pomocí C#.

// Tisk výsledků hledání synonym v 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);
        // Tisk nalezených termínů
        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

Hledejte synonyma a výsledky tisku pomocí C# – kompletní kód

Zde je úplný zdrojový kód, který nejprve najde všechna synonyma podle zadaného dotazu a poté vytiskne všechny výskyty všech synonym v každém dokumentu v této složce pomocí C#.

// Vyhledávejte synonyma ve více souborech a složkách a tiskněte výsledky pomocí C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Vytvoření indexu v zadané složce
Index index = new Index(indexFolder);
// Indexování dokumentů ze zadané složky
index.Add(documentsFolder);

// Vytvoření objektu možností hledání
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Hledejte slovo 'make'
// Kromě slova 'make' se budou hledat i slova "do, způsobit, dostat, ..."
SearchResult result = index.Search(query, options);

// Tisk výsledku
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);
        // Tisk nalezených termínů
        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]);
            }
        }
    }
}

Závěr

Na závěr jste se naučili, jak najít konkrétní slova a také jejich synonyma ve více dokumentech v zadané složce pomocí C#. Můžete si zkusit vyvinout vlastní .NET aplikaci pro vyhledávání libovolného slova a jeho synonym ve více souborech.

Další informace o rozhraní .NET Search Automation API naleznete v dokumentaci. Chcete-li si tyto funkce vyzkoušet, můžete se podívat na příklady v úložišti GitHub. Kontaktujte nás s jakýmkoliv dotazem prostřednictvím fóra.

Viz také