File size: 2,574 Bytes
81ad41f
c4a1d8e
3f1f23f
bf83b33
 
24952a9
3be32e1
3f1f23f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c4a1d8e
3f1f23f
 
 
 
 
 
24952a9
3be32e1
3f1f23f
 
029ed15
3f1f23f
029ed15
 
3f1f23f
 
 
 
 
 
24952a9
3f1f23f
 
029ed15
3be32e1
3f1f23f
 
 
029ed15
3f1f23f
 
029ed15
3f1f23f
fc7f76e
3f1f23f
 
 
 
 
c4a1d8e
029ed15
 
3f1f23f
3be32e1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import os
import gradio as gr
import faiss
os.system("pip install pymupdf")
import fitz  # PyMuPDF
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import OpenAIEmbeddings
from sentence_transformers import SentenceTransformer

# مدل برای embeddings
print("⏳ در حال بارگذاری مدل embeddings...")
model = SentenceTransformer("all-MiniLM-L6-v2")
print("✅ مدل embeddings بارگذاری شد.")

# تولید embeddings اولیه
try:
    sample_text = ["نمونه متن برای تست"]
    embeddings = model.encode(sample_text)
    print(f"✅ Embeddings اولیه تولید شد: {embeddings.shape}")
except Exception as e:
    print(f"❌ خطا در تولید embeddings: {e}")
    embeddings = None

# بررسی دیتابیس FAISS
def load_database():
    global embeddings
    if embeddings is None or len(embeddings) == 0:
        print("⚠️ خطا: لیست embeddings خالی است. FAISS مقداردهی نمی‌شود.")
        return None
    
    print("⏳ در حال مقداردهی FAISS...")
    try:
        faiss_db = FAISS.from_embeddings(embeddings, model)
        print("✅ FAISS مقداردهی شد.")
        return faiss_db
    except Exception as e:
        print(f"❌ خطا در مقداردهی FAISS: {e}")
        return None

# بررسی اینکه دیتابیس از قبل وجود دارد یا خیر
if not os.path.exists("faiss_index"):
    print("❌ دیتابیس وجود ندارد. ایجاد دیتابیس جدید...")
    global_vector_db = load_database()
else:
    print("✅ دیتابیس FAISS موجود است.")

# تابع پردازش فایل
def process_pdf(file):
    try:
        doc = fitz.open(file.name)
        text = "\n".join([page.get_text() for page in doc])
        print(f"✅ فایل پردازش شد. {len(text)} کاراکتر استخراج شد.")
        return text
    except Exception as e:
        print(f"❌ خطا در پردازش PDF: {e}")
        return "⚠️ خطا در پردازش فایل"

# رابط گرافیکی
with gr.Blocks() as demo:
    gr.Markdown("# 🚀 ابزار تحلیل اسناد توزیع برق")
    file_input = gr.File(label="آپلود فایل PDF", type="filepath")
    output_text = gr.Textbox(label="📄 محتوای پردازش شده")
    
    file_input.change(process_pdf, inputs=file_input, outputs=output_text)

# اجرای برنامه
if __name__ == "__main__":
    print("🚀 برنامه در حال اجرا است...")
    demo.launch()