چرا آزادی رو دوست دارم: فراوانی حروف فارسی در یک متن

سوال دوستانی که در مورد صفحه کلید استاندارد بحث می کنن اینه که هر حرف فارسی در متون فارسی چقدر تکرار شده؛ به عبارت دیگه هر کاراکتر چقدر به درد می خوره تو فارسی نوشتن. اینو قبلا هم یک دوست تایپیست حرفه ای ازم خواسته بود بررسی کنم. امروز حوصله کردم و جواب در مورد متنی مثل قانون اساسی اینه (پی نوشت دوم رو بخونین):

درصد استفاده از حروف فارسی در قانون اساسی

و اگر به طور دقیق تعداد کلمات و درصدهای دقیق تر رو می خواین می تونین با دانلود فایل صفحه گسترده فراوانی حروف فارسی در قانون اساسی ایران با ODF فرمت اوپن آفیس بهش برسین.

برنامه ای که اینکار رو می کنه اینه:


#!/usr/bin/perl

use utf8;
binmode STDOUT, ':utf8';
binmode STDIN, ':utf8';

@userinput = ;

$string = ''; #make a single $string from the standard input
foreach $line (@userinput) {
        $string .= $line;
}

# do some adjustments, say replacing arabic Ya with Persian Ya
$string =~ s/ي/ی/g;
$string =~ s/ك/ک/g;

#$allLetters = "آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ۱۲۳۴۵۶۷۸۹۰";
$allLetters = "آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیئ";

#explode and check the count of each letter
$total = 0;
for (my $key = 0; $key < length($allLetters); $key++) {
	$thisLetter = substr ($allLetters, $key, 1);
	$tedad{$thisLetter} = ()= $string =~ /$thisLetter/g; 
	$total += $tedad{$thisLetter};
}

foreach $key (sort (keys %tedad)) {
	print $key, "\t", $tedad{$key}, "\t", int($tedad{$key} / $total * 1000) / 10, "\n";
}

که همونطور که می بینین اطلاعات رو از ورودی استاندارد می گیره و تعداد هر کاراکتری که در رشته string اومده باشه رو توسط اپراتور مخفی =() می سنجه - برای همینه که می گن پرل زبون پردازش متنه و فوق العاده قشنگ و سخت برای خوندن. مثلا به این خط که قلب این برنامه است نگاه کنین:


	$tedad{$thisLetter} = ()= $string =~ /$thisLetter/g; 


میگه توی رشته فقط «همین حرف که الان داریم می شمریم» رو نگه دار و بعد با اون اپراتور جالب ببین چند تا کاراکتر توش مونده و بعد تعدادش رو بده به متغیر هشی که کلیدش همین کاراکتر است.

اینم بگم که این رو با هر چیز دیگه (مثلا برنامه های غیر آزاد) هم می شه نوشت یا روی ویندوز هم اجرا کرد ولی حالا که من کردم لوگوم رو می زنم پاش (:

نوشته های مشابه:
- بررسی سال های تولد در اطلاعات افشا شده ۳۰۰۰۰۰۰ کارت بانکی
- تعداد فراوانی حروف فارسی در نوشته‌های روزمره (ای بابا قبلا ظاهرا اینو نوشته بودم ولی یادم نبود!)

پی نوشت
۱- اگر واقعا نیاز دارین در مورد متنی این رو بدونین و امکان اجرای برنامه رو توسط خودتون ندارین، برام ایمیل کنین به jadijadi@gmail.com و براتون انجام می دم می فرستم. فقط متن بدون شک باید در فرمت متنی باشه. پی دی اف و اینها نیازمند تبدیل هستن.
۲- همونطور که شاهین هم در کامنت ها گفته، قانون اساسی اصلا متن خوبی برای سنجش «میزان استفاده حروف در زبان فارسی» نیست. اولا که کلمات غیرمرسومی داره و احتمالا سطح عربی اش زیاده و از اونطرف یک متن طبیعی نیست و مثلا کلمه «اصل» توش حداقل به تعداد اصول قانون اساسی استفاده شده و احتمالا هیچ رمانی اینقدر «ص» توش نداره (: