In einem anderen Artikel haben wir gesehen, was Synonyme sind und wie man alle Synonyme eines Wortes erhält. Wie sieht es mit der Suche nach diesen Synonymen in verschiedenen Dokumenten aus? In diesem Artikel erfahren Sie, wie Sie mithilfe von C# die Synonyme einer bestimmten Abfrage (Wort) in mehreren Dateien suchen.

Nachfolgend werden folgende Themen behandelt:

.NET-API zum Suchen von Synonymen in mehreren Dateien

GroupDocs.Search stellt die .NET-API bereit, die die Suche nach beliebigen Wörtern und ihren Synonymen in mehreren Dateien des angegebenen Ordners ermöglicht. Ich werde diese API in den gezeigten Beispielen dieses Artikels verwenden. Sie können damit eine große Liste von Dokumentformaten durchsuchen. Neben der Suche nach Synonymen unterstützt GroupDocs.Search für .NET auch einige weitere Suchtechniken, darunter:

  • Ungenaue Suche
  • Suche mit Berücksichtigung der Groß- und Kleinschreibung
  • Suche nach Homophonen
  • Suche nach regulären Ausdrücken
  • Wildcard-Suche

Sie können das DLLs- oder MSI-Installationsprogramm aus dem Downloadbereich herunterladen oder die API in Ihrer .NET-Anwendung über NuGet installieren.

PM> Install-Package GroupDocs.Search

Finden Sie Synonyme in mehreren Dateien mit C#

Die Schritte zeigen, wie Sie mithilfe von C# in Dateien in einem Ordner nach Synonymen (Wörtern mit ähnlichen Bedeutungen) suchen.

  • Definieren Sie die Suchanfrage, den Indexordner und den Ordner des Dokuments.
  • Erstellen Sie einen Index mit definiertem Indexordner mit der Klasse Index.
  • Fügen Sie den Ordner des Dokuments zum Index hinzu.
  • Erstellen Sie die SearchOptions und setzen Sie die UseSynonymSearch auf „true“.
  • Rufen Sie die Methode Search der Klasse Index auf und übergeben Sie die Abfrage- und Suchoptionen.
  • Um die Zusammenfassung zu drucken, verwenden Sie die Eigenschaften des abgerufenen SearchResult.

Der Quellcode zeigt, wie Sie mit C# alle Synonyme in allen Dateien eines Ordners finden

// Suchen Sie Synonyme in mehreren Dateien und Ordnern mit C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Erstellen eines Index im angegebenen Ordner
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Erstellen eines Suchoptionsobjekts
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Suchen Sie nach dem Wort „machen“
// Neben dem Wort „make“ wird auch nach den Synonymen „do, cause, get, …“ gesucht
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

Die folgenden Schritte geben die Ergebnisse im Detail aus, nachdem alle Synonyme und ihre Häufigkeit in jedem Dokument abgerufen wurden.

  • Durchlaufen Sie die Suchergebnisse, die mit dem obigen Code abgerufen werden.
  • Holen Sie sich jedes FoundDocument mit der Methode GetFoundDocument.
  • Drucken Sie die jeweiligen Eigenschaften von jedem FoundDocument.
  • Durchqueren Sie die FoundFields in jedem FoundDocument, um Found Document Field zu erhalten.
  • Von jedem FoundDocumentField können Sie seine Begriffe und die Anzahl seiner Vorkommen in jedem Dokument abrufen.

Der folgende Quellcode gibt die Ergebnisse der Synonymsuche zusammen mit der Anzahl der Vorkommen jedes gesuchten Begriffs unter Verwendung von C# aus.

// Drucken der Ergebnisse der Synonymsuche 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);
        // Gefundene Begriffe drucken
        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

Suchen Sie Synonyme und drucken Sie Ergebnisse mit C# – vollständiger Code

Hier ist der vollständige Quellcode, der zuerst alle Synonyme gemäß der bereitgestellten Abfrage findet und dann alle Vorkommen aller Synonyme in jedem Dokument innerhalb dieses Ordners mit C# druckt.

// Suchen Sie nach Synonymen in mehreren Dateien und Ordnern und drucken Sie die Ergebnisse mit C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Erstellen eines Index im angegebenen Ordner
Index index = new Index(indexFolder);
// Indizieren von Dokumenten aus dem angegebenen Ordner
index.Add(documentsFolder);

// Erstellen eines Suchoptionsobjekts
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Suchen Sie nach dem Wort „machen“
// Neben dem Wort „make“ wird auch nach den Wörtern „do, cause, get, …“ gesucht
SearchResult result = index.Search(query, options);

// Drucken des Ergebnisses
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);
        // Gefundene Begriffe drucken
        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]);
            }
        }
    }
}

Fazit

Abschließend haben Sie gelernt, wie Sie mithilfe von C# bestimmte Wörter und auch ihre Synonyme in mehreren Dokumenten innerhalb des angegebenen Ordners finden. Sie können versuchen, Ihre eigene .NET-Anwendung für die Suche nach beliebigen Wörtern und ihren Synonymen in mehreren Dateien zu entwickeln.

Weitere Informationen über die .NET-Suchautomatisierungs-API finden Sie in der Dokumentation. Um die Funktionen zu erleben, können Sie sich Beispiele im GitHub-Repository ansehen. Kontaktieren Sie uns für Fragen über das Forum.

Siehe auch