6 min read

چگونه فاکتورهای کاغذی را با پایتون و هوش مصنوعی به فایل اکسل تبدیل کنیم؟

میز کار حسابدارها و مدیران مالی پر از برگه‌های کاغذی، فاکتورهای خرید و رسیدهای مچاله است. هر کدام از این فاکتورها باید دانه دانه باز شوند، اقلام و مبالغشان خوانده شود و در فایل‌های اکسل یا نرم‌افزارهای حسابداری ثبت گردد. این کار هم خسته‌کننده است و هم وقت باارزش تیم شما را می‌گیرد. انجام تبدیل فاکتور به اکسل با پایتون یکی از بهترین راه‌ها برای رهایی از این چرخه‌ی تکراری و طاقت‌فرساست.

در این مقاله قصد داریم بررسی کنیم چطور با ترکیب زبان برنامه‌نویسی پایتون و مدل‌های هوش مصنوعی، این فرآیند را کاملاً خودکار کنید. هدف این نیست که خطای انسانی به صفر مطلق برسد، بلکه می‌خواهیم سرعت کار را چند برابر کنیم و دقت ثبت داده‌ها را به شکل چشمگیری افزایش دهیم.

چرا ورود دستی اطلاعات فاکتورها دیگر منطقی نیست؟

ورود دستی اطلاعات مالی به سیستم، یک نقطه‌ضعف بزرگ در هر کسب‌وکاری است. انسان‌ها در کارهای تکراری دچار خستگی می‌شوند. جابه‌جا شدن حتی یک صفر در مبلغ فاکتور یا شماره فاکتور، می‌تواند ترازهای مالی شما را به هم بریزد و ساعت‌ها وقت تیم مالی را صرف پیدا کردن مغایرت‌ها کند.

روش‌های سنتی پردازش تصویر با پایتون، مثل استفاده از کتابخانه‌های قدیمی OCR (مانند Tesseract)، دردسرهای خاص خود را داشتند. این ابزارها فقط یک متن خام و بدون ساختار تحویل شما می‌دادند. نتیجه چه بود؟ مجبور بودید با کمک کدهای پیچیده و قوانین شکننده‌ی عبارات با قاعده (Regex) دنبال تاریخ، مبلغ و اقلام بگردید؛ روشی که با کوچک‌ترین تغییر در ظاهر فاکتور از کار می‌افتاد.

امروزه با کمک اتوماسیون پردازش فاکتور و استفاده از مدل‌های جدید هوش مصنوعی بینایی (Vision AI)، تصویر فاکتور مستقیماً خوانده می‌شود. این مدل‌ها نیازی به الگوهای ثابت ندارند و ساختار فاکتور را مثل یک انسان باهوش درک می‌کنند.

ابزارها و پیش‌نیازهای فنی برای شروع کار

برای اینکه بتوانید یک سیستم خودکار برای خواندن فاکتورها بنویسید، به چند ابزار کلیدی در اکوسیستم پایتون نیاز دارید. انتخاب درست این ابزارها تفاوت بین یک اسکریپت شکننده و یک ابزار پایدار را رقم می‌زند.

۱. کتابخانه Pandas: استاندارد بی‌رقیب پایتون برای کار با داده‌ها. پس از استخراج اطلاعات فاکتور، از پنداس برای سازماندهی داده‌ها در قالب جدول و ذخیره نهایی آن‌ها استفاده می‌کنیم. ۲. مدل‌های بینایی هوش مصنوعی (Vision Models): مدل‌هایی مانند GPT-4 Vision که می‌توانند عکس فاکتور را ببینند و متن‌های فارسی و انگلیسی موجود در آن را با دقت بالا استخراج کنند. ۳. کتابخانه Instructor و Pydantic: این ترکیب جادویی به شما اجازه می‌دهد ساختار خروجی هوش مصنوعی را از قبل تعریف کنید. یعنی به مدل می‌گویید: «من خروجی را دقیقاً در قالب نام فروشگاه، تاریخ، لیست اقلام و جمع کل می‌خواهم» و هوش مصنوعی پاسخ را دقیقاً در همین قالب ساختاریافته (JSON) تحویل می‌دهد.

برای کار با این ابزارها، به یک محیط برنامه‌نویسی پایتون و کلید دسترسی (API Key) به سرویس‌های هوش مصنوعی نیاز دارید. نیازی به زیرساخت‌های سنگین نیست؛ یک لپ‌تاپ معمولی برای اجرای این اسکریپت‌ها کفایت می‌کند.

مرحله‌به‌مرحله: نوشتن اسکریپت پایتون برای خواندن فاکتور

در این بخش می‌خواهیم یک نمونه کد ساده اما کاربردی را بررسی کنیم. فرض کنید می‌خواهیم تصویر یک فاکتور را به هوش مصنوعی بفرستیم و اطلاعات کلیدی آن را استخراج کنیم. در این پیاده‌سازی از کتابخانه Instructor استفاده می‌کنیم تا مطمئن شویم خروجی هوش مصنوعی کاملاً مرتب و قابل‌استفاده است.

ابتدا باید مدل داده‌ای خود را با کمک Pydantic تعریف کنیم تا ساختار فاکتور مشخص شود:

from typing import List
from pydantic import BaseModel, Field
import instructor
from openai import OpenAI
from pandas import DataFrame

# ۱. تعریف ساختار داده‌ای فاکتور
class InvoiceItem(BaseModel):
    description: str = Field(description="شرح کالا یا خدمات")
    quantity: int = Field(description="تعداد یا مقدار")
    unit_price: float = Field(description="قیمت واحد")
    total_price: float = Field(description="قیمت کل")

class Invoice(BaseModel):
    store_name: str = Field(description="نام فروشگاه یا صادرکننده فاکتور")
    invoice_date: str = Field(description="تاریخ فاکتور")
    items: List[InvoiceItem] = Field(description="لیست اقلام موجود در فاکتور")
    grand_total: float = Field(description="مبلغ کل فاکتور")

# ۲. راه‌اندازی کلاینت هوش مصنوعی با پشتیبانی از Instructor
client = instructor.from_openai(OpenAI())

def extract_invoice_data(image_url: str) -> Invoice:
    # ارسال تصویر به مدل بینایی هوش مصنوعی
    response = client.chat.completions.create(
        model="gpt-4o",
        response_model=Invoice,
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": "لطفاً اطلاعات این فاکتور را استخراج کنید."},
                    {"type": "image_url", "image_url": {"url": image_url}},
                ],
            }
        ],
    )
    return response

تفسیر خروجی و تصمیم‌گیری عملی

وقتی این تابع را با تصویر یک فاکتور اجرا می‌کنید، خروجی شما یک شیء ساختاریافته از نوع Invoice خواهد بود. این یعنی دیگر درگیر پردازش متن‌های به هم ریخته OCR سنتی نیستید. نام فروشگاه، تاریخ و تک‌تک اقلام در متغیرهای مشخصی قرار دارند که به راحتی در بخش‌های بعدی برنامه‌ قابل‌استفاده هستند.

چالش رایجی که ممکن است در این مرحله با آن روبه‌رو شوید، کیفیت پایین عکس یا خط‌خوردگی روی فاکتور است. اگر تصویر تار باشد، ممکن است مدل هوش مصنوعی در خواندن برخی ارقام دچار تردید شود. به همین دلیل، پیش‌پردازش تصویر با ابزارهایی مثل چرخش تصویر یا تنظیم کنتراست پیش از ارسال به API، نقش مهمی در افزایش دقت نهایی دارد.

ذخیره خودکار داده‌ها در فایل اکسل یا دیتابیس

حالا که اطلاعات فاکتور را به شکل ساختاریافته در اختیار داریم، قدم بعدی انتقال این داده‌ها به یک فایل اکسل است تا تیم مالی بتواند به راحتی آن‌ها را گزارش‌گیری و بررسی کند. کتابخانه Pandas این کار را با چند خط کد ساده انجام می‌دهد.

فرض کنید چندین فاکتور را پردازش کرده‌اید و می‌خواهید اقلام آن‌ها را در یک فایل اکسل ذخیره کنید:

def save_invoices_to_excel(invoices: List[Invoice], output_file: str = "invoices_report.xlsx"):
    all_rows = []
    
    # باز کردن و تخت کردن ساختار داده‌ها برای اکسل
    for inv in invoices:
        for item in inv.items:
            all_rows.append({
                "فروشگاه": inv.store_name,
                "تاریخ": inv.invoice_date,
                "شرح کالا": item.description,
                "تعداد": item.quantity,
                "قیمت واحد": item.unit_price,
                "قیمت کل": item.total_price,
                "مبلغ کل فاکتور": inv.grand_total
            })
    
    # تبدیل به دیتافریم پنداس
    df = DataFrame(all_rows)
    
    # ذخیره در فایل اکسل
    df.to_excel(output_file, index=False)
    print(f"اطلاعات با موفقیت در فایل {output_file} ذخیره شد.")

در این مرحله، مدیریت خطاهای احتمالی اهمیت زیادی دارد. ممکن است نام یک کالا در فاکتور ناخوانا باشد یا فرمت تاریخ در فاکتورهای مختلف متفاوت ثبت شده باشد. با استفاده از بلوک‌های مدیریت خطا (try-except) در پایتون، می‌توانید فاکتورهای مشکل‌دار را جدا کنید تا سیستم متوقف نشود و بررسی دستی آن‌ها به یک پوشه جداگانه هدایت شود.

چک‌لیست عملیاتی برای پیاده‌سازی سیستم پردازش فاکتور

پیش از آنکه تصمیم بگیرید این سیستم را در کسب‌وکار خود پیاده‌سازی کنید، بهتر است به چند نکته کلیدی توجه داشته باشید:

  • کیفیت تصاویر فاکتورها: آیا فاکتورهای شما عکس‌های واضحی هستند یا با گوشی‌های قدیمی و در نور کم ثبت می‌شوند؟ هوش مصنوعی نیاز به حداقل خوانایی دارد.
  • حجم کار: ماهانه چه تعداد فاکتور پردازش می‌کنید؟ اگر تعداد فاکتورها زیر ۳۰ عدد در ماه است، شاید اتوماسیون توجیه اقتصادی زمان‌بر نداشته باشد؛ اما برای حجم‌های بالاتر، صرفه‌جویی در زمان چشمگیر است.
  • اعتبارسنجی انسانی (Human-in-the-loop): هیچ سیستم خودکاری نباید بدون نظارت نهایی به سیستم مالی متصل شود. همیشه یک مرحله بازبینی سریع پیش از ثبت قطعی در نظر بگیرید.

مسیر بعدی

اگر حجم فاکتورهای کاغذی در کسب‌وکار شما بالاست و تیم مالی شما زمان زیادی را صرف ورود دستی داده‌ها می‌کند، اتوماسیون این فرآیند با پایتون و هوش مصنوعی می‌تواند تحول بزرگی در بهره‌وری مجموعه ایجاد کند. بررسی ابزارهای مناسب، انتخاب مدل‌های بهینه و پیاده‌سازی درست اسکریپت‌ها نیازمند شناخت دقیق زیرساخت‌های موجود است.

اگر می‌خواهید این مسیر را بدون خطا طی کنید و ابزارها و ساختار مناسب را متناسب با نیازهای کسب‌وکارتان ارزیابی کنید، رزرو یک جلسه‌ی مشاوره اختصاصی می‌تواند به شما کمک کند تا گام‌های اجرایی را روشن‌تر و سریع‌تر بردارید.

Frequently asked questions

چرا روش‌های سنتی OCR برای خواندن فاکتور مناسب نیستند؟

ابزارهای سنتی OCR مثل Tesseract فقط متن خام و بدون ساختار تحویل می‌دهند و برای استخراج دقیق اقلام فاکتور به کدهای پیچیده و شکننده‌ی Regex نیاز دارند که با تغییر ظاهر فاکتور از کار می‌افتند.

برای تبدیل فاکتور به اکسل با پایتون به چه ابزارهایی نیاز داریم؟

به کتابخانه Pandas برای مدیریت جدول‌ها، مدل‌های بینایی هوش مصنوعی مثل GPT-4 Vision برای درک تصویر فاکتور، و کتابخانه Instructor همراه با Pydantic برای ساختاردهی خروجی نیاز دارید.

چطور مطمئن شویم هوش مصنوعی داده‌ها را در قالب درست تحویل می‌دهد؟

با استفاده از ترکیب Instructor و Pydantic در پایتون، می‌توانید ساختار داده‌ای دلخواه (مثل نام فروشگاه، تاریخ و اقلام) را از قبل تعریف کنید تا خروجی هوش مصنوعی دقیقاً به صورت فرمت ساختاریافته دریافت شود.

Was this article helpful?