DatabaseBuilder / app.py
Reza-galaxy21's picture
Create app.py
b9c75c1 verified
raw
history blame
4.31 kB
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()