Reza-galaxy21 commited on
Commit
b9c75c1
·
verified ·
1 Parent(s): 425b1a2

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +119 -0
app.py ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import json
4
+ import re
5
+
6
+ # فایل دیتابیس JSON
7
+ DATABASE_FILE = 'material_db.json'
8
+
9
+ # تابع برای استخراج اطلاعات از متن
10
+ def extract_info_from_text(text):
11
+ """
12
+ Extract item description, code, and calculation formula from the provided text.
13
+ """
14
+ extracted_info = []
15
+
16
+ # الگوهای جستجو برای استخراج آیتم‌ها و فرمول‌ها
17
+ item_pattern = r'([^\d]+)\s+(\d{6})'
18
+ formula_pattern = r'([^\d]+)\s*=\s*([^\d]+)'
19
+
20
+ # استخراج آیتم‌ها و کدها
21
+ items = re.findall(item_pattern, text)
22
+
23
+ # استخراج فرمول‌ها
24
+ formulas = re.findall(formula_pattern, text)
25
+
26
+ # اضافه کردن اطلاعات به لیست
27
+ for item in items:
28
+ description, code = item
29
+ extracted_info.append({
30
+ 'description': description.strip(),
31
+ 'code': code.strip()
32
+ })
33
+
34
+ for formula in formulas:
35
+ description, formula_text = formula
36
+ extracted_info.append({
37
+ 'description': description.strip(),
38
+ 'formula': formula_text.strip()
39
+ })
40
+
41
+ return extracted_info
42
+
43
+ # تابع برای ذخیره اطلاعات در دیتابیس JSON
44
+ def save_to_database(info):
45
+ """
46
+ Save the extracted info into the JSON database.
47
+ """
48
+ try:
49
+ # خواندن دیتابیس موجود
50
+ with open(DATABASE_FILE, 'r') as db_file:
51
+ db_data = json.load(db_file)
52
+ except FileNotFoundError:
53
+ db_data = []
54
+
55
+ # افزودن اطلاعات جدید
56
+ db_data.append(info)
57
+
58
+ # ذخیره به فایل
59
+ with open(DATABASE_FILE, 'w') as db_file:
60
+ json.dump(db_data, db_file, indent=4)
61
+
62
+ # تابع برای پردازش فایل اکسل
63
+ def process_excel_file(excel_file):
64
+ """
65
+ Reads the Excel file and extracts necessary data for calculation.
66
+ """
67
+ df = pd.read_excel(excel_file)
68
+ # فرض می‌کنیم فایل اکسل دارای ساختار مشخصی است.
69
+ # در اینجا به طور فرضی داده‌های مورد نیاز را استخراج می‌کنیم.
70
+ return df
71
+
72
+ # تابع برای برآورد و محاسبه
73
+ def calculate_estimation(text, excel_file=None):
74
+ """
75
+ Calculate the estimation based on extracted info and Excel data (if available).
76
+ """
77
+ extracted_info = extract_info_from_text(text)
78
+
79
+ if excel_file:
80
+ excel_data = process_excel_file(excel_file)
81
+ # فرض می‌کنیم که اطلاعات از اکسل باید در محاسبات استفاده شوند
82
+ estimation = f"براورد با استفاده از فایل اکسل انجام شد. {len(excel_data)} ردیف داده استفاده شده."
83
+ else:
84
+ estimation = "براورد فقط با استفاده از توضیحات انجام شد."
85
+
86
+ # ذخیره‌سازی اطلاعات در دیتابیس
87
+ save_to_database(extracted_info)
88
+
89
+ return estimation
90
+
91
+ # رابط کاربری با Gradio
92
+ def create_ui():
93
+ with gr.Blocks() as demo:
94
+ gr.Markdown("### برنامه برآورد پروژه")
95
+
96
+ # صفحه 1: وارد کردن توضیحات و فایل اکسل
97
+ with gr.Box():
98
+ gr.Markdown("### وارد کردن توضیحات پروژه")
99
+ text_input = gr.Textbox(placeholder="توضیحات پروژه را وارد کنید", lines=5)
100
+ excel_input = gr.File(label="فایل اکسل", type="file")
101
+ submit_button = gr.Button("ثبت")
102
+ output_text = gr.Textbox(label="خروجی برآورد", lines=5)
103
+
104
+ submit_button.click(calculate_estimation, inputs=[text_input, excel_input], outputs=output_text)
105
+
106
+ # نمایش اطلاعات از دیتابیس در صفحه 2
107
+ with gr.Box():
108
+ gr.Markdown("### مشاهده اطلاعات ذخیره‌شده")
109
+ show_db_button = gr.Button("نمایش اطلاعات دیتابیس")
110
+ db_output = gr.Textbox(label="دیتابیس ذخیره‌شده", lines=10)
111
+
112
+ show_db_button.click(lambda: open(DATABASE_FILE, 'r').read(), outputs=db_output)
113
+
114
+ return demo
115
+
116
+ # اجرای رابط کاربری
117
+ demo = create_ui()
118
+ demo.launch()
119
+