مفتوح المصدر

Lumen Search

مفتوح المصدر · بحث هجين في المستندات (RAG)

بحث هجين يذكر مصدر كل نتيجة في ملفات PDF وWord وExcel والصفحات الممسوحة ضوئياً، بالإنجليزية والروسية: BM25 وتضمينات متعددة اللغات في FAISS، وOCR، وخدمة FastAPI.

Lumen Search — معاينة

المشكلة

تصل المستندات خليطاً من ملفات PDF وWord والجداول والمستندات الممسوحة، والبحث التقليدي بالكلمات المفتاحية لا يجد الصياغات المختلفة ولا يبيّن مصدر الإجابة.

الحل

تحليل يراعي بنية المستند مع OCR، وبحث BM25 وبحث بالتضمينات يُدمجان حسب الترتيب، وإعادة ترتيب اختيارية، وإحالات تصل إلى الصفحة أو المادة أو صف الجدول.

التفاصيل التقنية

يحصل 83.9% من 62 سؤالاً مصنّفاً على مقطع صحيح بين أول خمس نتائج بعد إعادة الترتيب. عرض حيّ في المتصفح، واختبارات على ثلاثة إصدارات من Python وفحص لصورة Docker في CI.

نظرة عامة

Lumen Search هو النظير مفتوح المصدر للنظام الذي أبنيه في عملي: بحث واحد في ملفات PDF وWord وجداول Excel والمستندات الممسوحة، تُظهر فيه كل إجابة مصدرها بدقة. ويضم الفهرس ثمانية مستندات عامة: إرشادات NIST وOWASP الأمنية بالإنجليزية، وقانون البيانات الشخصية الروسي بالروسية، ومستندين ممسوحين لا يمكن قراءتهما إلا عبر OCR.

يتبع التحليل بنية كل مستند — إشارات PDF المرجعية والعناوين المرقّمة، وأنماط العناوين في Word، وصفاً واحداً من الجدول لكل سجل — فتُحيل النتيجة إلى صفحة وقسم، أو مادة من القانون، أو ورقة وصف. ويجري البحث بطريقتين: BM25 على كلمات إنجليزية وروسية مردودة إلى جذورها بأداة Snowball، وتضمينات multilingual-e5 في FAISS، ثم يُدمج الترتيبان، ويمكن إعادة ترتيب أفضل النتائج بنموذج cross-encoder متعدد اللغات.

والجودة مقيسة على 62 سؤالاً صُنّفت يدوياً: يضع البحث الهجين مقطعاً صحيحاً بين أول خمس نتائج في 75.8% من الأسئلة، وترفع إعادة الترتيب النسبة إلى 83.9%، ويذكر ملف README نقاط الضعف أيضاً. تعمل الخدمة بأمر docker compose واحد، ويشغّل العرض الحيّ البحث نفسه داخل المتصفح بنموذج int8 حجمه 66 ميغابايت، ويتحقق CI من تطابق نسخة JavaScript مع كود Python.

ماذا يفعل

  • يحلّل ملفات PDF وWord وExcel وMarkdown وHTML، وتمرّ الصفحات الممسوحة عبر Tesseract OCR بالإنجليزية والروسية
  • يقسّم النص حسب الأقسام وصفوف الجداول، فتشير كل نتيجة إلى صفحة أو مادة من القانون أو صف
  • بحث هجين: BM25 مع تضمينات multilingual-e5 في FAISS يُدمجان حسب الترتيب، مع إعادة ترتيب اختيارية بنموذج cross-encoder
  • خدمة FastAPI مع تخزين مؤقت في Redis، وإجابات بمصادر مرقّمة، وعرض تجريبي يعمل داخل المتصفح

الخطوة التالية

تبحث عن مطوّر Full-Stack أو Python أو ذكاء اصطناعي — أو تحتاج إلى بناء شيء مشابه؟ لنتحدث.

متاح فوراً — حضورياً أو بنظام هجين في موسكو، أو عن بُعد؛ بدوام كامل أو بعقد. أردّ خلال 48 ساعة — وأسرع عبر Telegram.

تواصل معي Telegramتحميل السيرة الذاتية

الحسن الفران.

© 2026 · صمّمته وبنيته بنفسي. التقنيات: Next.js وTailwind وFramer Motion.

توقيتي المحلي: · موسكو

ملاحظات
كيف بُني هذا الموقع

التقنيات

Next.js (App Router) وReact، مع Tailwind CSS للتنسيق وFramer Motion للحركة. يُرسل نموذج التواصل الرسائل عبر Resend، والموقع مستضاف على Vercel.

ثلاث لغات وتصميم واحد

لكل من النسخ الإنجليزية والروسية والعربية عنوانها الخاص (/en و/ru و/ar)، وكلها تستخدم المكوّنات نفسها. يعتمد التصميم على خصائص CSS المنطقية (start/end بدلاً من left/right)، فتنعكس النسخة العربية من اليمين إلى اليسار دون أنماط منفصلة. ويُرسل الخادم كل صفحة بلغتها واتجاه نصها مسبقاً، فلا ينقلب شيء بعد التحميل، ولا يُنزَّل الخط العربي إلا عند ظهور نص عربي على الشاشة.

الأداء وسهولة الوصول

لا تُعرض الأقسام الواقعة أسفل الشاشة الأولى إلا عند الاقتراب منها، ولا تُحمَّل القائمة السريعة إلا عند أول استخدام لها. يمكن استخدام كل شيء من لوحة المفاتيح، مع رابط للانتقال مباشرة إلى المحتوى وتركيز ظاهر، وتتوقف الحركة إذا طلب نظامك تقليلها.

الكود المصدري على GitHub