هل تساءلت يومًا عن كيفية البحث بسلاسة عبر العديد من الملفات، أو ربما التنقل بين تعقيدات البحث داخل الملفات عبر مجلدات متعددة؟ جميع استفساراتك تجد إجاباتها هنا. تتعمق هذه المقالة في مجال مسح النص، وتعرض كيفية البحث عن نصوص أو عبارات متعددة في ملفات مختلفة منتشرة عبر مجلدات متنوعة باستخدام Java.

Java API لمسح النص عبر الملفات والمجلدات

اليوم، سنستخدم واجهة برمجة التطبيقات GroupDocs.Search for Java للبحث في نصوص متعددة داخل ملفات ذات تنسيقات ملفات مختلفة عبر المجلدات. تتيح لنا هذه المكتبة مسح النص برمجيًا ضمن مجموعة كبيرة من تنسيقات الملفات لمستندات Word وجداول البيانات والعروض التقديمية وملفات PDF وملفات التوصيف والكتب الإلكترونية ورسائل البريد الإلكتروني ومستندات One Note وأرشيفات ZIP. توفر الوثائق قائمة مفصلة بتنسيقات الملفات المدعومة.

يمكنك تنزيل ملف JAR من قسم التنزيلات أو استخدام أحدث تكوينات Maven للمستودع والتبعية داخل تطبيقات Java الخاصة بك.

البحث عن نصوص متعددة في الملفات عبر المجلدات باستخدام Java

اتبع الخطوات التالية لإجراء بحث نصي في ملفات متعددة داخل مجلدات متعددة باستخدام Java وإنشاء ملفات إخراج HTML مميزة لكل مستند تم العثور عليه.

  • قم بإنشاء كائن فهرس بمسار مجلد الفهرس المحدد.
  • قم بفهرسة مجلد المستند الأصلي باستخدام طريقة الإضافة.
  • حدد استعلام بحث بمصطلحات أو عبارات متعددة.
  • قم بتنفيذ مسح النص باستخدام طريقة البحث وقم بتخزين النتائج.
  • التكرار من خلال نتائج البحث:
    • قم بالوصول إلى كل مستند تم العثور عليه باستخدام طريقة getFoundDocument.
    • الوصول إلى أو طباعة أي معلومات ملف للمستند الذي تم العثور عليه.
    • قم بإعداد OutputAdapter للتنسيق والمسار المطلوبين.
    • قم بإنشاء تمييز للمستند.
    • قم بتمييز نتائج البحث وإخراجها إلى ملف HTML باستخدام طريقة التمييز.
// البحث عن النص في ملفات متعددة بتنسيقات ملفات مختلفة داخل مجلدات متعددة باستخدام Java

// إنشاء فهرس في المجلد المحدد
Index index = new Index("path/for/indexingFolder");

// فهرسة المستندات من المجلد المحدد
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
}

يمكّنك الكود أعلاه بشكل جماعي من البحث عن نصوص محددة ضمن ملفات متعددة وإنشاء ملفات إخراج HTML مميزة لكل مستند تم العثور عليه.

نتائج البحث عن النص المميزة بتنسيق HTML

طباعة نتائج البحث عن النص

من نتيجة استعلام البحث، يمكنك استخراج المزيد من المعلومات حول المستندات التي تم العثور عليها.

// طباعة نتائج البحث ===

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // طباعة نتائج البحث ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // الطباعة وجدت الشروط
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // طباعة العبارات التي تم العثور عليها
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }
}

سيكون ما يلي هو ناتج طباعة نتائج البحث أعلاه التي تم الحصول عليها من ملفات DOCX وPDF وTXT:

File Name: Lorem ipsum.docx
Occurrences: 101
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 100
		non - 94
		lorem ipsum  - 6
====================================
File Name: Lorem ipsum.pdf
Occurrences: 60
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 59
		non - 53
		lorem ipsum  - 6
====================================
File Name: English.txt
Occurrences: 39
	Field: content
	Occurrences: 39
		water - 39

رمز كامل

إليك كود Java الكامل الذي يبحث بشكل جماعي في السلاسل النصية والعبارات في ملفات ومجلدات متعددة:

// البحث عن النص في ملفات متعددة بتنسيقات ملفات مختلفة داخل مجلدات متعددة باستخدام Java

// إنشاء فهرس في المجلد المحدد
Index index = new Index("path/for/indexingFolder");

// فهرسة المستندات من المجلد المحدد
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
  
    // طباعة نتائج البحث =========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // الطباعة وجدت الشروط
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // طباعة العبارات التي تم العثور عليها
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }  
}

الحصول على ترخيص مجاني أو نسخة تجريبية مجانية

رخصة مجانية

لاستكشاف هذه المكتبة دون قيود، يمكنك الحصول على ترخيص مؤقت مجانًا.

تجربة مجانية

قم بتنزيل النسخة التجريبية المجانية من قسم التنزيلات.

Java API للبحث داخل الملفات والمجلدات

خاتمة

في هذه المقالة، اكتشفنا للتو مسح النص للبحث في نصوص متعددة في ملفات متعددة عبر مجلدات متعددة باستخدام Java. بدءًا من استعلام البحث، بحثنا في ملفات ومجلدات متعددة وقمنا بتسليط الضوء على النتائج التي تم العثور عليها في ملفات HTML المعنية.

للحصول على معلومات تفصيلية عن واجهة برمجة التطبيقات (API)، ننصح القراء بمراجعة الوثائق. يمكن توجيه الأسئلة والمناقشات الإضافية إلى المنتدى المتوفر.

أنظر أيضا