استخراج بيانات كشف الحساب البنكي: 6 مشاكل حللناها
كيف يعمل استخراج بيانات كشف الحساب البنكي من PDF رقمي وممسوح، و6 مشاكل حقيقية واجهناها في محرك بياني وكيف حللناها، مع أمثلة كود بسيطة.

أثناء بناء محرك الاستخراج في بياني، كان لكل خطأ أصلحناه نفس الدرس تقريباً: قراءة النص سهلة، أما معرفة أي نص ينتمي لأي حركة فهي المشكلة.
في هذا المقال نشرح كيف يعمل استخراج بيانات كشف الحساب البنكي، ثم 6 مشاكل حقيقية واجهناها وكيف حللناها، مع أمثلة كود مبسطة.
ما هو استخراج بيانات كشف الحساب البنكي؟
هو تحويل كشف PDF، المصمم للقراءة البشرية، إلى صفوف منظمة يفهمها برنامج: صف لكل حركة بالتاريخ والوصف والسحب والإيداع والرصيد.
الكشف الرقمي مقابل الممسوح ضوئياً
| كشف رقمي | كشف ممسوح | |
|---|---|---|
| كيف تعرفه | تستطيع تحديد النص ونسخه | صورة لا يمكن تحديد نصها |
| كيف يُقرأ | من طبقة النص بالكود | OCR أو ذكاء اصطناعي يقرأ الصورة |
| السرعة | ثوانٍ | أبطأ |
| الخطر الأكبر | بناء الصفوف خطأ | قراءة رقم خطأ من صورة رديئة |
6 مشاكل استخراج واجهناها وكيف حللناها
1. إيداع وقع في عمود السحب
في البداية كانت المبالغ تُوزَّع حسب ترتيبها في السطر، فيقع الإيداع أحياناً في عمود السحب. الآن يقرأ المحرك مواقع الأعمدة من رأس الجدول، ويضع كل مبلغ حسب مكانه على الصفحة.
2. حركة واحدة مطبوعة على سطرين
الوصف الطويل ينكسر إلى سطر ثانٍ، فكانت الحركة الواحدة تتحول إلى حركتين. القاعدة الآن: سطر بلا تاريخ وبلا مبلغ هو تكملة، فيُضم إلى الصف الذي فوقه.
if not line.date and not line.amount:
rows[-1].description += " " + line.text # continuation of the row above
else:
rows.append(line)3. مبلغ ملتصق بنص الوصف
بعض الكشوف تطبع المبلغ ملتصقاً بالوصف بلا مسافة، مثل PANDA1,250.00، فيضيع المبلغ. الحل قراءة المبلغ من نهاية النص بنمط رقمي واضح.
import re
m = re.search(r"(\d{1,3}(?:,\d{3})*\.\d{2})$", "POS PANDA1,250.00")
m.group(1) # '1,250.00'4. صفحة ملخص قُرئت كأنها حركات
صفحات الملخص فيها أرقام أيضاً، فكانت تُعامل كحركات أو تُعطي للمستخدم بدل صفحات الحركات. الآن لا تُعد الصفحة صفحة حركات إلا إذا كان فيها عدد كافٍ من التواريخ، لا الأرقام فقط.
5. الرصيد مطبوع في بعض الصفوف فقط
بعض البنوك لا تطبع الرصيد بعد كل حركة. التحقق الآن يتم بين كل صفين مطبوع فيهما الرصيد: مجموع الحركات بينهما يجب أن يساوي الفرق.
6. ضياع الوصف العربي بعد التنظيف
خطوة تنظيف الأوصاف كانت تستبدل أحياناً الوصف العربي بملخص إنجليزي. الآن يبقى الوصف بلغة البنك، والأرقام المخفية تبقى مخفية.
التحقق الذي يكشف كل ما تبقى: الرصيد الجاري
balance = opening
for row in rows:
balance += row.deposit - row.withdrawal
assert abs(balance - row.printed_balance) < 0.01 # else: flag the rowهذا التحقق هو ما يجعل الأخطاء الستة أعلاه تظهر فوراً بدل أن تصل إلى ملفك.
كيف يقرأ بياني الكشف اليوم
- الكشف الرقمي: تُبنى الصفوف بالكود من تخطيط الصفحة، وتُثبت بالرصيد الجاري.
- الصفحات التي لا تجتاز التحقق، والصفحات الممسوحة: تُقرأ بالذكاء الاصطناعي ثم تُثبت بالرصيد نفسه.
- يعمل مع الكشوف العربية والإنجليزية وثنائية اللغة من أكثر من 1,300 بنك.
الأسئلة الشائعة
هل يمكن استخراج البيانات من كشف حساب ممسوح ضوئياً؟
نعم. الصفحات الممسوحة تُقرأ بالذكاء الاصطناعي ثم يُتحقق منها بالرصيد مثل الكشوف الرقمية.
هل OCR وحده كافٍ؟
OCR يقرأ الحروف، لكنه لا يعرف أي رقم ينتمي لأي حركة. تحتاج بعده إعادة بناء الصفوف والتحقق من الرصيد.
كيف أعرف أن الاستخراج كامل؟
الرصيد الافتتاحي مع كل الحركات يجب أن يساوي الرصيد الختامي في الكشف. إذا تطابقا فلم تضع حركة.
IBM: ما هو التعرف الضوئي على الحروف (OCR)؟
شرح تقني لكيفية تحويل صور المستندات إلى نص مقروء
تحويل كشف حساب PDF إلى Excel
جرّب الاستخراج على كشفك مع التحقق من الرصيد
جرّب بياني مجاناً
ارفع كشف حسابك البنكي واحصل على Excel مصنّف في ثوانٍ. 3 صفحات بدون تسجيل.
ابدأ مجاناً

