بارگذاری سند و استخراج متن
توسعه عاملهای هوشمند (Agentic Ai) با Langchain و Langgraph
- Load text, markdown, PDF, and tabular files through appropriate loaders.
- Inspect extraction quality and identify malformed or empty content.
- Create a normalized file-ingestion interface.
از فایل تا Document
**قرارداد خروجی**
متن در `page_content` و اطلاعات منبع در `metadata` قرار میگیرد.
```mermaid
flowchart LR
A["Local file"] --> B["Choose loader"]
B --> C["Extract text"]
C --> D["Inspect quality"]
D --> E["Normalize Documents"]
E --> F["Chunking"]
```
انتخاب Loader مناسب
**تصمیم برای یک PDF**
`manual.pdf` → پسوند `.pdf` → انتخاب `PyPDFLoader` → خروجی معمولاً چند `Document`، یکی برای هر صفحه.
```mermaid
flowchart TD
A["File suffix"] --> B{"Format?"}
B -->|"txt / md"| C["TextLoader"]
B -->|"pdf"| D["PyPDFLoader"]
B -->|"csv"| E["CSVLoader"]
C --> F["load"]
D --> F
E --> F
```
استخراج و بررسی کیفیت
**از فایل تا نتیجه**
فایل یک خط دارد؛ `load()` یک سند میدهد؛ `page_content` متن و `metadata["source"]` مسیر را نشان میدهد. سپس `strip()` خالیبودن واقعی را بررسی میکند.
```mermaid
flowchart LR
A["load"] --> B["Document list"]
B --> C{"page_content.strip()"}
C -->|"empty"| D["Reject and report"]
C -->|"non-empty"| E["Inspect length and preview"]
E --> F["Normalize"]
```
PDF و جدول؛ مرزهای استخراج
**تفسیر خروجی PDF**
صفحه صفر: طول `842`، پس متن دارد. صفحه یک: طول `0`، پس استخراج خالی است. صفحه دو: طول `615`، پس متن دارد؛ صفحه یک باید برای OCR یا بررسی دستی علامتگذاری شود.
**یک ردیف CSV**
یک ردیف داده داریم؛ بنابراین `len(docs) == 1` و خروجی متن شامل سه خط `id`، `name` و `price` است.
رابط ingestion یکدست
**مسیر موفق**
`notes.txt` → انتخاب loader → `load()` → بررسی متن → کپی metadata → افزودن `source` و `file_type` → بازگشت `list[Document]`.
**مسیر ناموفق**
`scan.pdf` → `load()` سند خالی میدهد → شرط `stripped == ""` برقرار میشود → خطای `ValueError` با اندیس و مسیر صادر میشود.
بازگشت به دوره