جستجوی فازی به شما کمک می کند تا محتوایی را پیدا کنید که در داده های خود به نوعی مشابه است، نه دقیقاً یکسان. زمانی که اشتباهات تایپی، غلط املایی یا تغییراتی در داده ها وجود داشته باشد، بسیار مفید است. این مقاله در مورد روش Java برای انجام جستجوی فازی برای یافتن فایلهایی است که در اطراف پوشهها پراکنده شدهاند.
در اینجا چند مثال برای تشریح محتوای نمونه جستجوی فازی آورده شده است:
- ممکن است مطمئن نباشید که سند از املای “رنگ” یا “رنگ” استفاده می کند.
- هنگامی که به دنبال “جان” هستید، در واقع می تواند به صورت “Jon” یا شاید “Jhon” نوشته شود.
- تلاش برای یافتن “USA” حتی اگر شخصی “USA” را تایپ کند
- اگر یک “اشتباه” بکنید، اوه صبر کنید، در واقع یک “اشتباه” است.
راه حل یافتن چنین محتوایی، جستجوی فازی است.
کتابخانه جستجوی فازی جاوا
برای انجام جستجوهای مبهم در جاوا، از GroupDocs.Search for Java API استفاده می کنیم. API توانایی زیادی برای نشان دادن انعطاف پذیری دارد و درجه قابل تنظیمی از تحمل خطا را فراهم می کند. این ویژگی هنگام برخورد با تغییرات زبانی مانند انگلیسی بریتانیایی و آمریکایی و اشتباهات تایپی مطلوب است.
با استفاده از این کتابخانه، جستجوی فازی را می توان در قالب های مختلف فایل انجام داد. پشتیبانی فقط به اسناد Word (DOC، DOCX)، صفحات گسترده (XLS، XLSX)، ارائهها (PPT، PPTX)، فایلهای PDF، زبانهای نشانهگذاری (HTML، XML)، Markdown (MD)، کتابهای الکترونیکی (EPUB، CHM, FB2)، محدود نمیشود. ، ایمیل ها (MSG، EML)، یادداشت های OneNote، و حتی آرشیو ZIP.
اگر میخواهید همه انواع فایلها را بدانید که این جادو میتواند از پس آن برآید، فقط به مستندات نگاه کنید.
برای شروع، میتوانید API را از بخش دانلود بگیرید، یا فقط آخرین مخزن و پیکربندیهای وابستگی Maven را مستقیماً به برنامههای Java خود اضافه کنید.
بیایید با استفاده از Java در فایل ها جستجوی فازی داشته باشیم
این مراحل را برای انجام یک جستجوی فازی در چندین فایل با فرمت های مختلف فایل در پوشه ها با استفاده از Java دنبال کنید:
- با ایجاد یک Index با استفاده از پوشه ای که فایل های شما در آن قرار دارند شروع کنید.
- مسیر پوشه اصلی را به فهرست اضافه کنید.
- عبارت جستجویی را که می خواهید جستجو کنید ارائه دهید.
- جادوی Fuzzy Search را روشن کنید تا اشتباهات کوچک را درک کند.
- سطح تشابه را در الگوریتم فازی تنظیم کنید.
- جستجو را با استفاده از روش جستجو برای به دست آوردن نتایج جستجو انجام دهید.
- اکنون، می توانید SearchResults را طی کنید تا خروجی را به دلخواه ایجاد یا چاپ کنید.
در کد Java زیر، برنامه به دنبال محتوای مشابهی است که در همه فایلها و زیرپوشهها درخواست کردهاید. تحمل غلط املایی را دارد، تا 25 درصد خطا. اگر به کد نگاه کنید، خواهید دید که سطح شباهت روی 0.75 تنظیم شده است که معادل 75٪ تطابق است. اگر می خواهید جستجو را دقیق تنظیم کنید، فقط سطح شباهت را در کد تغییر دهید.
// فازی با استفاده از Java چندین فایل را در چند پوشه جستجو کنید
// ایجاد یک پوشه فهرست و اضافه کردن پوشه سند به آن
Index index = new Index("path/indexing-folder-path");
index.add("path/parent-folder");
SearchOptions options = new SearchOptions();
options.getFuzzySearch().setEnabled(true); // Enabling the fuzzy search
options.getFuzzySearch().setFuzzyAlgorithm(new SimilarityLevel(0.75));
String query = "nulla"; // search approximate matches of the provided query
SearchResult result = index.search(query, options);
پس از اجرای کد، فهرستی از نتایج جستجوی فازی واکشی شده را دریافت خواهید کرد. اگر می خواهید نحوه چاپ نتایج جستجو را ببینید، به خواندن این مقاله ادامه دهید.
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
چاپ نتایج جستجو
کد Java زیر دو راه برای نمایش نتایج جستجوی شما ارائه می دهد.
- تمام موارد تقریبی را برجسته کنید.
- نتایج را در قالبی خوانا و قابل تجزیه چاپ کنید
// نتایج جستجو را برای همه اسناد با استفاده از Java برجسته و چاپ کنید
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
FoundDocument document = result.getFoundDocument(i);
OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "path/Highlight" + i + ".html");
Highlighter highlighter = new DocumentHighlighter(outputAdapter);
index.highlight(document, highlighter);
System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
System.out.println("\tOccurrences: " + document.getOccurrenceCount());
for (FoundDocumentField field : document.getFoundFields()) {
System.out.println("\t\tField: " + field.getFieldName());
System.out.println("\t\tOccurrences: " + field.getOccurrenceCount());
// چاپ اصطلاحات یافت شده
if (field.getTerms() != null) {
for (int k = 0; k < field.getTerms().length; k++) {
System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
}
}
}
}
دریافت مجوز رایگان یا آزمایشی رایگان
مجوز رایگان
برای کاوش در این کتابخانه بدون محدودیت، مجوز موقت را به صورت رایگان دریافت کنید.
امتحان رایگان
می توانید از بخش دانلودها آزمایشی رایگان را دانلود کنید.
نتیجه
در این مقاله، روش برنامهنویسی Java برای انجام جستجوی فازی را بررسی کردیم. این کمک می کند تا کلمات تطبیقی تقریبی را پیدا کنید که به نوعی مشابه هستند، حتی اگر اشتباهات کوچکی وجود داشته باشد. این ویژگی برای مقابله با تفاوت های بین انگلیسی بریتانیایی و آمریکایی، اشتباهات تایپی، تغییر نام و صداهای مشابه در کلمات مفید است.
برای اطلاعات بیشتر در مورد API، اسناد را بررسی کنید.
اگر سؤالی دارید یا می خواهید بیشتر بحث کنید، به فروم بروید.