چرا گنو/لینوکس رو دوست دارم: شمردن کلمات به کار رفته شده در وبلاگ

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

برنامه پایتون رو اینطوری تغییر می‌دم:

#!/usr/bin/python
# -*- coding: utf8 -*- 

from xml.dom import minidom
import xml.etree.cElementTree as et
import re

tree=et.parse('wordpress.2012-12-05.xml')
root=tree.getroot();

wordCount = {}

for child in root.iter('item'):
	date = child.find('wppost_date').text[:7] #find the year and month
	body = child.find('content_encoded').text # post content
	title = child.find('title').text 	  # post title

	try:
		fulltext = title + "\n" + body # all the text in the post = title + body
	except:
		pass

	fulltext = re.sub(ur'[_»«"\'&?؟a-zA-Z‌0-9/=.*+\n-%<>:;،؛,\-)(،۱۲۳۴۵۶۷۸۹۰]', ' ', fulltext) #replace extra chars
	words = fulltext.split() # words is a list of all words in this post

	for word in words:
		wordCount[word] = wordCount.get(word, 0) + 1 # wordCount[word]++

for word in wordCount:
	thisLine = (str(wordCount[word]) + "\t" + word)
	print thisLine.encode("utf-8", "ignore")


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

...
4	همسرش
1	آکر
3	خرمش
1	ویسمن
2	خرما
1	یکباری
1	مانغو
2	احساسم
1	عصبي
61	رشد
1	رشت
1	تریلیان
5	همسرم
32	هیات
1	پورتال
2	پیشانی
6	مدیربسته
4	لری
4	وجدان
...


و البته مشخصه که خیلی طولانی‌تر. بذارین بشمریم که من کلا در زندگی چند کلمه استفاده کردم تو وبلاگم:

jadi@jeducation:~/Downloads/weblog_word_usage$ ./count_all_words.py | wc -l
27880


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

jadi@jeducation:~/Downloads/weblog_word_usage$ ./count_all_words.py | wc -l
23405


جالب نیست؟‌ برای چهار هزار و چهارصد کلمه، من گاهی از نیم فاصله استفاده کردم و گاهی نکردم. حالا مهم نیست (:‌ قدم بعدی سورت کردن است. با جواهر گنو و نشون دادن بیست تا بالایی:

jadi@jeducation:~/Downloads/weblog_word_usage$ ./count_all_words.py | sort -n -r | head -20

خروجی رو براتون نمی‌ذارم چون فقط یکسری حرف ربط بی ربط است.

پروژه جانبی بسیار مهم برای زبان فارسی: همه زبان‌ها یک فایل دارن به اسم نمی دونم چی (کسی می‌دونست لطفا بگه) که توش کلمات «بی ربط» اون زبان نوشته شدن. به اصطلاح همون am و is و are یا امثال «است» و «شد» و «و» و «یا» و … که در اینجور جاها کاربرد داره (می شه اون کلمات رو از فهرست این کلمات که برنامه بهمون داده حذف کرد تا کلمات اختصاصی من به دست بیاد و نه چیزهایی که برای جمله ساختن همه استفاده می کنن). آیا چنین فایلی داریم برای زبان فارسی؟ تو خارجی‌ها اسمش چیه؟

حالا که بیست تا اولی به درد نخوردن، به جاش کل لیست رو می‌برمش توی لیبره آفیس و مثل همیشه نمودار بیشترین کلمات (غیر حرف ربط و استاندارد مثل است و باشد و شد و اینها) رو می‌کشیم تا با یک نمودار قشنگ کار رو تموم کرده باشیم:

پ.ن. این مجموعه مهمل ، یک قسمت دیگه هم داره (: کمی دیرتر ولی.

  • نتیجه گیری اخلاقی:اینقدر من من نکن ;)
    نتیجه گیری بی خودی:به علت گرانی دلار موجود نیست!

    • جادی

      هاها.. اول خودم هم به همین فکر کردم. بعدش دیدم مجموعه «ما شما همه» از «من» بیشتره‌ روحیه ام حفظ شد. البته به هرحال خیلی طبیعی است که توی متن های «من»، کلمه «من» زیاد برای شروع بحث بکار رفته باشه مثلا «من برام جالبه که…» …

      • میدونم ;) . راستی راجع به اون پروژه کلمات بی ربط بهتره خودت یه هکاتون راه بندازی بنویسی.فکر نکنم خیلی زیاد باشه.

  • voltan

    این نمودار نشون میده برادران فیلتر چی بی جهت این سایت رو فیلتر نکن !!‌کلمات ممنوعه زیادی توشه :دی
    ولی این ایدش خیلی جالب بود. دلم میخواد با پی اچ پی پیادش کنم به نظرم به درد ساخت موتور متا میخوره

  • غلامرضا

    به این کلمات stop words‌ می گن:)

  • من و آرش زاد داریم روی یک پروژه کار میکنیم به اسم نگارش
    http://negaresh.org
    که شامل اون قسمت آخری که گفتی در نگارش فارسی نیازه هم هست.
    ارادت!

  • جاوید

    اگه کسی تا حالا نساخته، یه پلاگین وردپرس بسازیم نمودار ببینیم.

  • علی

    تو این سایت یکسری از stop word های فارسی رو میتونی ببینی :
    http://www.mojiry.ir

    من و دو تا از دوستام هم قبلا روی یه پروژه text mining کار میکردیم که یه پیش نیاز کارمون بدست آوردن یکسری از این واژه ها بود که یه لیست پر و پیمون تر شد. من و همه و ما و شما هم stop word هستن :)
    یه سری روش هم تو text mining هم هست که کلمات اختصاصی و شاخص متن رو بتونی بدست بیاری ، الان که اینو خوندم خیلی به نظرم جالب اومد رو وبلاگ های متخلف بزنیم ، ببینیم چی بدست میاد :)

  • mojvar

    از این روش میشه برای بعضی از سایت ها و البته برای مقالات و سخنرانی ها هم استفاده کرد !
    اینکه مثلا فلان ادم که ادعای صلح طلبی داره چندبار از کلمه جنگ استفاده کرده !
    یا سلاح یا …
    حرکت جالبی بود :)

  • اکبر

    English word frequency
    لیستی که باید دنبالش بگردین و چند تا از دانشگاه ها مال خودشون رو درست کردن که اونیکه مفتیه 6000 تا رو شامل می شه.
    مسله اینه که اونا واسه انگلیسی کتابخانه هایی درست کردن که می تونه کلمات مشابه رو تشخیص بده.
    Word stemmer
    Lemmetizer

  • maral

    مثل همیشه عالی بود جادی. و خوبه که «خوب» زیاده ولی «بد» جز کلمات استفاده شده نیست.

  • Pingback: قانون زیف و زندگی روزمره با محوریت کلمات وبلاگ()