Wyszukiwanie rozmyte przy użyciu języka C# .NET
  • Nie wiesz, jaki kolor lub pisownia koloru została użyta w dokumencie.
  • Wyszukiwanie „John”, ale mogło zostać zapisane jako „Jon” lub może „Jhon”.
  • Lokalizowanie „USA”, gdy użytkownik wprowadzi „USA”.
  • Słowo lub fraza, której szukasz, może zawierać „błąd”, och, to znowu „błąd”.

Nadchodzi wyszukiwanie rozmyte. Wyszukiwanie rozmyte umożliwia znajdowanie w danych dopasowań przybliżonych, a nie dokładnych, co zapewnia elastyczność w zakresie zapytań. Jest to szczególnie przydatne w scenariuszach, w których występują literówki, błędy ortograficzne lub różnice w danych. W tym artykule pokazano, jak programowo przeprowadzić wyszukiwanie rozmyte w wielu dokumentach w folderach przy użyciu języka C#.

Biblioteka wyszukiwania rozmytego w języku C#

W przypadku wyszukiwania rozmytego użyjemy interfejsu API GroupDocs.Search for .NET. Pozwala to na pewien stopień tolerancji w pisowni, dzięki czemu skutecznie dostosowuje się do regionalnych różnic językowych, takich jak różnice między brytyjskim i amerykańskim angielskim.

Ta biblioteka umożliwia nam programowe wyszukiwanie tekstu w szerokiej gamie formatów plików, takich jak dokumenty Word (DOC, DOCX), arkusze kalkulacyjne (XLS, XLSX), prezentacje (PPT, PPTX), pliki PDF, znaczniki (HTML, XML), Markdown (MD), książki elektroniczne (EPUB, CHM, FB2), wiadomości e-mail (MSG, EML), dokumenty OneNote i archiwa ZIP.

Aby dowiedzieć się, z jakimi typami plików możesz pracować, zapoznaj się z dokumentacją.

Możesz pobrać biblioteki DLL lub instalator MSI z sekcji pobierania lub dodać interfejs API do swojego programu .NET za pomocą NuGet.

Przeprowadźmy wyszukiwanie rozmyte w plikach przy użyciu języka C#

Wykonaj poniższe kroki, aby przeprowadzić wyszukiwanie rozmyte w wielu plikach o różnych formatach w folderach przy użyciu języka C#:

  • Utwórz Indeks, podając ścieżkę do folderu.
  • Dodaj ścieżkę folderu nadrzędnego dla katalogu wyszukiwania do utworzonego indeksu.
  • Zdefiniuj zapytanie wyszukiwania.
  • Aktywuj wyszukiwanie rozmyte, włączając tę opcję.
  • Ustaw poziom podobieństwa w algorytmie rozmytym zgodnie z wymaganiami.
  • Wykonaj wyszukiwanie za pomocą metody wyszukiwania, aby uzyskać wyniki wyszukiwania.
  • Teraz możesz iterować po SearchResults, aby utworzyć lub wydrukować wynik, jak chcesz.

Wyszukiwanie rozmyte w poniższym kodzie C# znajduje przybliżone dopasowania danego zapytania we wszystkich plikach we wszystkich podfolderach z 20% tolerancją błędów ortograficznych.

// Rozmyte wyszukiwanie wielu plików w wielu folderach przy użyciu języka C#

// Utworzenie folderu indeksu i dodanie do niego folderu dokumentu
Index index = new Index("indexing-folder-path");
index.Add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.FuzzySearch.Enabled = true; // Enabling the fuzzy search
options.FuzzySearch.FuzzyAlgorithm = new SimilarityLevel(0.8);

string query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.Search(query, options);

Tutaj poziom podobieństwa jest ustawiony na 0,8, tj. 80% dopasowania, co odpowiada 20% tolerancji błędu. Możesz dostosować poziom tolerancji, poprawiając poziom podobieństwa w kodzie.

Poniżej znajdują się wyniki wyszukiwania rozmytego, które można uzyskać z powyższego kodu. Jest to dość proste, jednakże kod wydruku dostępny jest również w dalszej części tego artykułu.

Query: nulla
 Documents: 2
 Occurrences: 135

     Document: Lorem ipsum.docx
     Occurrences: 132
         Field: content
         Occurrences: 132
             nulla               98
             nullam              34

     Document: EnglishText.txt
     Occurrences: 3
         Field: content
         Occurrences: 3
             dull                1
             full                1
             fully               1

Drukowanie wyników wyszukiwania

Poniższy kod C# udostępnia dwa sposoby prezentowania wyników wyszukiwania.

  • Podświetl wszystkie przybliżone dopasowania.
  • Wydrukuj wyniki w czytelnym i możliwym do analizy formacie
// Zaznacz i wydrukuj wyniki wyszukiwania dla wszystkich dokumentów przy użyciu języka C#
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, indexFolder + "/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter); 
    index.Highlight(document, highlighter);

    Console.WriteLine("\tDocument: " + document.DocumentInfo.FilePath);
    Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\t\tField: " + field.FieldName);
        Console.WriteLine("\t\tOccurrences: " + document.OccurrenceCount);
        // Drukuję znalezione terminy
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
    }
    Console.WriteLine("===========================================");
}

Uzyskanie bezpłatnej licencji lub bezpłatnej wersji próbnej

Darmowa licencja

Uzyskaj [licencję tymczasową] za darmo, aby móc przeglądać tę bibliotekę bez ograniczeń.

Bezpłatny okres próbny

Możesz pobrać bezpłatną wersję próbną z sekcji pobierania.

Interfejs API .NET do wyszukiwania w plikach i folderach

Wniosek

W tym artykule przyjrzeliśmy się programowemu podejściu C# do magii wyszukiwania rozmytego, aby znaleźć wszystkie przybliżone pasujące słowa, ale z pewnym stopniem tolerancji błędów. Ta funkcja sprawia, że wyszukiwanie rozmyte skutecznie uwzględnia regionalne różnice językowe, takie jak różnice między brytyjskim i amerykańskim angielskim, literówki w tekście, odmiany nazw i dopasowanie fonetyczne.

Aby uzyskać szczegółowe informacje na temat interfejsu API, czytelnikom zaleca się zapoznanie z dokumentacją.

Wszelkie pytania lub dodatkowe dyskusje można kierować na forum.


Zobacz też