| import os |
| import glob |
| from langchain_community.document_loaders import PyPDFLoader, TextLoader |
| from chunking import chunk_documents |
| from langchain_core.documents import Document |
|
|
| def load_documents(docs_dir: str = "documents"): |
| """Loads all PDF, TXT, and MD files from the given directory.""" |
| documents = [] |
| |
| if not os.path.exists(docs_dir): |
| print(f"Directory '{docs_dir}' does not exist. Please add documents.") |
| return documents |
| |
| for filepath in glob.glob(os.path.join(docs_dir, "*")): |
| ext = filepath.lower().split('.')[-1] |
| |
| if ext == 'pdf': |
| print(f"Loading PDF: {filepath}") |
| loader = PyPDFLoader(filepath) |
| documents.extend(loader.load()) |
| |
| elif ext in ['txt', 'md']: |
| print(f"Loading Text/Markdown: {filepath}") |
| |
| try: |
| loader = TextLoader(filepath, encoding='utf-8') |
| documents.extend(loader.load()) |
| except Exception as e: |
| print(f"Error loading {filepath}: {e}") |
| |
| else: |
| print(f"Skipping unsupported file type: {filepath}") |
| |
| return documents |
|
|
| def run_ingestion(): |
| print("Starting document ingestion pipeline...") |
| docs = load_documents() |
| |
| if docs: |
| print(f"Loaded {len(docs)} document pages/files.") |
| chunks = chunk_documents(docs) |
| print(f"Chunked into {len(chunks)} context-aware segments.") |
| |
| |
| from embeddings import save_vectorstore |
| save_vectorstore(chunks) |
| |
| |
| from retriever import save_bm25_retriever |
| save_bm25_retriever(chunks) |
| |
| print("Ingestion complete!") |
| return True |
| else: |
| print(f"No documents found in the 'documents/' directory.") |
| return False |
|
|
| if __name__ == "__main__": |
| run_ingestion() |
|
|