Başka bir makalede, eşanlamlıların ne olduğunu ve herhangi bir kelimenin tüm eşanlamlılarının nasıl elde edileceğini gördük. Bu eşanlamlıları farklı belgelerde bulmaya ne dersiniz? Bu makale, herhangi bir belirli sorgunun (sözcüğün) eş anlamlılarını C# kullanarak birden çok dosyada nasıl arayacağınız konusunda size rehberlik edecektir.

Aşağıdaki konular aşağıda ele alınacaktır:

Birden Çok Dosyada Eşanlamlı Arama için .NET API

GroupDocs.Search, belirtilen klasörün birden çok dosyasında herhangi bir kelimenin ve eşanlamlılarının aranmasına izin veren .NET API’sini sağlar. Bu makalenin gösterilen örneklerinde bu API’yi kullanacağım. [Geniş bir belge formatı listesi üzerinde arama yapmanızı] sağlar7. GroupDocs.Search for .NET, eşanlamlıları bulmanın yanı sıra aşağıdakileri içeren bazı arama tekniklerini de destekler:

  • Bulanık Arama
  • Büyük/Küçük Harfe Duyarlı Arama
  • Eş sesli arama
  • Normal İfade Araması
  • Joker Kartla Arama

DLL’leri veya MSI yükleyicisini indirilenler bölümünden indirebilir veya API’yi NuGet aracılığıyla .NET uygulamanıza yükleyebilirsiniz.

PM> Install-Package GroupDocs.Search

C# Kullanarak Birden Çok Dosyada Eş Anlamlı Bul

Adımlar, C# kullanarak bir klasör içindeki dosyalarda eşanlamlıların (benzer anlamlara sahip sözcükler) nasıl aranacağını gösterir.

  • Arama sorgusunu, dizin klasörünü ve belgenin klasörünü tanımlayın.
  • Index sınıfını kullanarak tanımlanmış dizin Klasörü ile dizin oluşturun.
  • Belgenin klasörünü dizine ekleyin.
  • SearchOptions oluşturun ve UseSynonymSearch öğesini true olarak ayarlayın.
  • Index sınıfının Search yöntemini çağırın ve sorgu ile arama seçeneklerini iletin.
  • Özeti yazdırmak için, alınan SearchResult özelliklerini kullanın.

Kaynak kodu, C# kullanarak bir klasörün tüm dosyalarındaki tüm eşanlamlıların nasıl bulunacağını gösterir.

// C# kullanarak birden çok dosya ve klasörde eşanlamlı arama yapın
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Belirtilen klasörde bir dizin oluşturma
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Arama seçenekleri nesnesi oluşturma
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// 'Yapmak' kelimesini arayın
// "Yap" kelimesinin yanı sıra "yapmak, neden olmak, almak, ..." eş anlamlıları da aranacaktır.
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

Aşağıdaki adımlar, tüm eşanlamlıları ve bunların her bir belgedeki tekrar sayılarını aldıktan sonra sonuçları ayrıntılı olarak yazdırır.

  • Yukarıdaki kod kullanılarak alınan arama sonuçları arasında gezinin.
  • GetFoundDocument yöntemini kullanarak her FoundDocument‘i alın.
  • Her FoundDocument’in ilgili özelliklerini yazdırın.
  • Bulunan Belge Alanı’nı elde etmek için her bir FoundDocument içindeki FoundFields alanında gezinin.
  • Her FoundDocumentField’dan, terimlerini ve her bir belgede tekrarlanma sayılarını alabilirsiniz.

Aşağıdaki kaynak kodu, eşanlamlı arama sonuçlarını C# kullanarak aranan her terimin tekrar sayısıyla birlikte yazdırır.

// Eşanlamlı Arama sonuçlarını C# ile yazdırma
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);
        // Bulunan terimleri yazdırma
        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

C# - Tam Kod Kullanarak Eş Anlamlı Arama ve Sonuçları Yazdırma

Sağlanan sorguya göre önce tüm eşanlamlıları bulan ve ardından C# kullanarak o klasördeki her belgedeki tüm eşanlamlıların tüm oluşumlarını yazdıran eksiksiz kaynak kodu buradadır.

// Birden çok dosya ve klasörde Eş Anlamlıları arayın ve C# kullanarak sonuçları yazdırın
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Belirtilen klasörde bir dizin oluşturma
Index index = new Index(indexFolder);
// Belgeleri belirtilen klasörden indeksleme
index.Add(documentsFolder);

// Arama seçenekleri nesnesi oluşturma
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// 'Yapmak' kelimesini arayın
// "Yap" kelimesinin yanı sıra "yap, neden ol, al, ..." kelimeleri de aranacaktır.
SearchResult result = index.Search(query, options);

// sonucu yazdırma
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);
        // Bulunan terimleri yazdırma
        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üm

Sonuç olarak, C# kullanarak belirtilen klasördeki birden çok belgede belirli sözcükleri ve bunların eşanlamlılarını nasıl bulacağınızı öğrendiniz. Herhangi bir kelimeyi ve eşanlamlılarını birden çok dosyada aramak için kendi .NET uygulamanızı geliştirmeyi deneyebilirsiniz.

Belgelerden .NET Search Automation API hakkında daha fazla bilgi edinin. Özellikleri deneyimlemek için GitHub deposundaki örneklere göz atabilirsiniz. Herhangi bir sorgu için forum aracılığıyla bize ulaşın.

Ayrıca bakınız