In een ander artikel hebben we gezien wat synoniemen zijn, en hoe je alle synoniemen van een woord kunt krijgen. Hoe zit het met het vinden van deze synoniemen in verschillende documenten? Dit artikel zal u helpen bij het zoeken naar de synoniemen van een specifieke zoekopdracht (woord) in meerdere bestanden met behulp van C#.

De volgende onderwerpen komen hieronder aan bod:

.NET API voor het zoeken naar synoniemen in meerdere bestanden

GroupDocs.Search biedt de .NET API waarmee elk woord en de bijbehorende synoniemen in meerdere bestanden van de opgegeven map kunnen worden doorzocht. Ik zal deze API gebruiken in de getoonde voorbeelden van dit artikel. Hiermee kunt u zoeken in een grote lijst met documentindelingen. Naast het vinden van de synoniemen, ondersteunt GroupDocs.Search for .NET ook enkele andere zoektechnieken, waaronder:

  • Vage zoekopdracht
  • Hoofdlettergevoelig zoeken
  • Homofoon zoeken
  • Reguliere expressies zoeken
  • Zoeken met jokertekens

U kunt de DLL’s of het MSI-installatieprogramma downloaden van de downloadsectie of de API in uw .NET-toepassing installeren via NuGet.

PM> Install-Package GroupDocs.Search

Vind synoniemen in meerdere bestanden met behulp van C#

De stappen laten zien hoe u met C# kunt zoeken naar synoniemen (woorden met vergelijkbare betekenissen) in bestanden in een map.

  • Definieer de zoekopdracht, de indexmap en de documentmap.
  • Maak een index met een gedefinieerde indexmap met behulp van de klasse Index.
  • Voeg de map van het document toe aan de index.
  • Maak de SearchOptions en stel de UseSynonymSearch in op true.
  • Roep de methode Search van de klasse Index aan en geef de query- en zoekopties door.
  • Gebruik de eigenschappen van de opgehaalde SearchResult om de samenvatting af te drukken.

De broncode laat zien hoe u alle synoniemen in alle bestanden van een map kunt vinden met behulp van C#

// Zoek synoniemen in meerdere bestanden en mappen met behulp van C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Een index maken in de opgegeven map
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Een object met zoekopties maken
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Zoek op het woord 'maken'
// Naast het woord 'maken' zal er ook gezocht worden op de synoniemen 'doen, veroorzaken, krijgen, ...'
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

De volgende stappen drukken de resultaten in detail af nadat alle synoniemen en hun aantal keren in elk document zijn gevonden.

  • Doorloop de zoekresultaten die worden opgehaald met behulp van de bovenstaande code.
  • Haal elk FoundDocument op met behulp van de methode GetFoundDocument.
  • Druk de respectieve eigenschappen van elk FoundDocument af.
  • Doorloop de FoundFields binnen elk FoundDocument om Field Found Document te krijgen.
  • Van elk FoundDocumentField kunt u de termen en het aantal keren dat het voorkomt binnen elk document ophalen.

De volgende broncode drukt de zoekresultaten voor synoniemen af samen met het aantal keren dat elke gezochte term voorkomt met behulp van C#.

// De zoekresultaten voor synoniemen afdrukken in 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);
        // Gevonden termen afdrukken
        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

Zoek naar synoniemen en afdrukresultaten met behulp van C# - Volledige code

Hier is de volledige broncode die eerst alle synoniemen vindt volgens de verstrekte query en vervolgens alle exemplaren van alle synoniemen in elk document in die map afdrukt met behulp van C#.

// Zoek synoniemen in meerdere bestanden en mappen en druk de resultaten af met C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Een index maken in de opgegeven map
Index index = new Index(indexFolder);
// Documenten uit de opgegeven map indexeren
index.Add(documentsFolder);

// Een object met zoekopties maken
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Zoek op het woord 'maken'
// Naast het woord 'maken' wordt er ook gezocht op de woorden 'doen, veroorzaken, krijgen, ...'
SearchResult result = index.Search(query, options);

// Het resultaat printen
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);
        // Gevonden termen afdrukken
        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]);
            }
        }
    }
}

Conclusie

Tot slot heb je geleerd hoe je de specifieke woorden en ook hun synoniemen in meerdere documenten in de opgegeven map kunt vinden met behulp van C#. U kunt proberen uw eigen .NET-toepassing te ontwikkelen om elk woord en de synoniemen ervan in meerdere bestanden te doorzoeken.

Lees meer over de .NET Search Automation API in de documentatie. Om de functies te ervaren, kun je voorbeelden bekijken in de GitHub-repository. Bereik ons voor elke vraag via het forum.

Zie ook