|
|
| from langchain_community.document_loaders import DirectoryLoader, TextLoader
|
| from langchain.text_splitter import RecursiveCharacterTextSplitter
|
| from langchain_community.vectorstores import Chroma
|
| from langchain_google_genai import GoogleGenerativeAIEmbeddings
|
| from langchain_community.embeddings import HuggingFaceEmbeddings
|
| from dotenv import load_dotenv
|
| import os
|
| import shutil
|
|
|
|
|
| DATA_PATH = "university_data_arabic"
|
| DB_PATH = "vectorstores/db/"
|
|
|
|
|
| EMBEDDING_MODEL_NAME = "intfloat/multilingual-e5-small"
|
| HF_CACHE_DIR = "/app/.cache/huggingface"
|
|
|
|
|
| def build_vector_store():
|
| """
|
| يقوم هذا السكربت ببناء قاعدة البيانات المعرفية (Vector Store)
|
| من ملفات الماركداون الموجودة في مجلد البيانات.
|
| """
|
|
|
| load_dotenv()
|
|
|
| if not os.path.exists(DATA_PATH):
|
| print(f"خطأ: مجلد البيانات '{DATA_PATH}' غير موجود. يرجى إنشاؤه ووضع ملفات البيانات بداخله.")
|
| return
|
|
|
|
|
| if os.path.exists(DB_PATH):
|
| print(f"يتم حذف قاعدة البيانات القديمة في {DB_PATH}")
|
| shutil.rmtree(DB_PATH)
|
|
|
|
|
| print(f"يتم تحميل الملفات من المسار: {DATA_PATH}...")
|
| loader = DirectoryLoader(DATA_PATH, glob="**/*.md", loader_cls=TextLoader, loader_kwargs={'encoding': 'utf-8'}, show_progress=True)
|
| documents = loader.load()
|
| if not documents:
|
| print("لم يتم العثور على أي ملفات. يرجى التأكد من وجود ملفات .md في مجلد البيانات.")
|
| return
|
|
|
|
|
| print("يتم تقسيم المستندات إلى أجزاء أصغر...")
|
| text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
|
| chunked_documents = text_splitter.split_documents(documents)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| print(f"يتم تهيئة تضمينات هاجنج فيس: {EMBEDDING_MODEL_NAME} ...")
|
| embedding_model = HuggingFaceEmbeddings(
|
| model_name=EMBEDDING_MODEL_NAME,
|
| cache_folder=HF_CACHE_DIR,
|
| model_kwargs={'device': 'cpu'},
|
| encode_kwargs={'normalize_embeddings': True}
|
| )
|
|
|
|
|
|
|
|
|
| print(f"يتم إنشاء قاعدة البيانات المعرفية في المسار: {DB_PATH}...")
|
| vector_store = Chroma.from_documents(
|
| documents=chunked_documents,
|
| embedding=embedding_model,
|
| persist_directory=DB_PATH
|
| )
|
| print("-----------------------------------------")
|
| print("✅ تم إنشاء قاعدة البيانات بنجاح! ✅")
|
| print("-----------------------------------------")
|
|
|
|
|
| if __name__ == "__main__":
|
| build_vector_store() |