- شما نمی دانید چه رنگ یا املای رنگی در سند استفاده شده است.
- در حال جستجو برای “جان”، اما ممکن است به صورت “Jon” یا شاید “Jhon” نوشته شده باشد.
- وقتی کاربر «USA» را وارد میکند، «USA» را تعیین میکند.
- کلمه یا عبارتی که به دنبال آن هستید می تواند یک “اشتباه” داشته باشد، اوه دوباره یک “اشتباه” است.
در اینجا جستجوی فازی می آید. جستجوی فازی به شما امکان می دهد مطابقت های تقریبی را به جای تطابق دقیق در داده ها پیدا کنید، که امکان انعطاف پذیری در عبارت های جستجو را فراهم می کند. این به ویژه در سناریوهایی با غلط املایی، غلط املایی یا تغییرات در داده ها مفید است. این مقاله نشان میدهد که چگونه میتوان با استفاده از C# یک جستجوی فازی را در چندین سند در پوشهها انجام داد.
کتابخانه جستجوی فازی سی شارپ
برای جستجوی فازی، از GroupDocs.Search for .NET API استفاده می کنیم. این اجازه می دهد تا درجه خاصی از تساهل در املا وجود داشته باشد، و آن را در سازگاری با تغییرات زبان منطقه ای مانند آنهایی که بین انگلیسی بریتانیایی و آمریکایی وجود دارد، موثر می کند.
این کتابخانه به ما این امکان را میدهد که به صورت برنامهنویسی متن را در طیف گستردهای از فرمتهای فایل، مانند اسناد Word (DOC، DOCX)، صفحات گسترده (XLS، XLSX)، ارائهها (PPT، PPTX)، فایلهای PDF، نشانهگذاری (HTML، XML) جستجو کنیم. Markdown (MD)، کتابهای الکترونیکی (EPUB، CHM، FB2)، پیامهای ایمیل (MSG، EML)، اسناد OneNote و بایگانیهای ZIP.
برای پیدا کردن انواع فایل هایی که می توانید با آنها کار کنید، اسناد را بررسی کنید.
میتوانید نصبکنندههای DLL یا MSI را از بخش دانلود دریافت کنید یا با استفاده از NuGet API را به برنامه داتنت خود اضافه کنید.
بیایید با استفاده از C# در فایل ها جستجوی فازی کنیم
برای انجام یک جستجوی فازی در چندین فایل با فرمت های مختلف فایل در پوشه ها با استفاده از C# این مراحل را دنبال کنید:
- با ارائه مسیر پوشه، یک Index ایجاد کنید.
- مسیر پوشه والد دایرکتوری جستجو را به فهرست ایجاد شده اضافه کنید.
- عبارت جستجو را تعریف کنید.
- با فعال کردن گزینه، جستجوی فازی را فعال کنید.
- سطح تشابه را در الگوریتم فازی در صورت نیاز تنظیم کنید.
- جستجو را با استفاده از روش جستجو برای دریافت نتایج جستجو انجام دهید.
- اکنون، میتوانید روی SearchResults تکرار کنید تا خروجی را همانطور که دوست دارید ایجاد یا چاپ کنید.
جستجوی فازی در کد C# زیر، مطابقت های تقریبی پرس و جوی داده شده را در همه فایل ها در همه پوشه های فرعی با تحمل خطای 20% در املا پیدا می کند.
// جستجوی فازی چندین فایل در چندین پوشه با استفاده از سی شارپ
// ایجاد یک پوشه فهرست و اضافه کردن پوشه سند به آن
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);
در اینجا، سطح شباهت بر روی 0.8 تنظیم شده است، یعنی 80% مطابقت که با 20% تحمل خطا مطابقت دارد. شما می توانید سطح تحمل را با تغییر سطح شباهت در کد تنظیم کنید.
در زیر نتایج جستجوی فازی وجود دارد که می توانید از کد بالا بدست آورید. بسیار ساده است، با این حال، کد چاپ نیز در ادامه این مقاله موجود است.
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
چاپ نتایج جستجو
کد C# زیر دو راه برای نمایش نتایج جستجوی شما ارائه می دهد.
- تمام موارد تقریبی را برجسته کنید.
- نتایج را در قالبی خوانا و قابل تجزیه چاپ کنید
// برجسته کردن و چاپ نتایج جستجو برای همه اسناد با استفاده از 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);
// چاپ اصطلاحات یافت شده
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("===========================================");
}
دریافت مجوز رایگان یا آزمایشی رایگان
مجوز رایگان
برای کاوش در این کتابخانه بدون محدودیت، مجوز موقت را به صورت رایگان دریافت کنید.
امتحان رایگان
می توانید از بخش دانلودها آزمایشی رایگان را دانلود کنید.
نتیجه
در این مقاله، ما به رویکرد برنامهنویسی C# برای جادوی جستجوی فازی نگاه کردیم تا همه کلمات تطبیق تقریبی را پیدا کنیم، اما با درجه خاصی از تحمل خطا. این ویژگی جستجوی فازی را در سازگاری با تغییرات زبان منطقه ای مانند تغییرات بین انگلیسی بریتانیایی و آمریکایی، اشتباهات تایپی در متن، تغییرات نام و تطابق آوایی موثر می کند.
برای جزئیات جامع در مورد API، به خوانندگان توصیه می شود به اسناد مراجعه کنند.
هر گونه سؤال یا بحث اضافی را می توان به فروم هدایت کرد.