ویکی‌پدیا:ویرایشگر خودکار/حذف پارامتر اضافی

چگونگی نصب ماژول مبتنی بر پایتون

  1. پوشه نرم‌افزار ویرایشگر خودکار را هر جا که مایلید قرار دهید.
  2. به‌منظور دسترسی آسان‌تر، یک میان‌بر از فایل AutoWikiBrowser.exe بسازید و در دسکتاپ قرار دهید.
  3. کدهای ماژول موردنظر را در جعبهٔ متنی در مسیر ابزارها > ایجاد ماژول قرار دهید (محتویات ازپیش تهیه‌شده آن جعبهٔ متنی را می‌توانید پاک کنید).
  4. گزینهٔ Enabled را تیک بزنید و روی Make module کلیک کنید (اگر خطایی دریافت نکردید، می‌توانید ادامه دهید).
  5. کدهای پایتون موردنظر را تحت عنوان مشخص‌شده در یک فایل با پسوند .py ذخیره کنید و در پوشهٔ plugins در مسیر نصب نرم‌افزار قرار دهید.
  6. مطمئن شوید آخرین نگارش پایتون روی رایانه شما نصب و مسیر آن در متغیر PATH تعریف شده باشد.

در صورت بروز هر مشکل یا پرسش با Yamaha5 مکاتبه کنید.

شروع به کارویرایش

برای شروع مقالات موجود در رده:مقاله‌‌ها با پارامتر تعریف‌نشده در جعبه اطلاعات شهر ایران را به کمک ماژول حذف پارامتر اشتباه، تمیز کنید.

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

کدهاویرایش

  • ماژول
public string ProcessArticle(string content, string title, int ns, out string summary, out bool skip) {
	summary = "+ ماژول حذف پارامتر اضافی";
	skip = false;

	try {
		System.Diagnostics.ProcessStartInfo python = new System.Diagnostics.ProcessStartInfo();
		python.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
		// Make sure the Python exists in PATH.
		python.FileName = "python";
		python.Arguments = @"plugins\remove_extra_parameters.py";

		using(System.IO.StreamWriter file = new System.IO.StreamWriter(@"io.txt", false, System.Text.Encoding.UTF8)) {
			file.Write(content);
		}

		using(System.Diagnostics.Process process = System.Diagnostics.Process.Start(python)) {
			// Don't remove the following line.
			process.WaitForExit();

			var newContent = content;
			if (System.IO.File.Exists(@"io.txt")) {
				newContent = System.IO.File.ReadAllText(@"io.txt");
			}

			return newContent;
		}
	}
	catch {
		return content;
	}
}
  • remove_extra_parameters.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# BY: رضا (User:reza1615 on fa.wikipedia)

import re,string,codecs
boxes=[u'جعبه']
parameters=[u"ارتفاع",u"استان",u"اندازه‌تصویر",u"اندازه تصویر",u"بخش",u"برچسب‌تصویر",u"تراکم‌جمعیت",u"تراکم جمعیت",u"تصویر",u"جمعیت",u"جمله‌خوشامد",u"جمله خوشامد",
u"رشد‌جمعیت",u"رشد جمعیت",u"ره‌آورد",u"روزهای‌یخبندان",u"روزهای یخبندان",u"روی‌نقشه",u"زبان",u"سال‌تأسیس‌شهرداری",u"سال‌شهرشدن",u"سال تأسیس شهرداری",
u"سال شهرشدن",u"شمارروزهای‌یخبندان",u"شهردار",u"شهرستان",u"طول‌جغرافیایی",u"عرض‌جغرافیایی",u"عنوان‌تصویر",u"عنوان تصویر",u"فتوکلاژ",u"مذهب",u"مساحت",
u"میانگین‌بارش‌سالانه",u"میانگین‌بارش",u"میانگین‌دما",u"میانگین بارش",u"میانگین دما",u"نام‌رسمی",u"نام‌محلی",u"نام‌های‌دیگر",u"نام‌های‌قدیمی",u"نام‌های دیگر",u"نام‌های قدیمی",
u"نام محلی",u"نماد‌شهرداری",u"نماد شهرداری",u"نماینده‌مجلس",u"نماینده مجلس",u"وبگاه",u"پانویس",u"پلاک‌اتومبیل",u"پلاک اتومبیل",u"پیش‌شماره",u"کد‌آماری",u"کد آماری",u"latd",
u"latm",u"latNS",u"lats",u"longd",u"longEW",u"longm",u"longs"]

def boxfind(txt):
    txt=txt.replace(u'{{ ',u'{{').replace(u'{{ ',u'{{').replace(u'{{الگو:',u'{{').replace(u'{{template:',u'{{').replace(u'{{Template:',u'{{')
    lines=txt.split(u'\n')
    start=False    
    box=u'\n'
    diff=1
    linebaz,linebasteh=0,0
    for our_box in boxes:
        our_box=our_box.strip()
        up_our_box=our_box[0].upper()+our_box[1:]
        lower_our_box=our_box[0].lower()+our_box[1:]
        for line in lines:
            if line==u'':
                continue
            if line.find(u'{{'+lower_our_box)!=-1 :# lower case    
                start=True
                linebaz,linebasteh=0,0
                box+=u'{{'+lower_our_box+line.split(u'{{'+lower_our_box)[1]+'\n'
                linebaz += line.count( "{{" )
                linebasteh += line.count( "}}" )    
                diff=linebaz-linebasteh
                continue
            if line.find(u'{{'+up_our_box)!=-1 :# upper case
                start=True
                linebaz,linebasteh=0,0
                box+=u'{{'+up_our_box+line.split(u'{{'+up_our_box)[1]+'\n'
                linebaz += line.count( "{{" )
                linebasteh += line.count( "}}" )
                diff=linebaz-linebasteh
                continue
            if start==True and diff!=0:
                linebaz += line.count( "{{" )
                linebasteh += line.count( "}}" )
                diff=linebaz-linebasteh
                box+=line+'\n'
            if diff==0 and start==True:
              break
    return box

def remove_extra_parameters (txt):
    txt=txt.replace(u'\r',u'')
    mybox=boxfind(txt)
    parameters_list=re.findall(r'^\| *([^\=\n]+) *\=(?: *[^\n ]+| *(?:[^\n ]+ ?)+ *)\n' , mybox , re.S|re.UNICODE | re.MULTILINE)
    parameters_list2=re.findall(r'^\|([^\=\n]+)\n',mybox,re.S| re.UNICODE | re.MULTILINE)
    should_rmove=[x.strip() for x in parameters_list if x.strip() not in parameters]
    should_rmove2=[x.strip() for x in parameters_list2 if x.strip() not in parameters]
    for i in should_rmove:
        #return i
        txt=re.sub(r"\| *"+i.strip()+r" *\=(?: *[^\n ]+| *(?:[^\n ]+ ?)+ *)\n","",txt)
    for i in parameters_list2:
        #return i
        if 'پیش‌شماره' in i:
            txt=txt.replace('پیش‌شماره','پیش‌شماره=')
        elif 'جمله خوشامد' in i:
            txt=txt.replace('جمله خوشامد','جمله خوشامد=')
        elif 'مذهب' in i:
            txt=txt.replace('مذهب','مذهب=')
        elif 'جمعیت' in i:
            #txt=re.sun('^\| * جمعیت ([^\=\|\n]+)\n','|جمعیت =\1\n',txt)
            txt=txt.replace('|جمعیت','|جمعیت=')
            txt=txt.replace('|جمعیت=:','|جمعیت=')
    return txt

with codecs.open(u'io.txt', 'r+', 'utf8') as f:
	text = remove_extra_parameters(f.read())
	f.seek(0)
	f.truncate()
	f.write(text)