در ادامه بررسی کلمات وبلاگ (بعد از شمردن استفاده از مهمل و کارهای آماری فوق العاده جالب روی اون) یک ایده دیگه که در کامنتها مطرح شده رو پیمیگیریم: شمردن کلمات و کاربرد اونها.
برنامه پایتون رو اینطوری تغییر میدم:
#!/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-Z0-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 یا امثال «است» و «شد» و «و» و «یا» و … که در اینجور جاها کاربرد داره (می شه اون کلمات رو از فهرست این کلمات که برنامه بهمون داده حذف کرد تا کلمات اختصاصی من به دست بیاد و نه چیزهایی که برای جمله ساختن همه استفاده می کنن). آیا چنین فایلی داریم برای زبان فارسی؟ تو خارجیها اسمش چیه؟
|
حالا که بیست تا اولی به درد نخوردن، به جاش کل لیست رو میبرمش توی لیبره آفیس و مثل همیشه نمودار بیشترین کلمات (غیر حرف ربط و استاندارد مثل است و باشد و شد و اینها) رو میکشیم تا با یک نمودار قشنگ کار رو تموم کرده باشیم:
پ.ن. این مجموعه مهمل ، یک قسمت دیگه هم داره (: کمی دیرتر ولی.