ویکیپدیا:درخواستهای ربات/ربات گروه مجوز دهندگان ربات/ابرابزار
ظاهر
<syntaxhighlight lang="python">
def YKarabic(obj):
s=obj #ي --> ی و ك --> ک #برای جلوگیری از خرابکاری در پیوند تصویرها و میان\u200cویکی s = s.replace(/\[\[([^\]]*?\:[^\]]*?)ي(.*?)\]\]/g, '$1\u200c\u200c\u200cی\u200c\u200c\u200c$2') s = s.replace(/\[\[([^\]]*?\:[^\]]*?)ك(.*?)\]\]/g, '$1\u200c\u200c\u200cک\u200c\u200c\u200c$2')
s = s.replace(/\[\[([^\]]*?\:[^\]]*?)ي(.*?)\]\]/g, '$1\u200c\u200c\u200cی\u200c\u200c\u200c$2') s = s.replace(/\[\[([^\]]*?\:[^\]]*?)ك(.*?)\]\]/g, '$1\u200c\u200c\u200cک\u200c\u200c\u200c$2')
s = s.replace(/ي/g, 'ی') s = s.replace(/ك/g, 'ک')
s = s.replace(/\u200c\u200c\u200cی\u200c\u200c\u200c/g, 'ي') s = s.replace(/\u200c\u200c\u200cک\u200c\u200c\u200c/g, 'ك')
#اصلاح ی و ک در متنهای عربی s = s.replace(/\{\{عربی([^(\}\})]*?)ی(.*?)\}\}/g, 'الگو:عربی$1ي$2') s = s.replace(/\{\{عربی([^(\}\})]*?)ک(.*?)\}\}/g, 'الگو:عربی$1ك$2') s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '$1ي$2پایان عربی}}') s = s.replace(/\{\{شروع\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '$1ي$2پایان عربی}}') s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '$1ك$2پایان عربی}}') s = s.replace(/\{\{شروع\sعربی\}\}([^پایان\sعربی(\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '$1ك$2پایان عربی}}') s = s.replace(/\[\[ar:(.*?)ی(.*?)\]\]/g, ) s = s.replace(/\[\[ar:(.*?)ک(.*?)\]\]/g, )
s = s.replace(/\{\{عربی([^(\}\})]*?)ی(.*?)\}\}/g, 'الگو:عربی$1ي$2') s = s.replace(/\{\{عربی([^(\}\})]*?)ک(.*?)\}\}/g, 'الگو:عربی$1ك$2') s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '$1ي$2پایان عربی}}') s = s.replace(/\{\{شروع\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '$1ي$2پایان عربی}}') s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '$1ك$2پایان عربی}}') s = s.replace(/\{\{شروع\sعربی\}\}([^پایان\sعربی(\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '$1ك$2پایان عربی}}') s = s.replace(/\[\[ar:(.*?)ی(.*?)\]\]/g, ) s = s.replace(/\[\[ar:(.*?)ک(.*?)\]\]/g, ) #حدف نویسهٔ ممنوع ۰۶۴۹ #جلوگیری از تغییر متن نشان عربی خورده و تصویر و پیوندهای میانویکی s = s.replace(/\[\[([^\]]*?\:[^\]]*?)ى(.*?)\]\]/g, '$1\u200c\u200c\u200cی\u200c\u200c\u200c$2') s = s.replace(/\{\{عربی(.*?)ى(.*?)\}\}/g, 'الگو:عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2') s = s.replace(/\{\{آغاز عربی(.*?)ى(.*?)پایان عربی\}\}/g, 'الگو:آغاز عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی') s = s.replace(/\{\{شروع عربی(.*?)ى(.*?)پایان عربی\}\}/g, 'الگو:شروع عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی')
s = s.replace(/\[\[([^\]]*?\:[^\]]*?)ى(.*?)\]\]/g, '$1\u200c\u200c\u200cی\u200c\u200c\u200c$2') s = s.replace(/\{\{عربی(.*?)ى(.*?)\}\}/g, 'الگو:عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2') s = s.replace(/\{\{آغاز عربی(.*?)ى(.*?)پایان عربی\}\}/g, 'الگو:آغاز عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی') s = s.replace(/\{\{شروع عربی(.*?)ى(.*?)پایان عربی\}\}/g, 'الگو:شروع عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی')
s = s.replace(/ى/g, 'ی') s = s.replace(/\u200c\u200c\u200cی\u200c\u200c\u200c/g, 'ى')
#اصلاح ردهها s = s.replace(/\[\[(رده|[Cc]ategory):(.*?)(ى|ي)(.*?)\]\]/g, '$1:$2ی$4') s = s.replace(/\[\[(رده|[Cc]ategory):(.*?)ك(.*?)\]\]/g, '$1:$2ک$3') s = s.replace(/\[\[(رده|[Cc]ategory):(.*?)(ى|ي)(.*?)\]\]/g, '$1:$2ی$4') s = s.replace(/\[\[(رده|[Cc]ategory):(.*?)ك(.*?)\]\]/g, '$1:$2ک$3')
return s
def FM(obj):
s=obj #بنهای ماضی a01 = "(آراست|آرامید|آزرد|آزمود|آسود|آشامید|آشفت|آغازید|آغشت|آفرید|آگند|آلود|آمد|آمرزید"; a02 = "|آموخت|آمیخت|آورد|آویخت|آهیخت|ارزید|افتاد|افراشت|افروخت|افزود|افسرد|افشاند|افگند"; a03 = "|انباشت|انجامید|انداخت|اندوخت|اندود|اندیشید|انگاشت|انگیخت|اوباشت|ایستاد|باخت"; a04 = "|بارید|بافت|بالید|بایست|بخشود|بخشید|برازید|برد|برید|بست|بسود|بسیجید|بلعید|بود"; a05 = "|بوسید|بویید|بیخت|پاشید|پالود|پخت|پذیرفت|پراکند|پرداخت|پرستید|پرسید|پرورد|پرید"; a06 = "|پژمرد|پژوهید|پسندید|پلاسید|پلکید|پناهید|پنداشت|پوسید|پوشید|پویید|پیچید|پیراست"; a07 = "|پیمود|پیوست|تاخت|تافت|تپید|تراشید|تراوید|ترسید|ترشید|ترکید|تکاند|تکانید|تنید|توانست"; a08 = "|جست|جُست|جَست|جنبید|جنگید|جوشید|جوید|جهید|چاپید|چایید|چپید|چربید|چرخید|چرید|چسبید|چشید"; a09 = "|چکید|چلاند|چلانید|چمید|چید|خارید|خاست|خایید|خراشید|خرامید|خروشید|خرید|خزید|خست"; a10 = "|خشکید|خلید|خمید|خوابید|خواست|خواند|خورد|خوفید|خیسید|داد|داشت|دانست|درخشید|دروید"; a11 = "|درید|دزدید|دمید|دوخت|دوشید|دوید|دیدم|ربود|رخشید|رسید|رست|رَست|رُست|رشت|رفت|رُفت|روفت"; a12 = "|رقصید|رمید|رنجید|رندید|رویید|ریخت|رید|زارید|زایید|زد|زدود|زیست|ساخت|سپرد|سپوخت"; a13 = "|ستد|سترد|ستود|ستیزید|سرود|سرشت|سرید|سزید|سفت|سگالید|سنجید|سوخت|سود|شاشید|شایست"; a14 = "|شتافت|شد|شست|شکافت|شکست|شکفت|شکیفت|شگفت|شمرد|شناخت|شنید|شورید|طلبید|طوفید|غارتید"; a15 = "|غرید|غلطید|غنود|فرستاد|فرسود|فرمود|فروخت|فریفت|فشرد|فهمید|قاپید|قبولاند|کاست"; a16 = "|کاشت|کاوید|کرد|کشت|کشید|مکشید|کفت|کفید|کند|کوچید|کوشید|کوفت|گایید|گداخت|گذاشت"; a17 = "|گذشت|گرازید|گرایید|گردید|گرفت|گروید|گریخت|گریست|گزارد|گزید|گُزید|گَزید|گسارد|گسترد|گسست"; a18 = "|گشت|گشود|گفت|گماشت|گنجید|گندید|گوارید|گوزید|لرزید|لغزید|لمدنی|لندید|لنگید|لهید"; a19 = "|لیسید|ماسید|مالید|ماند|مرد|مکید|مولید|مویید|نازید|نالید|نامید|نشست|نکوهید|نگاشت"; a20 = "|نگریست|نمود|نواخت|نوردید|نوشت|نوشید|نهاد|نهفت|نیوشید|ورزید|وزید|هراسید|هشت"; a21 = "|یارست|یازید|یافت)";
verbs = a01 + a02 + a03 + a04 + a05 + a06 + a07 + a08 + a09 + a10 + a11 + a12 + a13 + a14 + a15 + a16 + a17 + a18 + a19 + a20 + a21; re = new RegExp("(می|نمی)" + verbs + "(م|ی|یم|ید|ند|\\s|\\.|،|!|؛)", "g") s = s.replace(re, '$1\u200c$2$3')
#بنهای مضارع b01 = "(آرای|آرام|آزار|آزمای|آسای|آشام|آشوب|آغاز|آغار|آفرین|آگن|آلای|آی|آمرز"; b02 = "|آموز|آمیز|آور|آویز|آهنج|ارز|افت|افراز|افروز|افزای|افسر|افشان|افگن"; b03 = "|انبار|انجام|انداز|اندوز|اندای|اندیش|انگار|انگیز|اوبار|ایست|باز"; b04 = "|بار|باش|باف|بال|بای|بخشای|بخش|براز|بر|بُر|بَر|بند|بساو|بسیج|بلع|بو"; b05 = "|بوس|بوی|بیز|پاش|پالای|پز|پذیر|پراکن|پرداز|پرست|پرس|پرور|پر"; b06 = "|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پوس|پوش|پوی|پیچ|پیرای"; b07 = "|پیمای|پیوند|تاز|تاب|تپ|توپ|تراش|تراو|ترس|ترش|ترک|تکان|تن|توان"; b08 = "|جه|جوی|جنب|جنگ|جوش|جو|چاپ|چای|چپ|چرب|چرخ|چر|چسب|چش"; b09 = "|چک|چلان|چم|چین|خار|خیز|خای|خراش|خرام|خروش|خر|خز|خست"; b10 = "|خشک|خل|خم|خواب|خواه|خوان|خور|خوف|خیس|ده|دار|درخش|درو"; b11 = "|در|دزد|دم|دوز|دوش|دو|بین|ربای|رخش|رس|ره|روی|رشت|رو|روب"; b12 = "|رقص|رم|رنج|رند|روی|ریز|رین|زار|زای|زن|زدای|زی|ساز|سپر|سپوز"; b13 = "|ستان|ستر|ستان|ستیز|سرای|سرشت|سر|سز|سنب|سگال|سنج|سوز|سای|شاش|شای"; b14 = "|شتاب|شو|شوی|شکاف|شکن|شکوف|شکیب|شمر|شناس|شنو|شور|طلب|طوف|غارت"; b15 = "|غر|غلط|غنو|فرست|فرسای|فرمای|فروش|فریب|فشر|فهم|قاپ|قبولان|کاه"; b16 = "|کار|کاو|کن|کار|کُش|کش|کِش|کَش|کف|کن|کوچ|کوش|کوب|گای|گداز|گذار"; b17 = "|گذر|گراز|گرای|گرد|گیر|گرو|گریز|گری|گزار|گز|گزین|گسار|گستر|گسل"; b18 = "|گشای|گو|گمار|گنج|گند|گوار|گوز|لرز|لغز|لم|لند|لنگ|له"; b19 = "|لیس|ماس|مال|مان|میر|مک|مول|موی|ناز|نال|نام|نشین|نکوه|نگار"; b20 = "|نگر|نمای|نواز|نورد|نویس|نوش|نه|نهنب|نیوش|ورز|وز|هراس|هل"; b21 = "|یار|یاز|یاب)";
verbs = b01 + b02 + b03 + b04 + b05 + b06 + b07 + b08 + b09 + b10 + b11 + b12 + b13 + b14 + b15 + b16 + b17 + b18 + b19 + b20 + b21; re = new RegExp("(می|نمی)" + verbs + "(م|ی|د|یم|ید|ند)", "g") s = s.replace(re, '$1\u200c$2$3')
#ای «توان» ناقلا! s = s.replace(/(می|نمی)توان/g, "$1\u200cتوان")
#تبدیل الگو به نویسه s = s.replace(/\{\{فم\}\}/g, '\u200c')
#تبدیل چند فاصلهٔ مجازی پشت\u200cسرهم به یک فاصله مجازی. s = s.replace(/(\u200c)+/g, '\u200c')
# برای حذف علامت ستاره اضافی قبل از عنوانها s = s.replace(/\n\*\s*(\=+.+?\=+\n)/g, "\n$1")
# برای حذف فاصلههای اضافی در پیوندها s = s.replace(/\[\[\s*(.*?)\s*]]/g, "$1")
# عضو علامتهای نقل قول تکی از عنوانها s = s.replace(/(\n=+)(.*?)(?:'+)(.*?)(?:'+)(.*?)(=+\n)/g, "$1$2$3$4$5")
#حذف فاصلهٔ مجازی بعد از آادذرزژو . ، « » s = s.replace(/([\.،«»\:؛\sزرذدواژؤإأآءةa-zA-Z])\u200c/g, '$1')
# اول و آخر هم خط اگر فاصلهٔ مجازی باشد، حذف شود s = s.replace(/(^\u200c|\u200c$)/mg, )
#حذف فاصلهٔ مجازی پیش از حروف لاتین و نیز نشانههای سجاوندی s = s.replace(/\u200c([\w\[\]\n\s\.،«»\:؛])/g, '$1')
#اصلاح می پیشوندی s = s.replace(/\sمی\s/g, ' می\u200c') s = s.replace(/\sنمی\s/g, ' نمی\u200c') s = s.replace(/\sمی\u200cو\s/g, ' می و')
#فعلهای مصدر بودن s = s.replace(/ه\sام([\]\.،\:»\)\s])/g, 'ه\u200cام$1') s = s.replace(/ه\sای([\]\.،\:»\)\s])/g, 'ه\u200cای$1') s = s.replace(/([^ا])ه\sاست([\]\.،\:»\)\s])/g, '$1ه\u200cاست$2') s = s.replace(/ه\sایم([\]\.،\:»\)\s])/g, 'ه\u200cایم$1') s = s.replace(/ه\sاید([\]\.،\:»\)\s])/g, 'ه\u200cاید$1') s = s.replace(/ه\sاند([\]\.،\:»\)\s])/g, 'ه\u200cاند$1')
#تمام «ها» با فاصلهٔ مجازی میچسبند. و این مطابق مفاد آخرین شیوهنامه غلط نیست. s = s.replace(/\sها([\]\.،\:»\)\s])/g, '\u200cها$1') s = s.replace(/\sها(ی|یی|یم|یت|یش|مان|تان|شان)([\]\.،\:»\)\s])/g, '\u200cها$1$2')
#موارد جزئی دیگر: هرچند ربطی به ZWNJ ندارد. ولی فعلاً اینجا میگذاریمشان تا بعداً بفرستیمشان جایی دیگر. s = s.replace(/ا\sً/g, 'اً')
# ویکی پدیا و ویکیپدیا به ویکیپدیا s = s.replace(/ویکی\s?پدیا/g, 'ویکی\u200cپدیا')
# ریشه شناسی و ریشهشناسی s = s.replace(/ریشه\s{0,3}شناسی/g, 'ریشه\u200cشناسی')
# اسثنائات، اینها بایست که بعداً به طور دقیقتری بررسی شوند # می۸ به می ۸ تبدیل شود، به خاطر replace(/\sمی\s/g, ' می\u200c') اشتباه شده s = s.replace(/\sمی\u200c[\d۰-۹]\s/g, ' می $1') # میوزیک؟ می + بن مضارع وز + ی s = s.replace(/میوزیک/g, "میوزیک") # لوییز می الکات، با replace(/\sمی\s/g, ' می\u200c') تغییر میکند s = s.replace(/میالکات/g, "می الکات")
return s
def NonStandard(obj):
s=obj #همزه روی ی s = s.replace(/ه\u200cی\s/g, 'هٔ ') s = s.replace(/ه\u200eی\s/g, 'هٔ ') s = s.replace(/ه\sی\s/g, 'هٔ ') s = s.replace(/(ۀ|هٓ)/g, 'هٔ') s = s.replace(/هء /g, 'هٔ ') s = s.replace(/هیی/g, 'های')
#اصلاح گیومه s = s.replace(/"([^\w\n]*?)"/g, '«$1»') s = s.replace(/«([\w]*?)»/g, '"$1"') s = s.replace(/(\w)=«([^"]*?)»/g, '$1="$2"') # to fix the problem with HTML double quotes. return s
def digits(obj):
# Convert Codes to Characters old = obj s=obj entofa = new Array("۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹") entoar = new Array("٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩") faChrs = "آأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیيك" faNums = "۰۱۲۳۴۵۶۷۸۹" # فارسی به انگلیسی for (i = 0; i < 10; i++) { reFaToEn = new RegExp("([A-Za-z0-9][^"+faChrs+faNums+"\\n\\{\\}\\|=]*)"+entofa[i]+"([^"+faNums+"\\n\\{\\}\\|=]*?[A-Za-z0-9])", "g") old = old.replace(reFaToEn, "$1¬!¬"+i+"$2") old = old.replace(/¬!¬/g, "") reFaToEn = new RegExp("([$\\n=>][^"+faChrs+faNums+"\\n\\{\\}\\|=]*)"+entofa[i]+"([^"+faNums+"\\n\\{\\}\\|=]*?[A-Za-z0-9])", "g") old = old.replace(reFaToEn, "$1¬!¬"+i+"$2") old = old.replace(/¬!¬/g, "") reFaToEn = new RegExp("([A-Za-z0-9][^"+faChrs+faNums+"\\n\\{\\}\\|=]*)"+entofa[i]+"([^"+faNums+"\\n\\{\\}\\|=]*?[\\n\\{\\}\\|<$])", "g") old = old.replace(reFaToEn, "$1¬!¬"+i+"$2") old = old.replace(/¬!¬/g, "") # انگلیسی به فارسی for (i = 0; i < 10; i++): reEnToFa = new RegExp("(["+faChrs+">][^A-Za-z0-9\\n\\{\\}\\|=]*)"+i+"([^A-Za-z\\n\\{\\}\\|=]*?[<"+faChrs+faNums+"])", "g") old = old.replace(reEnToFa, "$1"+entofa[i]+"$2") reEnToFa = new RegExp("([$=\\n\\{\\}\\|>][^A-Za-z0-9\\n\\{\\}\\|=]*)"+i+"([^A-Za-z\\n\\{\\}\\|=]*?[\\n\\{\\}\\|<$])", "g") old = old.replace(reEnToFa, "$1"+entofa[i]+"$2") # فارسی به انگلیسی (آنهایی که صددرصد باید انگلیسی شوند) for (i = 0; i < 10; i++): reFaToEn = new RegExp('(style|colspan|rowspan)( *= *[^\\|\\n]*?)'+entofa[i]+'(.*?\\|)', 'g') old = old.replace(reFaToEn, "$1$2¬!¬"+i+"$3") old = old.replace(/¬!¬/g, "") reFaToEn = new RegExp('(<math>[^<]*?)'+entofa[i]+'([^<]*<\\/math>)', 'g') old = old.replace(reFaToEn, "$1¬!¬"+i+"$2") old = old.replace(/¬!¬/g, "") reFaToEn = new RegExp('(https?:#[^\\s\\r\\n\\|\\}]*?)'+entofa[i], 'g') old = old.replace(reFaToEn, "$1¬!¬"+i) old = old.replace(/¬!¬/g, "") # عربی به فارسی for (i = 0; i < 10; i++) s = s.replace(new RegExp(entoar[i], 'g'), entofa[i]) # ممیز و هزارگان s = s.replace(/([۱۲۳۴۵۶۷۸۹۰])\.([۱۲۳۴۵۶۷۸۹۰])/g, '$1٫$2') s = s.replace(/([۱۲۳۴۵۶۷۸۹۰]),([۱۲۳۴۵۶۷۸۹۰])/g, '$1٬$2') return s
def Punctuation(obj):
s=obj s = s.replace(/ *(\
|\{\{بر\}\}) */g, "
")
s = s.replace(/ ([؟،:!\.\}])/g, "$1") s = s.replace(/([،\.])([^\s\.\(\)«»\"\[\]\<\>\d\w\{\}\|۰-۹])/g, "$1 $2")
s = s.replace(/([\(«])\s/g, '$1') s = s.replace(/\s([\)»])/g, '$1') s = s.replace(/٬\s/g, "، ")
s = s.replace(/(\<\/ref\>)\s+(\<ref)/g, "$1$2")
# تغییرات جزئی که برای رباتها تعریف شده بود s = s.replace(/^(\=+)\s*(.*?)\s*(\=+)$/mg, "$1 $2 $3") s = s.replace(/\n{3,}/g, "\n\n") s = s.replace(/([^=])\n+(\=.*?\=\n)/g, "$1\n\n$2") s = s.replace(/^([*#]+)([^*#:\s])/mg, "$1 $2") s = s.replace(/[\s\n]+\<ref/g, "<ref") s = s.replace(/ +\<\/ref\>/g, "</ref>")
# پاک کردن فاصلهها بین خطوط * دار s = s.replace(/(\n\*.*?)\n(?=\n\*)/g, '$1')
# فاصله را از آخر خط پاک میکند s = s.replace(/([^ =]) *$/mg, "$1")
# اصلاح • s = s.replace(/[\n\s]*\{\{[•·ن](w?)\}\}\s*/g, "الگو:•$1 ")
s = s.replace(/(\<\w*(?:\s\w*=['"\w\d]+)*\s+\w*=)([\w\d_]+)((?:\s\w*=['"\w\d]+)*\s?\/?\>)/g, "$1\"$2\"$3") return s
function SuperTool(obj):
obj=YKarabic(obj) obj=FM(obj) obj=NonStandard(obj) obj=digits(obj) obj=Punctuation(obj) return obj