You are here

شمارش کلمات در خوراک

Error message

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in book_prev() (line 775 of /home/molavy/public_html/modules/book/book.module).

اغلب وبلاگ ها قسمتی به نام خوراک RSS دارند. یک خوراک RSS یک سند XML ساده است که دربردارنده اطلاعاتی درباره وبلاگ و تمام نوشته ها و مدخل های آن است. اولین مرحله برای شمارش کلمات و در هر وبلاگ خواندن صحیح خوراک ها است. خوشبختانه، یک ماژول عالی با نام Universal Feed Parser برای این کار موجود است، می توانید آن را از آدرس زیر دریافت کنید:

http://www.feedparser.org

 

این ماژول کار خواندن عنوان ها، لینک ها و تمام نوشته های داخل هر خوراک RSS یا Atom را راحت می کند. مرحله بعد ساخت یک تابع است که تمام کلمات را از یک خوراک استخراج می کند.

یک فایل جدید با نام generatefeedvector.py ایجاد کنید و کد زیر را در آن وارد کنید:

 

import feedparser

import re

# Returns title and dictionary of word counts for an RSS feed

def getwordcounts(url):

# Parse the feed

d=feedparser.parse(url)

wc={}

# Loop over all the entries

for e in d.entries:

if 'summary' in e: summary=e.summary

else: summary=e.description

# Extract a list of words

words=getwords(e.title+' '+summary)

for word in words:

wc.setdefault(word,0)

wc[word]+=1

return d.feed.title,wc

خوراک های RSS و Atom همیشه با یک عنوان و یک لیست از مداخل همراه است. یک مدخل معمولا یک برچسب خلاصه و یا توضیح دارد که دربردارنده متن اصلی مدخل ها است. تابع getwordcounts این خلاصه ها را به تابع getwords ارسال می کند. تابع getwords تمام کد های HTML را از متن حذف می کند و کلمات را در متن با استفاده از کاراکتر های غیر الفبایی جدا استخراج می کند و یک لیست از کلمات را برمی گرداند.

تابع getwords را به generatefeedvector.py اضافه می کنیم:

def getwords(html):

# Remove all the HTML tags

txt=re.compile(r'<[^>]+>').sub('',html)

# Split words by all non-alpha characters

words=re.compile(r'[^A-Z^a-z]+').split(txt)

# Convert to lowercase

return [word.lower( ) for word in words if word!='']

حالا ما نیاز به یک لیست از خوراک ها داریم که با آنها کار کنیم. اگر شما علاقه داشته باشید می توانید یک لیست از آدرس های خوراک برای یک مجموعه وبلاگ خودتان ایجاد کنید، یا اینکه می توانید از لیست ۱۰۰ تایی از لینک خوراک هایی که از ایجاد شده است، استفاده کنید.این لیست با انتخاب خوراک های از وبلاگ هایی با بیشترین ارجاء انتخاب شده است. البته وبلاگ هایی که در خوراک ها متن کامل را نداشتند و یا بیشتر حاوی عکس بودند حذف شده اند.

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

http://segaran.com/clusters/feedlist.txt

 

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

کدی که یک حلقه بر روی خوراک ها و مجموعه داده اصلی ایجاد می کند کد اصلی ما در فایل generatefeedvector.py است.

 

بخش اول کد حلقه بر روی هر خط از feedlist.txt اجرا می شود و شمارش لغات بر روی هر وبلاگ را ایجاد می کند، همچنین تعداد وبلاگ هایی که هر لغت در آنها نمایش ظاهر شده است(apcount). این کد را به آخر فایل generatefeedvector.py اضافه می کنیم:

apcount={}

wordcounts={}

for feedurl in file('feedlist.txt'):

title,wc=getwordcounts(feedurl)

wordcounts[title]=wc

for word,count in wc.items( ):

apcount.setdefault(word,0)

if count>1:

apcount[word]+=1

مرحله بعدی ایجاد لیست لغاتی است که در شمارش ها در هر وبلاگ استفاده شده است. از آنجایی که کلماتی مانند “the” در اغلب وبلاگ ها استفاده شده است و بعضی لغات مانند “flim-flam” ممکن است تنها در یکی از وبلاگ ها استفاده شده باشد. شما می توانید تعداد کل لغات با درصد حداکثر و حداقل کاهش دهید. در این مورد، شما می توانید با قید ۱۰ درصد پایین و ۵۰ درصد بالا شروع کنید و اگر باز هم دیدید که کلمات عمومی خیلی زیادی وجود دارند یا اینکه کلمات عجیب و کم استفاده زیادی وجود دارند این اعداد را تغییر دهید:

wordlist=[]

for w,bc in apcount.items( ):

frac=float(bc)/len(feedlist)

if frac>0.1 and frac<0.5: wordlist.append(w)

مرحله نهایی این است که از لیست لغات و لیست وبلاگ ها برای ایجاد یک ماتریس بزرگ از همه کلمات و شمارش آن برای هر وبلاگ استفاده کنیم:

out=file('blogdata.txt','w')

out.write('Blog')

for word in wordlist: out.write('\t%s' % word)

out.write('\n')

for blog,wc in wordcounts.items( ):

out.write(blog)

for word in wordlist:

if word in wc: out.write('\t%d' % wc[word])

else: out.write('\t0')

out.write('\n')

برای ایجاد فایل شمارش لغات generatefeedvector.py را از خط فرمان اجرا می کنیم

c:\code\blogcluster>python generatefeedvector.py

دانلود کردن تمام خوراک ها ممکن است دقایقی زمان ببرد، اما در انتها یک فایل خروجی با نام blogdata.txt خواهیم داشت. این فایل را باز کنید تا مطمئن شوید یک جدول که سلول های آن با کاراکتر تب از هم جدا شده اند و ستون های از کلمه و ردیف هایی از بلاگ ها دارید. این فرمت فایل توسط تابع ها در این فصل استفاده می شوند. بنابراین بعدا شما می توانید یک مجموعه داده دیگر یا حتی بر روی یک فایل صفحه گسترده را برای استفاده از الگوریتم های دسته بندی استفاده کنید.

 

Add new comment

انیمیشن پیام راشل کوری