Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import json | |
| import re | |
| # فایل دیتابیس JSON | |
| DATABASE_FILE = 'material_db.json' | |
| # تابع برای استخراج اطلاعات از متن | |
| def extract_info_from_text(text): | |
| """ | |
| Extract item description, code, and calculation formula from the provided text. | |
| """ | |
| extracted_info = [] | |
| # الگوهای جستجو برای استخراج آیتمها و فرمولها | |
| item_pattern = r'([^\d]+)\s+(\d{6})' | |
| formula_pattern = r'([^\d]+)\s*=\s*([^\d]+)' | |
| # استخراج آیتمها و کدها | |
| items = re.findall(item_pattern, text) | |
| # استخراج فرمولها | |
| formulas = re.findall(formula_pattern, text) | |
| # اضافه کردن اطلاعات به لیست | |
| for item in items: | |
| description, code = item | |
| extracted_info.append({ | |
| 'description': description.strip(), | |
| 'code': code.strip() | |
| }) | |
| for formula in formulas: | |
| description, formula_text = formula | |
| extracted_info.append({ | |
| 'description': description.strip(), | |
| 'formula': formula_text.strip() | |
| }) | |
| return extracted_info | |
| # تابع برای ذخیره اطلاعات در دیتابیس JSON | |
| def save_to_database(info): | |
| """ | |
| Save the extracted info into the JSON database. | |
| """ | |
| try: | |
| # خواندن دیتابیس موجود | |
| with open(DATABASE_FILE, 'r') as db_file: | |
| db_data = json.load(db_file) | |
| except FileNotFoundError: | |
| db_data = [] | |
| # افزودن اطلاعات جدید | |
| db_data.append(info) | |
| # ذخیره به فایل | |
| with open(DATABASE_FILE, 'w') as db_file: | |
| json.dump(db_data, db_file, indent=4) | |
| # تابع برای پردازش فایل اکسل | |
| def process_excel_file(excel_file): | |
| """ | |
| Reads the Excel file and extracts necessary data for calculation. | |
| """ | |
| df = pd.read_excel(excel_file) | |
| # فرض میکنیم فایل اکسل دارای ساختار مشخصی است. | |
| # در اینجا به طور فرضی دادههای مورد نیاز را استخراج میکنیم. | |
| return df | |
| # تابع برای برآورد و محاسبه | |
| def calculate_estimation(text, excel_file=None): | |
| """ | |
| Calculate the estimation based on extracted info and Excel data (if available). | |
| """ | |
| extracted_info = extract_info_from_text(text) | |
| if excel_file: | |
| excel_data = process_excel_file(excel_file) | |
| # فرض میکنیم که اطلاعات از اکسل باید در محاسبات استفاده شوند | |
| estimation = f"براورد با استفاده از فایل اکسل انجام شد. {len(excel_data)} ردیف داده استفاده شده." | |
| else: | |
| estimation = "براورد فقط با استفاده از توضیحات انجام شد." | |
| # ذخیرهسازی اطلاعات در دیتابیس | |
| save_to_database(extracted_info) | |
| return estimation | |
| # رابط کاربری با Gradio | |
| def create_ui(): | |
| with gr.Blocks() as demo: | |
| gr.Markdown("### برنامه برآورد پروژه") | |
| # صفحه 1: وارد کردن توضیحات و فایل اکسل | |
| with gr.Box(): | |
| gr.Markdown("### وارد کردن توضیحات پروژه") | |
| text_input = gr.Textbox(placeholder="توضیحات پروژه را وارد کنید", lines=5) | |
| excel_input = gr.File(label="فایل اکسل", type="file") | |
| submit_button = gr.Button("ثبت") | |
| output_text = gr.Textbox(label="خروجی برآورد", lines=5) | |
| submit_button.click(calculate_estimation, inputs=[text_input, excel_input], outputs=output_text) | |
| # نمایش اطلاعات از دیتابیس در صفحه 2 | |
| with gr.Box(): | |
| gr.Markdown("### مشاهده اطلاعات ذخیرهشده") | |
| show_db_button = gr.Button("نمایش اطلاعات دیتابیس") | |
| db_output = gr.Textbox(label="دیتابیس ذخیرهشده", lines=10) | |
| show_db_button.click(lambda: open(DATABASE_FILE, 'r').read(), outputs=db_output) | |
| return demo | |
| # اجرای رابط کاربری | |
| demo = create_ui() | |
| demo.launch() | |