معاونت:آموختار برائے استخراج شماریات از ٹول سرور

آزاد دائرۃ المعارف، ویکیپیڈیا سے
Jump to navigation Jump to search

ویکیپیڈیا سے متعلق معلومات حاصل کرنے کے دو طریقے ہیں:

  1. ٹول سرور کے ذریعہ قاعدہ معطیات (database) سے معلومات حاصل کی جائے یا ویکیپیڈیا قاعدہ معطیات کو زیراثقال کرلیا جائے۔
  2. API:Query کے ذریعہ میڈیاویکی مصنع لطیف سے حاصل کی جائے۔

درج ذیل آموختار پہلا طریقہ یعنی ٹول سرور کے ذریعہ معطیات حاصل کرنے کے متعلق ہے۔ دوسرے طریقہ یعنی میڈیاویکی سے معطیات حاصل کرنے کے طریقہ کار کے لیے ملاحظہ فرمائیں آموختار برائے استخراج شماریات از میڈیاویکی۔

آغاز[ترمیم]

اس آموختار کو پڑھنے سے قبل روبہ کو شروع کرنے اور اسے ٹول سرور پر چلانے کے لیے ذیل کے دو صفحات ملاحظہ فرمالیں:

ویکیمیڈیا ٹول سرور (انگریزی: wikimedia toolserver) ایک مجموعۂ معیلات ہے جسے ویکیمیڈیا منصوبوں کے لیے لکھے گئے آلات تک مشترکہ رسائی کے لیے استعمال کیا جاتا ہے۔

مائی ایس کیو ایل[ترمیم]

ٹول سرور قاعدہ معطیات مائی ایس کیو ایل (MySql) مصنع لطیف پر مبنی ہے، اس لیے ٹول سرور کے معطیات سے استفادہ کے لیے MySql زبان اور ٹول سرور پر کھاتہ ہونا لازمی ہے۔

معطیات تک رسائی بذریعہ صارف کھاتہ[ترمیم]

  • ٹول سرور قاعدہ معطیات سے آگاہی کے لیے اس دستاویز کو ملاحظہ فرمائیں۔
  • قاعدہ معطیات کے نام حاصل کرنے کے لیے اس جدول کو ملاحظہ فرمائیں۔
  • قاعدہ معطیات تک رسائی کے لیے یہاں جملہ زبانوں کے فراہم کردہ رموز معلوم ہونا ضروری ہے۔

جدول ہائے ٹول سرور[ترمیم]

جدول ہائے ٹول سرور
جدول ہائے اخراجہ 1.7 میڈیاویکی

جدول ہائے ٹول سرور کی معلومات کے لیے اس ربط اور اس ربط کو ملاحظہ فرمائیں۔

استخراج شماریات یا queries[ترمیم]

تطبیقی ترمیز کے لیے اس ربط کو ملاحظہ فرمائیں۔

نمونہ ترمیز ہائے مائی ایس کیو ایل[ترمیم]

مائی ایس کیو ایل کی ترمیزوں کی تعداد اور ٹول سرور اوامر (commands) سے واقفیت حاصل کرنے کے لیے یہ ربط ملاحظہ فرمائیں۔

ترمیز 1: فہرست 500 مضامین جن میں لفظ کتاب موجود ہے، زمرہ کے لیے page_namespace = 14 تحریر کریں۔

SELECT page_title FROM page WHERE page_namespace = 0 AND page_is_redirect = 0 AND page_title LIKE "%_کتاب_%" LIMIT 500;

ترمیز 2: رجوع مکررات جن میں درون ویکی روابط موجود ہیں۔

SELECT /*SLOW OK */ page_title  FROM page  JOIN langlinks ON page_id = ll_from WHERE page_namespace = 0 AND page_is_redirect = 1 GROUP BY page_title ORDER BY count(ll_from) DESC;

ترمیز 3: ترامیم صارف بلحاظ تاریخ۔

SELECT /*SLOW OK */
  DATE(CONCAT(YEAR(rev_timestamp),"-",MONTH(rev_timestamp),"-",DAY(rev_timestamp))) AS DAY,
  COUNT(rev_timestamp) AS revisions
FROM revision
WHERE rev_user_text = 'محمد شعیب'
GROUP BY DAY;

ترمیز 4: تخلیق شدہ مضامین از صارف بلحاظ تاریخ۔

select /*SLOW OK */ page_title, DATE(CONCAT(YEAR(rev_timestamp),"-",MONTH(rev_timestamp),"-",DAY(rev_timestamp))) AS DAY 
from revision join page on rev_page=page_id where page_namespace=0 and rev_user_text='محمد شعیب' and rev_parent_id=0 and page.page_is_redirect = 0
GROUP BY DAY;
order by rev_timestamp;

ترمیز 5: استخراج ہم نام زمرہ جات۔

SELECT DISTINCT /*SLOW OK */ page_title FROM categorylinks JOIN page where cl_to = page_title and page_is_redirect = 0;

ترمیز 5: مساوی زمرہ جات کے لیے (اس امر کے ذریعہ:

sql enwiki_p < zumreh.sql >cat.txt

)

SELECT /* SLOW_OK */ cl_to
FROM categorylinks
WHERE 
	cl_from IN
		(SELECT DISTINCT ll_from
		FROM langlinks
		WHERE ll_lang = "ur" )
	AND
	cl_to NOT IN
		(SELECT DISTINCT page_title 
		FROM langlinks LEFT JOIN page
			ON page_id = ll_from        
		WHERE ll_lang = "ur"
			AND page_namespace = 14)
GROUP BY cl_to;

ترمیز 6: استخراج نام تصاویر جو انبار عام اور اردو ویکیپیڈیا دونوں جگہ موجود ہیں اور انہیں اردو ویکی سے حذف کیا جانا چاہیے۔

SELECT /*SLOW OK */ CONCAT('* [[:commons:Image:', db1.img_name, ']] = [[:ur:Image:', db2.img_name, ']] (hash: ', db1.img_sha1, ')') AS collision
FROM commonswiki_p.image db1 
JOIN urwiki_p.image db2 ON db1.img_sha1 = db2.img_sha1 WHERE db1.img_sha1 <> '';

پائیتھون کے ساتھ ربط[ترمیم]

ٹول سرور میں کھاتہ بننے کے بعد ٹول سرور میں ہی آپ کے صارف نام کے folder میں ایک

.my.cnf

نامی ملف موجود ہوگی، اس ملف میں ٹول سرور میں آپ کے کھاتہ کا نام اور کلمہ شناخت درج ہوگا، ان دونوں کو user-config نامی ملف میں درج ذیل طریقہ سے رکھ دیں:

console_encoding = 'utf-8'
db_username = "اپنا ٹول سرور پر صارف نام درج کریں"
db_password = "کلمہ شناخت جو my.cnf نامی ملف میں موجود ہے "

یہ ترمیز ٹول سرور سے معطیات حاصل کرنے کے لیے ضروری ہے، اس ترمیز کے درج کرنے کے بعد ہی روبہ معطیات نکال سکے گا۔

ترمیز برائے اتصال از Mysql کوئری[ترمیم]

 
#!/usr/bin/python
# -*- coding: utf-8  -*-
import catlib ,pagegenerators
import wikipedia,urllib,gzip,codecs,re
import MySQLdb as mysqldb
import config

site  = wikipedia.getSite("ur")
query = open("tusn.sql").read()#---نام ایس کیو ایل ملف

#query = "SELECT page_title,page_id FROM page LIMIT 10"   
wikipedia.output(u'Executing query:\n%s' % query)


conn = mysqldb.connect("urwiki-p.db.toolserver.org", db = site.dbName(),
                       user = config.db_username,
                       passwd = config.db_password)

cursor = conn.cursor()
query = query.encode(site.encoding())
cursor.execute(query)
results = cursor.fetchall()

ترمیز پائیتھون کی مثال[ترمیم]

#!/usr/bin/python
# -*- coding: utf-8  -*-
import catlib ,pagegenerators
import wikipedia,urllib,gzip,codecs,re
import MySQLdb as mysqldb
import config
pagetop=u"'''یومیہ بذریعہ روبالہ بتاریخ''''': ~~~~~''\n\n"
pagetop+=u'\n{| class="wikitable sortable"\n'
pagetop+=u'!شمار!!صفحہ!!ترمیز صفحہ\n|-'
pagedown=u'\n|}\n[[زمرہ:ویکیپیڈیا]]
[[زمرہ:جانچ]]
[[زمرہ:خصوصیات ویکیپیڈیا]]
'
adress=u"ویکیپیڈیا:ریتخانہ"
message=u"روبالہ:جانچ"

count=0
line_items=' '

#---------------------------------------------- sql part--------------
site  = wikipedia.getSite("ur")
#query = open("file name").read()#--you can add you sql name
query = "SELECT page_title,page_id FROM page LIMIT 10" 
wikipedia.output(u'Executing query:\n%s' % query)

conn = mysqldb.connect("urwiki-p.db.toolserver.org", db = site.dbName(),
                       user = config.db_username,
                       passwd = config.db_password)
cursor = conn.cursor()
query = query.encode(site.encoding())
cursor.execute(query)
results = cursor.fetchall()
#---------------------------------------------- end of sql part---------
for row in results:
    count+=1
    for i in range(0,len(row)):
        item=unicode(str(row[i]).strip(),'UTF-8')
        line_items+=u'{{subst:formatnum:'+item+u'}}||'   
    line=line_items.strip()
    text+= u'\n|{{subst:formatnum:' +str(count)+u'}}||'+ line+u'\n|-'

text=pagetop+text+pagedown

page = wikipedia.Page(site,adress)
page.put(text,message)

نمونہ جاتی روبہ جات[ترمیم]

متعلقہ روابط[ترمیم]

بیرونی روابط[ترمیم]