دوشنبه، خرداد ۱۰، ۱۳۸۹

ابزاری برای شمارش تکرار کلمات یک متن

يكي از معيارهاي معمول سنجش ادبي يك نوشته (نه لزوما نوشته‌اي ادبي) تنوع واژگان و وسعت دامنه‌ي كلمات مورد استفاده در آن نوشته است. بالطبع تكرار زياد يك كلمه به اين تنوع لطمه مي‌زند. به عنوان مثال من اخيرا متوجه شده‌ام (به واسطه‌ي راهنمايي يكي دو نفر از دوستان) كه حرف اضافه‌ي "توي" زياد در نوشته‌ام ديده مي‌شود. وقتي دقت كردم، ديدم دليلش اين است كه خيلي جاها به جاي "در"، "وسط"، "داخل"، حتا "ته" از اين كلمه استفاده كرده‌ام (گاهي آگاهانه و گاهي ناخودآگاه).

امكاني كه Microsoft Word براي شمارش تعداد تكرار يك كلمه در متن به دست مي‌دهد، محدود است:

يك) جستجوي عادي و شمردن دفعات تكرار با امكان Find

دو) يافتن و رنگي كردن‌ يكجاي همه‌ي موارد و شمردن چشمي (كه با اولين تغيير در متن مجبور به تكرار جستجو هستيد) با امكان Find->Reading Highlight

سه) جايگزين كردن كلمه با خودش (كه مي‌توانيد به جاي كلمه‌ي دوم بنويسيد &^) بصورت يكجا و استفاده از گزارشي كه برنامه از تعداد جايگزيني‌هاي انجام شده مي‌دهد با امكان Replace->Replace All

مشكلات اين روش‌ها كم و بيش پيداست و يكي از مهم‌ترين آنها لزوم تكرار روش براي يكان يكان كلمات مورد نظر است.

من ماكروي مفيدي را اينجا پيدا كردم كه تعداد كلمات يك متن را مي‌شمرد، فايل متني ديگري باز كرده و دفعات تكرار تمام كلمات را به ترتيب تواتر (فركانس) يا الفبا زير هم مي‌نوشت. مي‌توانيد با دستكاري كد ماكرو، برخي كلمات و عبارات را از شمارش مستثنا كنيد (مثلا حروف اضافه).

من فقط دو تغيير در اين ماكرو اعمال كردم:

الف) حذف شرط ماكروي اصلي براي محدود كردن كلمات به واژگان نوشته شده با حروف لاتين

ب) اضافه كردن امكان بكارگيري ماكرو فقط براي بخش خاصي از متن. به اين ترتيب كه اگر بخشي از متن را انتخاب كرده و ماكرو را اجرا كنيد، كلمات آن بخش انتخاب شده شمرده مي‌شوند و اگر ماكرو را بدون انتخاب بخش خاصي از متن اجرا كنيد، كلمات كل متن شمارش خواهد شد.

ماكرو اصلاح شده را از اينجا مي‌توانيد برداريد.

نكاتي كه باقي مانده:

- اضافه كردن امكان استثنا كردن كلمات فارسي از شمارش، كار بيشتري مي‌طلبيد و من فقط به حذف علائم نگارشي مشترك بين فارسي و لاتين بسنده كردم.

- چه بسا بسامد يك كلمه در كل متن عددي معقول باشد ولي كنار هم همنشيني موارد تكرار باعث افت ادبي متن شود كه لازمه‌ي يافتن چنين مواردي اين است كه ماكرو را به ازاي بخش‌ بخش متن (و نه كليت آن) اجرا كنيد.

- براي استخراج بسامد واقعي يك كلمه معمولا بايد مشتقات آن كلمه را نيز در شمارش لحاظ كرد (به عنوان مثال انواع اشكال صرفي يك فعل يا حالت جمع و مفرد يك اسم است). چنين كاري از عهده‌ي اين ماكرو برنمي‌آيد.

۵ نظر:

Sohail S. گفت...

استفاده هوشمندانه از تکنولوژی در هنر

Sohail S. گفت...

من بر اساس کارم (که با احتمالات و سری زمانی سر و کار داریم) یکی دو پیشنهاد به فکرم رسید که البته پیاده سازی آنها ساده نیست. اما به هر حال می گویم:

احتمالا توزیع بهینه یک توزیع یکنواخت نیست. مثلا احتمالا توزیع power-law ترجیح دارد (حصوصا با توجه با دنباله و تعداد (تنوع) زیاد کلماتی که با تکرار زیاد ظاهر می شوند).
باید دید توزیع کلمات در یک اثر برجسته (مثلا اولیس یا دیوان حافظ ...) چگونه است.

تحلیل آماری دیگری که به نظرم می رسد الگوی زمانی تکرار یک کلمه است. توزیع فاصله های بین تکرار های متوالی و هیستوگرام ِآن می توان مفید باشد (چزی شبیه این در کارمان داریم بنام Inter-Spike Interval = ISI)

پیشنهاد دیگر انجام کاری که گفتی بر اساس حروف (بجای کلمات است) است. این باعث می شود نویسنده بتواند متنی بسازد که در آن از آواهای متنوع استفاده شده باشد.

در ضمن یادم آمد که استاد من اخیرا مقاله ای چاپ کرده در مورد تعیین میزان اطلاعاتمندی هر کلمه در یک متن.او آن تحلیل رابرای متن های باستانی که تعداد کلماتش کم است بکار برده است. (این تحلیل مجاورت و چینش کلمات را نیز در نظر می گیرد). حالا به فکرم رسید ممکن است نتایجی که آن نوع تحلیل میدهد در کار یک نویسنده هم بدرد بخورد.

علی فتح‌اللهی - Ali Fatolahi گفت...

خیلی به درد میخوره مرسی

Sohail S. گفت...

این رو هم ببین
http://en.wikipedia.org/wiki/Dissociated_press

بر اساس متن داده شده یک متن دیگر تولید می کند که همان خصوصیات آماری را دارد (کلمات مشابهی تولید می شود).

Sohail S. گفت...

این وبسایت رو ببین و متنت رو در آن بفرست
http://www.eskimo.com/~rstarr/poormfa/travesty.html
البته مرتبه (اوردر) کمتر از 7 برای منم کلمات با معنی نداد. طول رشته خروجی رو هم زیاد کن.

آدرسش رو از اینجا پیدا کردم: http://en.wikipedia.org/wiki/Cut-up_technique