استيعاب البيانات

استكشِف المزيد مما يقدِّمه دليل RAG Cookbook للحصول على فهم أعمق لحلول التوليد المعزز بالاسترجاع (RAG) المتاحة اليوم.

مساحة عمل جديدة معاد تلوينها تعتمد على مساحة Watson for Customer Care كأساس لها.
لمحة عامة

الاستيعاب هو عملية تحليل المعلومات من المستندات المصدر بحيث يمكن تضمينها في مساحة بحث لاسترجاعها لاحقًا. رغم أن هذه العملية تكون مباشرةً مع النصوص العادية، فإن التعقيدات تظهر عندما تكون المستندات المصدر بصيغ غير نصية، مثل: مثل مستندات Microsoft Word أو ملفات PDF، وعندما تتضمن تنسيقات معقدة مثل الرؤوس والتذييلات المتكررة، أو نصًا في أعمدة متعددة، أو جداول.

يتضمن هذا القسم نصائح وتقنيات ومسرِّعات وإشارات إلى أصول تساعد في التغلب على هذه التحديات.

من أين تبدأ؟

 

إذا كنت مستخدمًا غير تقني وكانت مستنداتك بسيطة نسبيًا وتحتاج إلى حل دون كود، فاستخدِم Watsonx Orchestrate.

 

إذا كنت مستخدمًا تقنيًا وكانت مستنداتك بسيطة نسبيًا ولديك وصول إلى Watson Discovery، فابدأ من هناك. يوفر Watson Discovery واجهة مستخدم جيدة يمكن استخدامها مع حاجة محدودة إلى البرمجة. بالنسبة إلى المستندات المعقدة، يمكنك استخدام Watson Discovery لإضافة تعليقات توضيحية واستخراج أجزاء محددة من مستنداتك، سواء لاستخدامها في مسار المعالجة الخلفي للتوليد المعزز بالاسترجاع (RAG) أم في الواجهة الأمامية مع تمييز النصوص عبر تحديد الموضع الدقيق للفقرة داخل المستندات.

 

ومع ذلك، لدى Watson Discovery بعض القيود. إذا كانت مستنداتك أكبر من 50 ميجابايت، فلن تتمكن من تحميلها إلى Watson Discovery. إذا كان المستند معقدًا جدًا (مثل احتوائه على جداول متداخلة أو تنسيقات جداول غير منتظمة)، فقد لا يتمكن Watson Discovery من التقاط البنية الكاملة للمستند. في مثل هذه الحالات، قد تحتاج إلى تنفيذ مسار مخصص لاستيعاب البيانات باستخدام مكتبات مفتوحة المصدر.

 

فيما يتعلق بالمكتبات مفتوحة المصدر، يتشابه LangChain وLlamaIndex بدرجة كبيرة من حيث قدرات استيعاب البيانات. ومع ذلك، يُعَد LangChain أسهل استخدامًا من LlamaIndex من حيث التوثيق والتكامل مع قواعد بيانات المتجهات والتطبيقات الأخرى. يوفر كلٌّ من LangChain وLlamaIndex وظائف مساعدة لتحويل كائن Document من أحدهما إلى الآخر، ما يُتيح التبديل بينهما في أي مرحلة من مسار المعالجة.

استيعاب المستندات ذات الجداول المعقدة

تتضمن الملاحظات التالية عددًا من الدروس المستفادة حول استيعاب المستندات التي تحتوي على جداول معقدة، إضافةً إلى أساليب مختلفة تم اختبارها خلال أحد المشروعات. يُرجى ملاحظة أن بعض الملاحظات قد تختلف من مشروع إلى آخر، إلا إن معظم الاستنتاجات تكون متشابهة في المشروعات التي تتضمن مستندات تحتوي على جداول متداخلة ومعقدة.

Watson Discovery

لا يدعم Watson Discovery المستندات التي يزيد حجمها عن 50 ميجابايت. في الحالات التي يكون فيها الحجم الكبير ناتجًا عن كون المستندات الأصلية بصيغة Word، يجب تحويلها إلى PDF لاستخدام Watson Discovery. ومع ذلك، عند استخدام هذا الأسلوب قد لا يتمكن Watson Discovery أحيانًا من التقاط تنسيقات الجداول بشكل صحيح، خاصةً في حالات الجداول المعقدة أو المتداخلة.

لإجراء عملية الاستيعاب باستخدام Watson Discovery، يمكن اختبار نهجين مختلفين: نموذج مدرَّب مسبقًا، ونموذج مستخدم يتم تدريبه عبر إضافة تعليقات توضيحية يدويًا لعدد من الصفحات من خلال Smart Document Understanding في Discovery. يناقش ما يلي الدروس المستفادة من هذين الأسلوبين في أحد المشروعات التي تضمَّنت جداول متداخلة ومعقدة.

  • النموذج المدرَّب مسبقًا
    • الإيجابيات: 
      • كان مُخرج HTML من Discovery قادرًا في كثير من الأحيان على التقاط بنية الجداول بشكل أفضل من نموذج مدرَّب بواسطة المستخدم (SDU).
    • السلبيات: 
      • ومع ذلك، ظل Discovery يواجه صعوبةً في اكتشاف الجداول المتداخلة. في بعض الحالات كان يكتشف الجدول الأعمق فقط كجدول، بينما يلتقط الجداول الخارجية كنص، ما يؤدي إلى فقدان بنية البيانات.
    • عند استخدام Watson Discovery، قد يؤدي استخدام النص الخام إلى نتائج أفضل مقارنةً باستخدام مُخرجات HTML. 

  • نموذج محدَّد من قِبل المستخدم
    • الإيجابيات: 
      • من السهل إضافة التعليقات التوضيحية، ومناسب للمستندات البسيطة التي قد تريد تصفية أقسام محددة منها لاحقًا.
    • العيوب:
      • لم يتمكن من اكتشاف بنية الجداول المتداخلة حتى عند إضافة تعليقات توضيحية لجميع الجداول داخل الجداول.
      • حتى في حالة الجداول البسيطة، واجه صعوبةً في اكتشافها في مستندات جديدة، وذلك حتى بعد إضافة تعليقات توضيحية يدويًا لـ 20 صفحة من أكثر من 7 مستندات.

على الرغم من أن نتائج Watson Discovery لم تكن بنفس دقة بعض المكتبات المخصصة المذكورة أدناه عند التعامل مع الجداول المعقدة والمتداخلة، فإن النتائج تضمَّنت قدرًا كبيرًا من البيانات الوصفية مثل أرقام الصفحات وإحداثيات النصوص، وهو ما يساعد على عرض التمييزات في واجهة المستخدم. يمكن أن تكون هذه البيانات الوصفية مفيدة جدًا لإضافة عوامل تصفية إضافية أثناء الاسترجاع، أو حتى لتقسيم المستندات استنادًا إلى أقسام محددة في HTML.

PyPDFLoader مقابل PyMuPDF

تُعَد مكتبة PyMuPDF أسرع بكثير وتحقِّق نتائج أكثر دقة، خاصةً عند التعامل مع بيانات كبيرة الحجم. عند استخدام الدالتين التاليتين على مجموعة بيانات بحجم 50.6 ميجابايت، استغرقت PyMuPDF 0.131 ثانية مقابل 0.366 ثانية لـ PypdfLoader من LangChain. لذلك، عند التعامل مع ملفات كبيرة وإذا لم تكن بحاجة إلى استخراج أقسام المستند كأجزاء منفصلة، يُنصح باستخدام مكتبة PyMuPDF.

def pdf_to_text(path: str,
                        start_page: int = 1,
                        end_page: Optional[int | None] = None) -> (list[str], list[str], list[dict]):
    """
    Converts PDF to plain text.

    Params:
        path (str): Path to the PDF file.
        start_page (int): Page to start getting text from.
        end_page (int): Last page to get text from.
    """
    logger.debug("Processing PDF %s".format(path))

    from langchain_community.document_loaders import PyPDFLoader

    loader = PyPDFLoader(path)
    pages = loader.load()
    total_pages = len(pages)
    logger.debug(f'Total pages: {total_pages}')
    _ids = []
    _metadata = []
    _file_name = Path(path).name

    if end_page is None:
        end_page = len(pages)

    _text_list = []
    for index in range(start_page - 1, end_page):
        text = pages[index].page_content
        text = text.replace('\n', ' ')
        text = re.sub(r'\s+', ' ', text)
        _text_list.append(text)
        _ids.append(f'page_{index + 1}')
        _metadata.append({
            "id": index + 1,
            "file_name": _file_name,
            "page": f'page {index + 1}'
        })

    return _text_list, _ids, _metadata

def large_pdf_to_text(path: str,
                        start_page: int = 1,
                        end_page: Optional[int | None] = None,
                        remove_string_list=None) -> (list[str], list[str], list[dict]):
    """
        Converts PDF to plain text using PyMuPDF, impressive execution speed, making it suitable for
        large-scale PDF processing. While it does not offer dedicated table extraction features, it can
        still be used to analyze the PDF structure and extract tabular data with additional processing
        steps if needed.

        50.6MB -> 0.131 seconds (PyMuPDF) vs. 0.366 seconds (pypdf)

        Params:
            file_stream (stream): Stream to the PDF file.
            path (str): Path to the PDF
            start_page (int): Page to start getting text from.
            end_page (int): Last page to get text from.
            remove_string_list (list[str]): Remove string list.
        """
    logger.debug("Processing PDF %s".format(path))
    if remove_string_list is None:
        remove_string_list = []

    import fitz

    # pdf_reader = fitz.open(stream = file_stream, filetype = "pdf")
    pdf_reader = fitz.open(path)
    if end_page is None:
        end_page = pdf_reader.page_count

    _text_list = []
    _ids = []
    _metadata = []
    _file_name = Path(path).name
    for index in range(start_page - 1, end_page):
        text = pdf_reader[index].get_text("text")
        text = text.replace('\n', ' ')
        text = re.sub(r'\s+', ' ', text)
        for remove_string in remove_string_list:
            re_compile = re.compile(remove_string)
            text = re_compile.sub('', text)
            _metadata.append({
                "id": index + 1,
                "file_name": _file_name,
                "page": f'page {index + 1}'
            })
        _ids.append(f'page_{index + 1}')
        _text_list.append(text)

    return _text_list, _ids, _metadata

أداة تحميل ملفات PDF غير المنظمة لاستخدامها في إدخال HTML UnstructuredPDFLoader from LangChain.

  • الإيجابيات: 
    • يتضمن قدرًا كبيرًا من البيانات الوصفية مثل أرقام الصفحات وإحداثيات x و y للنصوص، على غرار Watson Discovery، وهو ما قد يكون مفيدًا لإظهار التمييزات لاحقًا.
  • السلبيات: 
    • غير قادر على التقاط العديد من الجداول المتداخلة أو المعقدة بشكل صحيح. كما أن هذا النهج يتطلب تحويل كل ملف من صيغة docx الأصلية إلى PDF.

أداة تحميل ملفات Word غير المنظمة لاستخدامها في إدخال HTML UnstructuredWordDocumentLoader from LangChain.

  • الإيجابيات: 
    • أدى استخدام المستندات إلى التقاط الجداول بشكل أفضل، ويساعد على توفير سياق أوضح للنماذج اللغوية الكبيرة لتوليد الإجابات.
  • السلبيات: 
    • لم يتم التقاط البيانات الوصفية مثل أرقام الصفحات بشكل صحيح حتى بعد إضافة فواصل الصفحات، مقارنةً بأداة تحميل ملفات PDF.

ملخص جدول HTML

في محاولة للحفاظ على بنية الجداول، نعمل على إدخال عناصر الجداول من HTML المستخرج (باستخدام مكتبة Unstructured) إلى أحد النماذج اللغوية الكبيرة (يُعَد Mixtral خيارًا مناسبًا للجداول الطويلة نظرًا لحجم السياق الذي يدعمه)، ثم يمكن إنشاء مطالبة لتلخيص الجداول أو لاستخدام "التعلم بأمثلة قليلة" لتحويل الجداول إلى صيغة نعتقد أنها قد تكون أكثر قابلية للفهم من قِبل النماذج اللغوية الكبيرة.

  • الإيجابيات: 
    • سيكون النص الناتج أسهل في تقسيمه إلى مقاطع وإدخاله، مع الحفاظ على بنية الجداول.
  • السلبيات: 
    • بالنسبة إلى الجداول الكبيرة متعددة الصفحات، قد يؤدي استخدام مطالبة التلخيص إلى فقدان بعض المعلومات؛ لذلك قد يحقق استخدام "التعلم بأمثلة قليلة" لتحويل الجداول بدلًا من تلخيصها نتائج أفضل.

تم أيضًا اختبار مكتبات أخرى لقراءة الجداول مثل Camelot وTabula، إلا إنها لم تكن بنفس دقة مكتبة Unstructured عند التعامل مع الجداول المعقدة، وبما أنها تكتشف الجداول فقط داخل المستند فقد تكون هناك حاجة إلى مزيد من المعالجة المسبقة لإنشاء مقاطع ذات معنى لتمريرها إلى النماذج اللغوية الكبيرة.

خلاصة القول، بينما يوفر Watson Discovery طريقة سهلة وسريعة لاستيعاب المستندات والتقاط قدر كبير من البيانات الوصفية الإضافية التي قد تكون مفيدة في بناء واجهة المستخدم (مثل تمييز المقاطع على سبيل المثال)، فإن مكتبة Unstructured (التي تتوفر لها Wrappers في كل من LlamaIndex وLangChain) تستطيع التقاط الجداول المعقدة داخل المستندات بدقة أكبر مقارنةً بـ Discovery. لذلك يمكن أن يكون الجمع بين النهجين مفيدًا للمشروعات التي تتضمن جداول معقدة داخل مستنداتها.

أدوات IBM

الاستيعاب مع Watsonx Orchestrate

قد تكون عملية الاستيعاب دون واجهة مستخدم رسومية صعبة على مستخدمي الأعمال؛ لأنها تتطلب خبرة ومعرفة تقنية. يقضي Watsonx Orchestrate على هذا التحدي لدى مستخدمي الأعمال من خلال تطبيق واجهة مستخدم بالسحب والإفلات (UI). من خلال النقر على زر التحميل الأزرق، نفعِّل إمكانية تحميل المستندات وتخزينها مباشرةً في watsonx Discovery (المعروف أيضًا باسم Elasticsearch).

لقطة شاشة لبوابة السحب والوضع في watsonx Orchestrate.

يُتيح ذلك للمستخدم تحميل مستنداته مباشرةً إلى Elasticsearch؛ لإنشاء قاعدة معرفة مخصصة خاصة به.

لقطة شاشة لشاشة تحميل المستندات في watsonx Orchestrate.

بدلًا من إدخال المستندات مباشرةً إلى watsonx Discovery، يمكنك أيضًا اختيار الاتصال بـ Watson Discovery عبر watsonx Orchestrate. يمكنك الاطِّلاع أدناه على مزيد من التفاصيل حول كيفية إدخال البيانات عبر Watson Discovery.

Watson Discovery

إحدى الأدوات الداخلية الأخرى التي يمكن استخدامها لإدخال البيانات هي Watson Discovery. لا تُعَد Watson Discovery أداة لإدخال البيانات فقط، إذ تُتيح إدخال البيانات غير المنظمة وتوحيدها وإثراءها والبحث فيها. توضِّح الصورة أدناه العناصر والقدرات الأساسية لـ Watson Discovery.

رسم توضيحي لوظائف Watson Discovery الأساسية

كما ترى أعلاه، تتمثَّل إحدى القدرات الأساسية لـ Watson Discovery في إدخال البيانات المنظمة وغير المنظمة بصيغ مختلفة مثل JSON وHTML وPDF وWord وغيرها، إضافةً إلى Smart Document Understanding.

إذا كان Watson Discovery مهيأً في بيئتك، يمكنك إدخال المستندات بسهولة من خلال إنشاء مشروع أولًا ثم إنشاء مجموعة يمكنك فيها تحميل بياناتك من التخزين المحلي أو من موقع سحابي مثل حاوية تخزين كائنات.

بعد إنشاء المجموعة، يمكنك الانتقال إلى تبويب Manage Collections من قائمة الهامبرغر، ثم ضمن Identity Fields اختيار الطريقة التي تريد استخدامها لمعالجة المستندات.

لقطة شاشة لشاشة معالجة المستندات في Watson Discovery.

هناك ثلاثة خيارات:

  • استخراج النصوص فقط: يقتصر على استخراج النصوص فقط من المستندات.
  • النماذج المدرَّبة من قِبل المستخدم: حيث يمكنك إضافة تعليقات توضيحية لأجزاء مختلفة من مستندك باستخدام علامات مخصصة وتدريب نماذجك الخاصة استنادًا إلى الأنماط المرئية المتكررة داخل مستنداتك.
  • النماذج المدرَّبة مسبقًا: يمكنها استخراج النصوص وتحديد الجداول والقوائم والأقسام باستخدام نماذج IBM المدرَّبة مسبقًا.

قد يستغرق الأمر بعض الوقت حتى تتم معالجة جميع مستنداتك. بعد ذلك يمكنك استخدام واجهة برمجة تطبيقات Watson Discovery لقراءة بياناتك واستخدامها في الكود الخاص بك.

يوضِّح نموذج الكود أدناه كيفية استخدام واجهة برمجة التطبيقات لقراءة البيانات من مجموعتك:

from langchain.docstore.document import Document
import os
import logging
import time
from ibm_watson import DiscoveryV2
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

WD_PAGE_SIZE = 200
MAX_RETRIES = 2
def get_documents_from_wd(collection_ids=[WD_COLLECTION_ID]):
    
    print("Fetching documents from Watson Discovery")
    documents = []
    
    print("Configuring the WD client")
    authenticator = IAMAuthenticator(WD_API_KEY)
    wd_client = DiscoveryV2(
        version="2023-03-31",
        authenticator=authenticator
    )
    
    print("Setting the WD service URL")
    wd_client.set_service_url(WD_SERVICE_URL)
    
    print("Fetching documents from WD")
    page_id = 0
    retries = 0
    while True:
        try:
            print("Fetching page: " + str(page_id))
            response = wd_client.query(
                project_id=WD_PROJECT_ID,
                collection_ids=collection_ids,
                return_=["text"],
                count=WD_PAGE_SIZE,
                offset=page_id*WD_PAGE_SIZE
            ).get_result()
            if response is None or not isinstance(response, dict):
                print("No query result")
                raise ValueError("No query result")
            if "results" not in response or response["results"] is None or not isinstance(response["results"], list):
                print("No query result 2")
                raise ValueError("No query result")
            results = response["results"]
            if len(results) == 0:
                print("No more results")
                break
            print("Fetched " + str(len(results)) + " documents")
            documents.extend(list(map(lambda result: Document(page_content=result["text"][0],  
                                                              metadata= {"collection_id": WD_COLLECTION_ID, "document_id" : result['document_id']}), results)))
            page_id += 1
        except Exception as error:
            logging.error("Failed to fetch documents from WD", str(error))
            retries += 1
            time.sleep(5)
            if retries > MAX_RETRIES:
                break
            print("Retrying...")
    print("Fetched " + str(len(documents)) + " documents")
    return documents

 

الزحف على الويب في Watson Discovery

عند إنشاء مشروع في Watson Discovery يمكنك جدولة Web Crawl لجلب المعلومات من عنوان URL محدد. كل ما عليك فعله هو اختيار Web Crawl عند تحديد مصدر البيانات، ثم تحديد عنوان URL وجدول الزحف.

شاشة إعدادات زاحف الويب في Watson Discovery.
لقطة شاشة لجدولة زاحف الويب في Watson Discovery.

بعد ذلك يمكنك تنفيذ الخطوات المذكورة أعلاه لإدارة مجموعتك واستخدام واجهة برمجة التطبيقات لقراءة البيانات منها. للاطِّلاع على المزيد من التفاصيل حول كيفية إعداد Web Crawl في Watson Discovery يمكنك مشاهدة هذا الفيديو.

للمزيد من المعلومات والميزات، يمكنك الرجوع إلى صفحة مطوِّري Watson Discovery.

Deep Search

يُعَد Deep Search مجموعة أدوات مفتوحة المصدر من IBM Research لإدخال البيانات. يستفيد Deep Search من أساليب الذكاء الاصطناعي المتقدمة لجمع وتحويل وإثراء وربط مجموعات كبيرة من المستندات بشكل مستمر. يمكنك استخدامه لكل من المستندات العامة والمستندات الخاصة بصيغة PDF.

تعمل Deep Search على تحويل مستندات PDF غير المنظمة إلى ملفات JSON منظمة بدقة وسهولة. يُتيح لك ذلك أتمتة استخراج المعرفة وكذلك تحسين نماذج الأساس والنماذج اللغوية الكبيرة الخاصة بك.

يمكنك العثور على المزيد من المعلومات حول Deep Search هنا.

يمكن أن يكون Deep Search أداة داخلية جيدة لقراءة المستندات المعقدة بدلًا من مكتبة Unstructured أو غيرها من المكتبات مفتوحة المصدر. يمكنك أيضًا العثور على توثيق ممتاز في المستودع يتضمن أمثلة مختلفة على شكل Python Notebooks:

نماذج Notebooks لمكتبة Deep Search

استيعاب الجدول من ملفات PDF

يقدِّم Deep Search نتائج جيدة عند استخراج الجداول من ملفات PDF بصيغة JSON.

لأغراض الاختبار، استخدمنا مستند PDF جزئيًا من CIPP يتضمن ثلاث صفحات، تعرض كل صفحة منها بيانات في شكل جداول. تم تحقيق أفضل أداء للتوليد المعزز بالاسترجاع (RAG) في هذه الحالة باستخدام Deep Search لاستخراج الجداول بصيغة JSON، ثم تحويلها إلى HTML لاستخدامها في Watson Discovery / watsonx Discovery بدلًا من استخدام ملفات PDF مباشرة، أو تحويل PDF إلى HTML دون Deep Search، أو استخدام JSON الناتج من Deep Search فقط في Watson Discovery / watsonx Discovery. وجدنا أن Watson Discovery قد يختار في بعض الحالات إجابة غير صحيحة من خلية خطأ في الجدول ولكنه يكون أسرع، وفي الحالة نفسها يمكنه أيضًا تحديد الإجابة الدقيقة داخل شبكة الجدول.

IBM Datacap

يُعَد IBM Datacap حلًا متكاملًا لالتقاط المستندات والبيانات، ويوفر إمكانات المسح والتصنيف والتعرُّف والتحقق وتصدير البيانات وصور المستندات بسرعة ودقة وكفاءة من حيث التكلفة. ويعمل على التقاط المستندات واستخراج البيانات ذات الصلة ودمجها في عمليات الأعمال اللاحقة.

يعمل Datacap على التقاط المستندات الورقية عبر الماسحات الضوئية أو الطابعات متعددة الوظائف أو الأجهزة المحمولة، كما يستورد المستندات الإلكترونية من أنظمة الملفات أو الفاكس أو خوادم البريد الإلكتروني. يعمل على تحسين استخراج البيانات بميزات معالجة الصور مثل تصحيح مَيلان الصورة وإزالة الخطوط واللطخات والحدود.

يستخدم Datacap تقنية التعرُّف البصري على الأحرف (OCR)، وتقنية التعرُّف الذكي على الأحرف (ICR) للكتابة اليدوية، وتقنية التعرُّف البصري على العلامات (OMR) للعلامات، إضافةً إلى قراءة الرموز الشريطية لاستخراج البيانات بكفاءة.

للحصول على إرشادات تفصيلية حول التثبيت والاستخدام، راجِع وثائق IBM Datacap.

الأدوات مفتوحة المصدر

أدوات تحميل البيانات في LangChain

يدعم LangChain أنواعًا مختلفة من أدوات تحميل المستندات التي تعمل على تحميل البيانات من مصدر ما على هيئة كائن مستند (Document) في LangChain. كائن Document هو جزء من النص مع البيانات الوصفية المرتبطة به، ويمكن استخدامه بسهولة في تقسيم المحتوى والاسترجاع لاحقًا في مسار المعالجة.

يدعم LangChain حاليًا أدوات تحميل لتحميل دليل كامل أو أنواع مختلفة من الملفات مثل:

  • CSV
  • HTML
  • JSON
  • Markdown
  • Microsoft Office
  • PDF

يمكنك استخدام أدوات التحميل هذه ببضعة أسطر فقط في Python. على سبيل المثال، لتحميل ملف PDF يمكنك استخدام الكود التالي:

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("example_data/layout-parser-paper.pdf")
pages = loader.load_and_split()

يُرجى الرجوع إلى وثائق LangChain لمعرفة كيفية استخدام أدوات التحميل هذه.

إلى جانب أدوات التحميل المذكورة في الرابط أعلاه، يمكنك العثور على أدوات تحميل إضافية قادرة على تحميل البيانات مباشرةً من تطبيقات محددة مثل البريد الإلكتروني وGithub وGoogle Drive وغيرها. يمكنك الاطِّلاع على قائمة بجميع أدوات التحميل المختلفة هنا.

في الحالات التي تحتوي فيها المستندات على هياكل وصيغ وجداول معقدة، يمكنك استخدام أدوات تحميل Unstructured في LangChain. تعتمد أدوات التحميل هذه في عملها داخليًا على مكتبة Unstructured، وهي من أفضل المكتبات للتعامل مع المستندات المعقدة (بصيغ مختلفة مثل PDF وMSWord وPower Point وغيرها)، وكذلك لتقسيم المستندات إلى عناصر مختلفة: LangChain UnstructuredLoader.

أدوات تحميل البيانات في LlamaIndex

كما هو في LangChain، يدعم LlamaIndex أيضًا أنواعًا مختلفة من أدوات التحميل. إحدى أبسط الطرق لتحميل البيانات باستخدام LlamaIndex هي استخدام SimpleDirectoryReader. يدعم SimpleDirectoryReader الأنواع التالية:

  • csv. - قِيم مفصولة بفواصل
  • docx. -‏ Microsoft Word
  • epub. - صيغة الكتاب الإلكتروني EPUB
  • hwp. - ‏Hangul Word Processor
  • ipynb. - ‏Jupyter Notebook
  • jpeg.، jpg. - صورة JPEG
  • mbox. - أرشيف البريد الإلكتروني MBOX
  • md. - ‏Markdown
  • mp3.، mp4. - الصوت والفيديو
  • pdf. - تنسيق المستندات المحمولة
  • png. - رسومات الشبكة المحمولة
  • ppt.، pptm.، pptx. - Microsoft PowerPoint

يمكنك استخدام SimpleDirectoryLoader باستخدام مقطع الكود التالي:

from llama_index.core import SimpleDirectoryReader

reader = SimpleDirectoryReader(input_dir="path/to/directory")
documents = reader.load_data()

يمكنك أيضًا إضافة امتدادات محددة لقراءة هذه الامتدادات فقط من الدليل:

SimpleDirectoryReader(
   input_dir="path/to/directory", required_exts=[".pdf", ".docx"]
)

للمزيد من التفاصيل حول كيفية استخدام أدوات التحميل في LlamaIndex، يُرجى الرجوع إلى الوثائق الخاصة بها.

وبالمثل مع Huggingface، يمكنك إنشاء أدوات تحميل مخصصة خاصة بك أو استخدام أدوات تحميل مخصصة أنشأها آخرون على llamahub.ai.

إلا إن أحد عيوب LlamaIndex مقارنةً بـ LangChain هو أن التوثيق ودعم المجتمع ليسا بالمستوى نفسه، ما قد يجعل تصحيح الأخطاء في الكود أكثر صعوبة.

Unstructured

في الحالات التي تقوم فيها بتحميل مستندات معقدة، يمكنك أيضًا استخدام مكتبة Unstructured مباشرةً. تتميز مكتبة Unstructured بكفاءة عالية في قراءة الجداول وتحليلها.

كما تدعم كل من LangChain وLlamaIndex مكتبة Unstructured من خلال wrappers، وقد يكون ذلك أسهل لاستخدامها في خطوط معالجة RAG لاحقًا؛ لأنها تُنشئ كائنات Document وتُعيدها تلقائيًا. ومع ذلك، إذا كان مشروعك يتطلب قدرًا أكبر من التخصيص وتريد استخدام مكتبة Unstructured مباشرةً، يمكنك الرجوع إلى Unstructured.

استكشِف المزيد

اطَّلع على أحدث أنماط التكنولوجيا وبنى الحلول ومنشورات البنية من IBM.

  1. انتقِل إلى IBM Architecture Center
المساهمون

Sara Golestaneh، وVicky Kuo، Fahad Bhutta، وLuke Major، وDean Sacoransky، وChris Kirby

تاريخ التحديث: 15 نوفمبر 2024