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

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

چیکار می کنیم؟ من با وردپرس وبلاگ می‌نویسم. پس اول از بخش مدیریت از منوی Tools، کل پست‌ها و کامنت‌های سایت رو Export میکنم. اینجوری یک فایل ایکس ام ال دارم که همه مطالب سایت توش هستن.

شمردن کلمات مهمل که بسیار ساده است. دستور grep عالی لینوکس. این دستور می‌تونه خطوطی که یک کلمه رو دارن رو جدا کنه یا کارهای مشابه. یک سوییچ عالی به اسم o هم داره که میگه فقط بخش پیدا شده رو در یک خط مجزا بنویسه. اگر این تعداد خطها رو بشمریم در می یاد که اون کلمه مورد جستجو چند بار در فایل بوده:


 jadi@jeducation:~/Downloads$ grep -o مهمل wordpress.2012-12-05.xml | wc -l 
 29


بعله (: من بیست و نه بار از کلمه مهمل استفاده کردم (: اما چیزی که جالبتره اینه که از کی شروع کردم به استفاده. اینبار باید برنامه بنویسم. پایتون همیشه انتخاب راحت و خوبیه. برنامه ایکس ام ال رو می خونه، درختش رو بررسی می کنه و توی همه مطالب و کامنت‌هایی که از عبارت مهمل استفاده کردن، تاریخ رو توی خروجی می نویسه:
# -*- 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();

for child in root.iter('item'):
	date = child.find('wppost_date').text
	body = child.find('content_encoded').text
	title = child.find('title').text

	try:
		if re.search (u'مهمل', body) or re.search(u'مهمل', title):
			print date;
	except:
		print date;

for child in root.iter('wpcomment'):
	date = child.find('wpcomment_date').text
	body = child.find('wpcomment_content').text

	try:
		if re.search (u'مهمل', body):
			print date
	except:
		print date;


اگر پایتون بلدین (یا حتی بلد نیستین ولی جرات داشتین کد رو نگاه کنین) می بینین که کد اصلا خوب نیست. دلیل تاریخی داره. اول نمی دونستم تو کامنت هم هست و بعد کامنت ها رو با یک کپی پیست جدا کردم. بعد دیدم گاهی اکسپشن می گیرم و بعد از بررسی فهمیدم بعضی مطالب متن یا عنوان نداره (چرا؟!) و در نتیجه خروجی مشکل پیدا می کنه که با یک اکسپشن اضافه کردن سر و ته مشکل رو هم آوردم و رسیدم به نتیجه‌ای که می‌خواستم:
jadi@jeducation:~/Downloads$ time python parsejadi.py 
2011-12
2012-07
2012-11
2011-09
2011-10
2011-10
2012-02
2012-06
2012-10
2012-11
2012-11
2012-11
2012-11
2012-12
2009-06
2009-05
2011-08
2011-09
2011-10
2011-10
2011-11
2012-06
2012-06
2012-08
2012-10
2012-10
2012-10
2012-10
2012-11

real	0m0.738s
user	0m0.700s
sys	0m0.028s
jadi@jeducation:~/Downloads$ 

میبینین که توی اون خطی که تاریخ رو حساب کردیم یک [7:] دارم که باعث می‌شه فقط سال و ماه رو ذخیره کنم چون این نمودار با معنی‌تری بهمون می‌ده. راستی گفتم نمودار. اینم نمودارش (مشخصه که با لیبره آفیس لینوکس):

ظاهرا که همیشه از کلمه مهمل استفاده می‌کردم ولی این دو ماه بیشتر هم شده (:

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

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