- 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.
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.