Dans un autre article, nous avons vu que sont les synonymes, et comment obtenir tous les synonymes de n’importe quel mot. Qu’en est-il de trouver ces synonymes dans différents documents ? Cet article vous expliquera comment rechercher les synonymes d’une requête spécifique (mot) dans plusieurs fichiers à l’aide de C#.

Les sujets suivants seront abordés ci-dessous :

API .NET pour la recherche de synonymes dans plusieurs fichiers

GroupDocs.Search fournit l’API .NET qui permet de rechercher n’importe quel mot et ses synonymes dans plusieurs fichiers du dossier spécifié. J’utiliserai cette API dans les exemples présentés de cet article. Il vous permet de rechercher parmi une grande liste de formats de documents. En plus de rechercher les synonymes, GroupDocs.Search pour .NET prend également en charge d’autres techniques de recherche, notamment :

  • Recherche floue
  • Recherche sensible à la casse
  • Recherche d’homophones
  • Recherche d’expressions régulières
  • Recherche par joker

Vous pouvez télécharger le programme d’installation DLLs ou MSI à partir de la section téléchargements ou installer l’API dans votre application .NET via NuGet.

PM> Install-Package GroupDocs.Search

Trouver des synonymes dans plusieurs fichiers à l’aide de C#

Les étapes montrent comment rechercher des synonymes (mots ayant des significations similaires) dans les fichiers d’un dossier à l’aide de C#.

  • Définissez la requête de recherche, le dossier d’index et le dossier du document.
  • Créer un index avec un dossier d’index défini à l’aide de la classe Index.
  • Ajouter le dossier du document à l’index.
  • Créez les SearchOptions et définissez UseSynonymSearch sur true.
  • Appelez la méthode Search de la classe Index et transmettez les options de requête et de recherche.
  • Pour imprimer le résumé, utilisez les propriétés du SearchResult récupéré.

Le code source montre comment trouver tous les synonymes dans tous les fichiers d’un dossier à l’aide de C#

// Rechercher des synonymes dans plusieurs fichiers et dossiers à l'aide de C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Création d'un index dans le dossier spécifié
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Création d'un objet d'options de recherche
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Rechercher le mot "faire"
// En plus du mot 'make', les synonymes "do, cause, get, ..." seront également recherchés
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

Les étapes suivantes impriment les résultats en détail après avoir obtenu tous les synonymes et leur nombre d’occurrences dans chaque document.

  • Parcourez les résultats de recherche qui sont récupérés à l’aide du code ci-dessus.
  • Obtenez chaque FoundDocument en utilisant la méthode GetFoundDocument.
  • Imprimer les propriétés respectives de chaque FoundDocument.
  • Parcourez les FoundFields dans chaque FoundDocument pour obtenir Found Document Field.
  • À partir de chaque FoundDocumentField, vous pouvez obtenir ses termes et ses occurrences dans chaque document.

Le code source suivant imprime les résultats de la recherche de synonymes avec le nombre d’occurrences de chaque terme recherché à l’aide de C#.

// Impression des résultats de la recherche de synonymes en 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);
        // Impression des termes trouvés
        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

Synonymes de recherche et résultats d’impression à l’aide de C# - Code complet

Voici le code source complet qui trouve d’abord tous les synonymes en fonction de la requête fournie, puis imprime toutes les occurrences de tous les synonymes dans chaque document de ce dossier à l’aide de C#.

// Rechercher des synonymes dans plusieurs fichiers et dossiers et imprimer les résultats à l'aide de C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Création d'un index dans le dossier spécifié
Index index = new Index(indexFolder);
// Indexation de documents à partir du dossier spécifié
index.Add(documentsFolder);

// Création d'un objet d'options de recherche
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Rechercher le mot "faire"
// En plus du mot 'make', les mots "do, cause, get, ..." seront également recherchés
SearchResult result = index.Search(query, options);

// Impression du résultat
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);
        // Impression des termes trouvés
        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]);
            }
        }
    }
}

Conclusion

Pour conclure, vous avez appris à trouver les mots spécifiques ainsi que leurs synonymes dans plusieurs documents du dossier spécifié à l’aide de C#. Vous pouvez essayer de développer votre propre application .NET pour rechercher n’importe quel mot et ses synonymes dans plusieurs fichiers.

En savoir plus sur l’API .NET Search Automation dans la documentation. Pour découvrir les fonctionnalités, vous pouvez consulter des exemples sur le référentiel GitHub. Contactez-nous pour toute question via le forum.

Voir également