Knowledge Bases

ورود فایل‌های قدیمی به پایگاه‌های دانش مدرن

با گذار سازمان‌ها به سیستم‌های دانش مبتنی بر هوش مصنوعی، چالش فقط ساخت پایپ‌لاین RAG نیست؛ بلکه مدیریت داده‌هایی است که از قبل دارید. میلیون‌ها رکورد سازمانی در قالب‌های منسوخ مانند فایل‌های Outlook MSG، ایمیل‌های مستقل EML و مستندات Word 97-2003 قرار دارند. این فایل‌ها حاوی داده‌های ساختاریافته‌نشده و پر از نویز هستند که پایپ‌لاین‌های استاندارد ورود را مختل می‌کنند. این راهنما راهبردهایی برای پاکسازی، تجزیه و ساختاردهی این محتوای قدیمی برای فروشگاه‌های برداری مدرن را بررسی می‌کند.

چرا قالب‌های قدیمی پایپ‌لاین‌ها را مختل می‌کنند؟

پایگاه‌های داده برداری مدرن به متن تمیز و معنایی نیاز دارند. قالب‌های قدیمی سه نوع نویز را وارد می‌کنند:

  • تورم متادیتا: فایل‌های MSG حاوی هدرهای باینری و ویژگی‌های MAPI هستند که محتوای واقعی را پنهان می‌کنند.
  • پیچیدگی ساختاری: فایل‌های EML هدرها، بدنه‌های کدگذاری‌شده با base64 و پیوست‌ها را در یک جریان واحد ترکیب می‌کنند.
  • آرتیفکت‌های قالب‌بندی: مستندات Word قدیمی (.doc) به فایل‌های مرکب OLE تکیه دارند که اغلب منجر به متن درهم‌ریخته هنگام استخراج ساده می‌شود.

پردازش ایمیل‌های EML و MSG

ایمیل داده‌ای با ارزش بالا اما قالبی با کیفیت پایین است. هدف استخراج بدنه و متادیتای کلیدی (فرستنده، تاریخ) در حالی است که تگ‌های HTML و نویز base64 را حذف می‌کنیم.

برای فایل‌های EML، کتابخانه email پایتون استاندارد است. برای MSG، به ابزارهای تخصصی مانند extract-msg نیاز دارید.


import email
from email import policy
import extract_msg

def process_eml(filepath):
    with open(filepath, 'rb') as f:
        msg = email.message_from_binary_file(f, policy=policy.default)
    
    # Extract plain text body
    body_part = msg.get_body(preferencelist=('plain', 'html'))
    text = body_part.get_content() if body_part else ""
    
    # Clean HTML if body is rich text
    import re
    text = re.sub(r'<[^>]+>', '', text)
    
    return {
        'subject': msg['subject'],
        'sender': msg['from'],
        'date': msg['date'],
        'content': text.strip()
    }

def process_msg(filepath):
    with extract_msg.Message(filepath) as msg:
        return {
            'subject': msg.subject,
            'sender': msg.sender,
            'date': str(msg.date),
            'content': msg.body
        }

مدیریت مستندات Word قدیمی (.doc)

برخلاف .docx (که یک بایگانی zip از XML است)، .doc یک قالب باینری OLE2 است. تبدیل این‌ها نیازمند یک موتور تبدیل بدون رابط کاربری یا یک تجزیه‌کننده تخصصی است.

قابل‌اتکا‌ترین راهبرد، ابتدا تبدیل .doc به .docx یا .txt با استفاده از LibreOffice در حالت بدون رابط کاربری (headless) و سپس تجزیه نتیجه است. این کار منبع داده را نرمال می‌کند.


# Shell script to convert .doc to .txt via LibreOffice
# Input: /data/legacy/docs
# Output: /data/processed/txt

libreoffice --headless --convert-to txt --outdir /data/processed/txt /data/legacy/docs/*.doc

پس از تبدیل به متن ساده، می‌توانید تکه‌بندی استاندارد NLP را اعمال کنید. از استفاده از الگوریتم‌های خام تبدیل PDF به متن روی مستندات Word قدیمی خودداری کنید، زیرا آن‌ها اغلب زمینه چیدمان را از دست می‌دهند و جملات تکه‌تکه‌ای تولید می‌کنند که کیفیت embedding را کاهش می‌دهد.

راهبرد تکه‌بندی برای داده‌های پر از نویز

مستندات قدیمی اغلب ساختارهای تیتر ناسازگار دارند. تکه‌بندی با اندازه ثابت (مثلاً ۵۰۰ توکن) اغلب جملات را می‌شکافد یا تیترها را از محتوای آن‌ها جدا می‌کند.

از تکه‌بندی آگاه از ساختار استفاده کنید:

  1. شناسایی تیترها (همه حروف بزرگ، بولد، یا الگوهای شماره‌گذاری خاص).
  2. گروه‌بندی محتوا زیر آخرین تیتر شناسایی‌شده.
  3. اگر یک گروه از حداکثر حد توکن فراتر رفت، آن را فقط در مرزهای پاراگراف تقسیم کنید.

نتیجه‌گیری

ورود قالب‌های قدیمی یک وظیفه بهداشت داده است، نه فقط یک وظیفه تجزیه. با نرمال‌سازی متادیتای EML/MSG و تبدیل مستندات Word مبتنی بر OLE به متن تمیز، کیفیت معنایی embedding‌های خود را به‌طور قابل‌توجهی بهبود می‌بخشید. همیشه قبل از مقیاس‌بندی به مجموعه داده کامل، پایپ‌لاین تجزیه را روی یک نمونه کوچک و متنوع از آرشیو واقعی قدیمی خود آزمایش کنید.

Share: