ویکیپدیا:ویرایشگر خودکار/حذف پارامتر اضافی
ظاهر
شروع به کار
[ویرایش]برای شروع مقالات موجود در رده:مقالهها با پارامتر تعریفنشده در جعبه اطلاعات شهر ایران را به کمک ماژول حذف پارامتر اشتباه، تمیز کنید.
- نکته۱: متغییر 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)