منطق ایجنت‌ها › M4 — مرزها و راستی‌آزمایی
۴.۲ پایدار تدریسی ~۳۵ دقیقه

واقعیت فارسی

در یک نگاه

۴.۲.۱

متن راست‌به‌چپ و مشکلات همیشگی‌اش

فارسی راست‌به‌چپ نوشته می‌شود ولی در فایل، حروف به ترتیبِ منطقی ذخیره می‌شوند — یعنی به همان ترتیبی که می‌خوانی، نه آن ترتیبی که روی صفحه می‌بینی. نمایش، کارِ برنامه‌ای است که بازش می‌کند.

و همین جدایی، سه مشکل همیشگی می‌سازد:

نکته‌ی عملی: اگر متنی روی صفحه به‌هم‌ریخته دیدی، اول فرض نکن فایل خراب است. همان فایل را در یک ویرایشگر متنی ساده باز کن. اگر آنجا درست بود، مشکل نمایش است نه داده — و درمانش جای دیگری است.

۴.۲.۲

PDF فارسی

PDF دو جنس کاملاً متفاوت دارد و تشخیصشان اولین کاری است که باید بکنی:

آزمون یک‌ثانیه‌ای: فایل را باز کن و سعی کن یک کلمه را انتخاب کنی. اگر شد، متنی است. اگر نشد، اسکن است.

برای PDF متنیِ فارسی، خواندن معمولاً کار می‌کند ولی دو مشکل رایج دارد: ترتیب حروف در بعضی فایل‌ها به‌هم‌ریخته درمی‌آید (بستگی به برنامه‌ای دارد که PDF را ساخته)، و ترتیب ستون‌ها در جدول‌ها گم می‌شود.

به‌خاطر بسپار قبل از هر کاری با PDF فارسی، یک صفحه‌اش را امتحان کن، نه کلش را. اگر آن یک صفحه درست خوانده شد، برو جلو. اگر نه، کل نقشه‌ات عوض می‌شود — و بهتر است الان بفهمی، نه بعد از دو مرحله (همان «کوچک‌ترین قدم» فصل ۲.۵.۵).

۴.۲.۳

PDF اسکن‌شده و OCR فارسی

برای اسکن، باید عکس به متن تبدیل شود. اسم این کار OCR است.

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

پس چه انتظاری داشته باش:

آن آخری قاعده‌ی مهمی می‌سازد: هر عددی که از OCR درمی‌آید باید نمونه‌ای چک شود — مثلاً پنج تا از پنجاه رسید را با اصلشان مقایسه کن. درس ۸.۳ کاملاً درباره‌ی همین است.

۴.۲.۴

اکسل فارسی: عدد، تاریخ، ی و ک

و حالا پرکاربردترین بخش این فصل. همه‌ی چیزهایی که اینجا می‌گویم را در همان فایل نمونه‌ی این دوره می‌توانی ببینی: نمونه‌ها/داده/فروش-۱۴۰۵.csv. بازش کن و خودت بشمار.

۱. ی و ک عربی. در آن فایل، «شرکت ب» دو بار با ک فارسی نوشته شده و یک بار شركت ب با ک عربی. به چشم تو یکی‌اند. برای کامپیوتر دو مشتری مختلف.

و اثرش را با عدد ببین: اگر مشتری‌ها را خام گروه‌بندی کنی، ۶ مشتری می‌گیری. ولی مشتری واقعی ۴ تا است. دو خطا، از دو علت جدا:

۲. عدد فارسی و لاتین قاطی. در همان فایل یک تاریخ با ارقام فارسی نوشته شده: ۱۴۰۵/۰۲/۱۵، بقیه با ارقام لاتین. اگر بر اساس تاریخ مرتب کنی، آن یک ردیف سرِ جای درستش نمی‌نشیند — چون ارقام فارسی و لاتین نویسه‌های متفاوتی هستند.

۳. کاما در عدد، ساختار را می‌شکند. این را در فصل ۰.۲ دیدی و اینجا دلیل فنی‌اش را می‌گویی: در CSV کاما جداکننده‌ی ستون است. پس 450,000 دو ستون حساب می‌شود، آن ردیف ۷ ستون پیدا می‌کند به‌جای ۶، و همه‌ی ستون‌های بعدی یکی می‌لغزند. نتیجه: قیمت 450 خوانده می‌شود و مشتری 000.

۴. تاریخ شمسی. بند بعدی.

و درمانِ هر چهار: قبل از هر محاسبه‌ای، یکسان‌سازی. صریح بگو «اول ی و ک را یکسان کن، ارقام فارسی را به لاتین تبدیل کن، و ردیف‌هایی که تعداد ستونشان با بقیه نمی‌خواند را جدا فهرست کن — بعد حساب کن.»

۴.۲.۵

اسم و تاریخ شمسی

تاریخ شمسی برای بیشتر ابزارها یک تاریخ نیست — یک رشته‌ی متنی است. یعنی نمی‌داند ۱۴۰۵/۰۱/۰۵ قبل از ۱۴۰۴/۱۲/۲۹ نیست.

سه پیامد عملی:

اسم‌های فارسی هم دو تله دارند: نیم‌فاصله، و شکل‌های مختلف یک حرف. در پوشه‌ی نمونه‌ها/اسناد/ همین حالا ۱۳ نیم‌فاصله در ۵ فایل هست. یعنی «می‌شود» و «میشود» برای جستجو دو کلمه‌ی مختلف‌اند.

و همین است که در همین جزوه هم حل شده: جستجوی این جزوه ی و ک و نیم‌فاصله و اعراب و ارقام فارسی را یکسان‌سازی می‌کند — برای همین «مرجوعي» با ی عربی، «مرجوعی» را پیدا می‌کند. همان کاری که تو هم باید با داده‌ات بکنی.

۴.۲.۶

چه چیزی خوب کار می‌کند

این بخش عمداً آخر است، چون بدون آن تصویر غلط می‌ماند.

خوب کار می‌کند:

احتیاط لازم دارد: عدد از OCR · تاریخ شمسی در محاسبه · گروه‌بندی روی متن فارسیِ یکسان‌سازی‌نشده · و جدولِ داخل PDF.

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

نکته‌ی طلایی قبل از هر تحلیلی روی داده‌ی فارسی، یک بار این را بپرس: «در این فایل چه چیزهایی هست که ممکن است تحلیل را خراب کند؟» و اسم نبر — بگذار خودش پیدا کند. تقریباً همیشه چیزهایی می‌آورد که تو نمی‌دیدی، چون سال‌هاست به آن فایل نگاه کرده‌ای و برایت عادی شده.
ضدالگو گروه‌بندی یا شمردن روی متن فارسی، بدون یکسان‌سازی. این خطا هیچ‌وقت خطا نمی‌دهد — فقط یک عددِ کمی غلط می‌دهد. در همان فایل نمونه، تفاوتش «۶ مشتری» در برابر «۴ مشتری» است؛ در فایل واقعیِ تو می‌تواند تفاوتِ یک تصمیم باشد.

تمرین (ساختنی + توضیحی)

یک فایل فارسی نمونه بده و بنویس کجا خوب بود و کجا نه.

۱. فایل نمونه‌ها/داده/فروش-۱۴۰۵.csv را بده و بپرس: «در این فایل چه چیزهایی هست که یک تحلیل را خراب می‌کند؟» — بدون اینکه خودت اسم چیزی را ببری.

۲. جوابش را با فهرست بخش ۴.۲.۴ مقایسه کن. چند مورد از آن چهار مورد را پیدا کرد؟ چیزی پیدا کرد که ما نگفته بودیم؟

۳. بعد بگو «مشتری‌های یکتا را بشمار» و ببین چه عددی می‌دهد — و آیا خودش یکسان‌سازی می‌کند یا نه.

۴. و اگر یک فایل فارسیِ واقعی از کار خودت داری (روی کپی — فصل ۰.۹)، همین را رویش تکرار کن.

پاسخنامه — چه چیزی باید دیده باشی

خوب بود: «هر چهار مورد را پیدا کرد — چهار قالب تاریخ، ی و ک عربی، ردیفِ از‌جا‌دررفته، و مرجوعی‌ها. یکی را هم پیدا کرد که در فهرست ما نبود: دو ردیف در یک تاریخ با همان محصول و همان تعداد، که معلوم نیست دو سفارش است یا یک سفارشِ دوباره ثبت‌شده.»

شمارش مشتری‌ها: «بار اول ۶ داد. وقتی پرسیدم مطمئنی، خودش شركت ب را پیدا کرد و گفت ۵. تا وقتی نگفتم آن 000 از کجا آمده، به عدد ۴ نرسید.»

نه، خوب نبود: «تا وقتی نپرسیدم، عدد ۶ را با اطمینان داد. یعنی پیدا کردنِ مشکل را خوب انجام می‌دهد، ولی خودبه‌خود اعمال‌کردنش را نه — باید بخواهی.»

چرا این جواب خوب است: تفاوتِ «می‌تواند تشخیص بدهد» و «خودش انجام می‌دهد» را دیده. همان چیزی که بخش ۴.۲.۶ می‌گوید: در تشخیص خوب است، پس از او بخواه تشخیص بدهد — فرض نکن کرده.

ذخیره شد