متن راستبهچپ و مشکلات همیشگیاش
فارسی راستبهچپ نوشته میشود ولی در فایل، حروف به ترتیبِ منطقی ذخیره میشوند — یعنی به همان ترتیبی که میخوانی، نه آن ترتیبی که روی صفحه میبینی. نمایش، کارِ برنامهای است که بازش میکند.
و همین جدایی، سه مشکل همیشگی میسازد:
- متن قاطی فارسی و انگلیسی. جملهای مثل «فایل
report.csvرا بخوان» جای پرش دارد، و در بعضی نمایشها تکهها جابهجا دیده میشوند — درحالیکه خودِ متن درست است. - علامتها و پرانتز. پرانتز و کاما و نقطه در متن راستبهچپ جهتشان عوض میشود و اگر برنامهای درست پیادهسازی نکرده باشد، جای اشتباه میافتند.
- فلش. این را در همین جزوه هم رعایت میکنیم: در متن فارسی
فلش باید
←باشد نه→، چون جهت خواندن از راست به چپ است.
نکتهی عملی: اگر متنی روی صفحه بههمریخته دیدی، اول فرض نکن فایل خراب است. همان فایل را در یک ویرایشگر متنی ساده باز کن. اگر آنجا درست بود، مشکل نمایش است نه داده — و درمانش جای دیگری است.
PDF فارسی
PDF دو جنس کاملاً متفاوت دارد و تشخیصشان اولین کاری است که باید بکنی:
- PDF متنی — متن واقعاً داخلش هست. میتوانی در آن جستجو کنی و متن را انتخاب و کپی کنی.
- PDF اسکنشده — عکسِ کاغذ است. جستجو جواب نمیدهد و متن انتخاب نمیشود.
آزمون یکثانیهای: فایل را باز کن و سعی کن یک کلمه را انتخاب کنی. اگر شد، متنی است. اگر نشد، اسکن است.
برای PDF متنیِ فارسی، خواندن معمولاً کار میکند ولی دو مشکل رایج دارد: ترتیب حروف در بعضی فایلها بههمریخته درمیآید (بستگی به برنامهای دارد که PDF را ساخته)، و ترتیب ستونها در جدولها گم میشود.
بهخاطر بسپار قبل از هر کاری با PDF فارسی، یک صفحهاش را امتحان کن، نه کلش را. اگر آن یک صفحه درست خوانده شد، برو جلو. اگر نه، کل نقشهات عوض میشود — و بهتر است الان بفهمی، نه بعد از دو مرحله (همان «کوچکترین قدم» فصل ۲.۵.۵).
PDF اسکنشده و OCR فارسی
برای اسکن، باید عکس به متن تبدیل شود. اسم این کار OCR است.
و صادقانه: OCR فارسی سختتر از انگلیسی است. دلایلش فنی است — حروف به هم میچسبند، شکل هر حرف در اول و وسط و آخر کلمه فرق میکند، و نقطهها نزدیک هماند. یعنی «ب» و «پ» و «ت» و «ث» فقط در تعداد و جای نقطه فرق دارند.
پس چه انتظاری داشته باش:
- اسکن تمیز و تایپشده — معمولاً قابلقبول، با چند غلط.
- اسکن کج، کمکیفیت، یا فکسشده — پرغلط. برای کارِ دقیق قابل اتکا نیست.
- دستنوشته — روی آن حساب نکن.
- عدد — از همه خطرناکتر. یک غلطِ عددی باورپذیر است و به چشم نمیآید، درحالیکه غلطِ حرفی را میبینی.
آن آخری قاعدهی مهمی میسازد: هر عددی که از OCR درمیآید باید نمونهای چک شود — مثلاً پنج تا از پنجاه رسید را با اصلشان مقایسه کن. درس ۸.۳ کاملاً دربارهی همین است.
اکسل فارسی: عدد، تاریخ، ی و ک
و حالا پرکاربردترین بخش این فصل. همهی چیزهایی که اینجا میگویم را
در همان فایل نمونهی این دوره میتوانی ببینی:
نمونهها/داده/فروش-۱۴۰۵.csv. بازش کن و خودت بشمار.
۱. ی و ک عربی. در آن فایل، «شرکت ب» دو بار با ک فارسی نوشته
شده و یک بار شركت ب با ک عربی. به چشم تو یکیاند.
برای کامپیوتر دو مشتری مختلف.
و اثرش را با عدد ببین: اگر مشتریها را خام گروهبندی کنی، ۶ مشتری میگیری. ولی مشتری واقعی ۴ تا است. دو خطا، از دو علت جدا:
شركت ب— همان «شرکت ب» است با ک عربی.000— اصلاً مشتری نیست؛ تکهای از یک قیمت است که به ستون مشتری سرریز کرده (بند ۳ پایین).
۲. عدد فارسی و لاتین قاطی. در همان فایل یک تاریخ با ارقام
فارسی نوشته شده: ۱۴۰۵/۰۲/۱۵، بقیه با ارقام لاتین. اگر بر اساس
تاریخ مرتب کنی، آن یک ردیف سرِ جای درستش نمینشیند — چون ارقام فارسی و لاتین
نویسههای متفاوتی هستند.
۳. کاما در عدد، ساختار را میشکند. این را در فصل ۰.۲ دیدی و
اینجا دلیل فنیاش را میگویی: در CSV کاما جداکنندهی ستون است. پس
450,000 دو ستون حساب میشود، آن ردیف
۷ ستون پیدا میکند بهجای ۶، و همهی ستونهای بعدی یکی
میلغزند. نتیجه: قیمت 450 خوانده میشود و مشتری
000.
۴. تاریخ شمسی. بند بعدی.
و درمانِ هر چهار: قبل از هر محاسبهای، یکسانسازی. صریح بگو «اول ی و ک را یکسان کن، ارقام فارسی را به لاتین تبدیل کن، و ردیفهایی که تعداد ستونشان با بقیه نمیخواند را جدا فهرست کن — بعد حساب کن.»
اسم و تاریخ شمسی
تاریخ شمسی برای بیشتر ابزارها یک تاریخ نیست — یک
رشتهی متنی است. یعنی نمیداند ۱۴۰۵/۰۱/۰۵ قبل از
۱۴۰۴/۱۲/۲۹ نیست.
سه پیامد عملی:
- مرتبسازی ممکن است درست باشد یا نباشد — بستگی به قالب
دارد. قالب
YYYY/MM/DDبا صفرِ پیشوند، اتفاقاً درست مرتب میشود. قالبِ بدونِ صفر (1405/1/18) نه. - محاسبهی فاصلهی دو تاریخ جواب غلط میدهد، مگر اینکه واقعاً تبدیل شود.
- چند قالب در یک ستون — همان چهار قالبِ فایل نمونه — هر تحلیلی را میشکند.
اسمهای فارسی هم دو تله دارند: نیمفاصله، و شکلهای مختلف یک
حرف. در پوشهی نمونهها/اسناد/ همین حالا ۱۳ نیمفاصله
در ۵ فایل هست. یعنی «میشود» و «میشود» برای جستجو دو کلمهی مختلفاند.
و همین است که در همین جزوه هم حل شده: جستجوی این جزوه ی و ک و نیمفاصله و اعراب و ارقام فارسی را یکسانسازی میکند — برای همین «مرجوعي» با ی عربی، «مرجوعی» را پیدا میکند. همان کاری که تو هم باید با دادهات بکنی.
چه چیزی خوب کار میکند
این بخش عمداً آخر است، چون بدون آن تصویر غلط میماند.
خوب کار میکند:
- فهمیدن متن فارسی. خواندن، خلاصهکردن، دستهبندی، تشخیص اینکه یک متن دربارهی چیست — اینها روی فارسی خوب جواب میدهند.
- نوشتن فارسی. پیشنویس، بازنویسی، عوضکردن لحن.
- پیدا کردن همین مشکلاتی که در این فصل گفتیم. این ضدشهودیترین و مفیدترین نکته است: ایجنت در تشخیص کثیفیِ دادهی فارسی خوب است. همان کاری که در فصل ۰.۲ دیدی — فهرستِ تناقضهای فایل.
- یکسانسازی — اگر بخواهی، همان تبدیل ی و ک و ارقام را برایت انجام میدهد.
- ترجمهی خطاهای انگلیسی — فصل بعدی.
احتیاط لازم دارد: عدد از OCR · تاریخ شمسی در محاسبه · گروهبندی روی متن فارسیِ یکسانسازینشده · و جدولِ داخل PDF.
خلاصهی صادقانه: مشکل فارسی در فهمیدن نیست، در داده است. و داده را میشود تمیز کرد.
تمرین (ساختنی + توضیحی)
یک فایل فارسی نمونه بده و بنویس کجا خوب بود و کجا نه.
۱. فایل نمونهها/داده/فروش-۱۴۰۵.csv را بده و
بپرس: «در این فایل چه چیزهایی هست که یک تحلیل را خراب میکند؟» — بدون اینکه
خودت اسم چیزی را ببری.
۲. جوابش را با فهرست بخش ۴.۲.۴ مقایسه کن. چند مورد از آن چهار مورد را پیدا کرد؟ چیزی پیدا کرد که ما نگفته بودیم؟
۳. بعد بگو «مشتریهای یکتا را بشمار» و ببین چه عددی میدهد — و آیا خودش یکسانسازی میکند یا نه.
۴. و اگر یک فایل فارسیِ واقعی از کار خودت داری (روی کپی — فصل ۰.۹)، همین را رویش تکرار کن.
پاسخنامه — چه چیزی باید دیده باشی
خوب بود: «هر چهار مورد را پیدا کرد — چهار قالب تاریخ، ی و ک عربی، ردیفِ ازجادررفته، و مرجوعیها. یکی را هم پیدا کرد که در فهرست ما نبود: دو ردیف در یک تاریخ با همان محصول و همان تعداد، که معلوم نیست دو سفارش است یا یک سفارشِ دوباره ثبتشده.»
شمارش مشتریها: «بار اول ۶ داد. وقتی پرسیدم مطمئنی، خودش
شركت ب را پیدا کرد و گفت ۵. تا وقتی نگفتم آن
000 از کجا آمده، به عدد ۴ نرسید.»
نه، خوب نبود: «تا وقتی نپرسیدم، عدد ۶ را با اطمینان داد. یعنی پیدا کردنِ مشکل را خوب انجام میدهد، ولی خودبهخود اعمالکردنش را نه — باید بخواهی.»
چرا این جواب خوب است: تفاوتِ «میتواند تشخیص بدهد» و «خودش انجام میدهد» را دیده. همان چیزی که بخش ۴.۲.۶ میگوید: در تشخیص خوب است، پس از او بخواه تشخیص بدهد — فرض نکن کرده.