ویکیپدیا:درخواستهای ربات/ربات تصحیح غلط نگارشی/ویرایش ششم
<syntaxhighlight lang="python" line start="100">
- !/usr/bin/python
- -*- coding: utf-8 -*-
- BOT
- Copyright (C) 2011 ...
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation version 2.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
__version__ = '$Id: bot.py$'
import wikipedia, sys, pywikibot import pagegenerators import re, os, codecs, catlib
global txt msg = u'ربات: تصحیحکنندهٔ اشتباهات نگارشی' faChrs = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیيك' + u'\ ًٌٍَُِّْٓٔ' faNums = u'۰۱۲۳۴۵۶۷۸۹' arNums = u'٠١٢٣٤٥٦٧٨٩' enNums = u'0123456789' bnMazi = u'[آا]راست|[آا]را?مید|[آا]زرد|[آا]زمود|[آا]سود|[آا]شامید|[آا]شفت|[آا]فرید|[آا]لا[یئ]ید|[آا]لود|[آا]ما[هس]ید|[آا]مد|[آا]مرزید|[آا]م[یو]خت|آورد|[آا][هو]یخت|[آا]غ[شس]ت|ارزید|افتاد|افراشت|ا?فروخت|افزود|افسرد|ا?فشاند|اف[کگ]ند|انجامید|اند[او]خت|اندیشید|ان[بگ]اشت|نگاشت|انگیخت|ایستاد|با[خف]ت|با[لر]ید|[شب]ایست|بخش[یو]د|برازید|ب[ور]د|[چبپ]رید|[رجشب]ست|بلعید|پ[وا]شید|پخت|پذیرفت|پرا[کگ]ند|پرداخت|پرست?ید|پرورد|پرید|پژمرد|پژوهید|پسندید|پنداشت|[بپ]و[سشی]ید|پیچید|پیراست|پیمود|پیوست|تا[فخ]ت|تپید|ترا[وش]ید|تر[سشک]ید|تکانی?د|تنید|توانست|جن[بگ]ید|[جد]وش?ید|چرخید|چسبید|چ[مکشر]?ید|خر[او]شید|خ[مرز]ید|خشکید|خوابید|خو?است|خواند|خورد|خیسید|داد|داشت|[مد]انست|درخشید|دزدید|دوخت|ربود|راند|ر[مس]ید|رو?فت|رنجید|رو[یئ]ید|ریخت|زد|زدود|زیست|س[وا]خت|سپرد|س[تر]ود|ستیزید|سرشت|سزید|سنجید|ش[تکگ]افت|شد|شک?ست|ش[کگ]فت|شمرد|شناخت|شنید|شورید|طلبید|غلطید|فرستاد|فر[مس]ود|فریفت|فشرد|فهمید|قبولاند|کا[سش]ت|کاوید|ک[نر]د|کشت|کشید|کو[چش]ید|کوفت|گداخت|گذا?شت|گرا[یئ]ید|گردید|گرفت|گروید|گری[خس]ت|گزارد|گزید|گس[تا]رد|گسست|گ[فش]ت|گشود|گماشت|گنجید|ل[رغ]زید|ما[لس]ید|ماند|مرد|نا[مل]ید|نشست|نکوهید|نگاشت|ن?گریست|نمود|نواخت|نوردید|نوشت|نهاد|نهفت|نی?وشید|ور?زید|هراسید|هلید|یازید|یافت' bnMzare = u'[آا]را[یم]|[آا]زار|[آا]ماس|[آا]ز?مای|[آا]سای|[آا]شام|[آا]شوب|[آا]غا[رز]|[آا]فرین|[آا]گن|[آا]لای|[آا]ی|[آا]م[یور]ز|[آا]و?ر|[آا]ویز|[آا]هنج|ارز|افت|افر[او]ز|افزای|افسر|ا?فشان|اف[کگ]ن|انبار|انجام|اندا[یز]|اندوز|اندیش|ا?نگار|انگیز|اوبار|ایست|با[فلیشرز]|بخشای|بخش|براز|ب[َُ]?ر|بند|بساو|بسیج|بلع|بو[یس]?|بیز|پاش|پالای|پ[رز]|پذیر|پرا[کگ]ن|پرداز|پرست?|پرور|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پو[سشیک]|پیچ|پی[مر]ای|پیوند|تا[پز]|تو?پ|ترا[شو]|تر[سشک]|تکان|تن|توان|[نلجد]ه|جن[بگ]|جو[یش]?|چا[یپ]|چ[مکپشفر]|چر[خب]?|چسب?|چلان|چین|خا[یر]|خرا[مش]|خس[بت]|خشک|خروش|خ[ملرز]|خوا[نبه]|خو[فر]|خی[سز]|دا[نر]|درخش|درو?|دزد|[لد]م|دو[شز]?|ربای|ران|رخش|ر[سمه]|رو[یب]?|رشت|رقص|رنج|[بر]ی[نز]|زا[یر]|ز[ین]|زدای|ساز|سپا?ر|سپ؟وز|ستان|ستر|ستیز|سرای|سرشت|س[رز]|سنب|سگال|سنج|سای|شا[شی]|شتاب|شوی?|شک[او]ف|شکن|شکیب|ش[مو]ر|شناس|شنو|طلب|طوف|غارت|غرّ?|غلط|غنو|فرست|فر[سم]ای|فروش|فریب|فشر|فهم|قاپ|قبولان|کا[هرو]|ک[َُِ]?ش|ک[نف]|کو[چشب]|گای|گداز|گذا?ر|گرا[یز]|گرد|گیر|گرو|گریز?|گزار|گز|گزین|گس[تا]ر|گسی?ل|گشای|گو[یز]|گن[جد]|گ[مو]ار|ل[غر]ز|لن[گد]|لیس|ما[سلن]|میر|مک|مو[یل]|نا[زلم]|ن?شین|نکوه|نگا?ر|نمای|نواز|نورد|نویس|نهنب|نی?وش|ور?ز|هراس|هل|یا[برز]' noAlef = u'باجی|بادانی?|بادی?|بار|باژور|بافت|با[لن]|بانگا[نه]|بتاب|بجی?|بچین|بخس[بت]|بخواره|بخور[دشی]?|بخوست|بخیز|بدارچی|بدارخانه|بدار[وکی]?|بدستان|بدستی?|بدندان|بدنگ|بده|بدیده|براهه?|برفت|برو[دن]|بریز|بریزگان|بزن|بز[یه]|بژ|بسال|بسالان|بست|بستره|بست[نه]|بسکون|بسه|بسوار|بشار|بشتگاه|بشتن?|بشخور|بش[نیش]|بشنگ|بغوره|بفت|بک|بکار|ب?کافت|بکا[نم]ه|بکش|بکشین|بکند|بکوهه|بکی|بگاه|بگرد|بگردان|بگز|بگوشت|بگون|بگیر|بگینه|بلوج|بنوس|بوند|بونمان|بونه|بیار|پارات|پارتاید|پارتمان|پاراتی|پاندیس|پاندیسیت|تربان|ترمه|تروپین|تریاد|تشبار|تشبان|تشپا|تشخوار|تشدان|تشفشان|تشک|تشکده|تشگاه|تش[هی]?|تشیزه|تشین|تلیه|ته|تورپات|تیه|ثار|ثام|جاردن|جان|جودان|جید[نه]|جیل|جین|چار|چاردن|چارکشی|چمز|حاد|خال|خت[نه]|خر|خرالامر|خرالزمان|خرت|خردست|خرزمان|خریا؟ن|خ[سش]مه|خشیج|خشیجان|خشیگ|خور|خورچرب|خورخشک|خورسنگین|خوندبازی|خوندک?|دا[بشک]|دامس|دخ|درس|درمه?|درنگ|دمک|دمیت|دمیرال|دمیزاد|دنیس|دیش|دیند?ه|ذار|ذری?|ذربایجانی?|ذربو|ذرجشن|ذرخش|ذریو?ن|ذوقه|ذین|را[یء]|راستن|راسته|رام|رامانیدن|رامش|رامگاه|رامی|رامیدن|رایش|رایشگاه|رایشگر|راییدن|رتروز|رتزین|رتیست|رتیشو|رخالق|ردبیز|رده|ردینه|رزم|رزو|رزوخواه|رزومندی?|رشه|رشیتکت|رشیو|رغ|رغده|رگون|رمان|رمان?شهر|رمیچر|رمید[هن]|رن|رنائوت|رنج|رنگ|رواره|روبند|روغ|ری|ریا|ریستوکرات|ریستوکراسی|ریغ|زادگان|زادگی|زادمرد|زاد[یه]?|زادوار|زادی?خواه|زار|زارتلخه|زا?رد[نه]|زارنده|زاریدن|زال|زجوی|زخ|زدن|زرد|زردگی|زرم|زرمجو|زرمگین|زری|زغ|زفنداک|زگار|زما|زمایش|زمایشگاه|زماینده|زمایه|زمندی?|زمودگی|زمود[نه]|زمون|زناک|زور|زوغ|زوقه|زیدن|زیر|ژان|ژانس|ژخ|ژدار|ژده|ژغ|ژفنداک|ژگن|ژن[دگ]|ژندن|ژندیدن|ژیانه|ژید[نه]|ژیر|ژیرنده|ژیریدن|ژینه|سان|سانسور|سانی|سایش|سایشگاه|ساینده|ساییدن|سبان|سپیرین|ستانه|ستر|ستیگماتیسم|ستی[من]ه?|سدست|سغده|سفالت|سکاریس|سمانخانه|سمانخراش|سمان[هی]?|سموغ|سه|سودگی|سود[نه]|سیابان|سیاچرخ|سیازنه|سیاکردن|سیا[وب]?|سیایی|سیب|سیل|سی[من]ه|سیون|شا[بم]|شامیدن|شانه|شپز|شپزخانه|شتالنگ|شت[می]|شخال|شخانه|شردن|شرمه|شفتگی|شفت[نه]?|شکار|شکارساز|شکاره|شکوبه|شکو[بخ]?|شکوخیدن|شگر|شمالی?|شموغ|شنا|شناگر|شنا[هو]|شناوری|شنایی|شوب|شوب?گر|شوبیدن?|شور|شوردن|شوریده|شوغ|شوفتن|شیانه|شیهه|صال|غُش|غا|غاجی|غار|غاردن|غاری|غاریدن|غازگر|غاز[هی]?|غازیدن|غالش?|غالنده|غالید[نه]|غچه|غردن|غری?|غز|غ[سش]ت[نه]|غل|غندن|غنده|غو[زشل]|غوشیدن|غیل|فا[تق]|فاقی|فتاب[هی]?|فتومات|فدم|فرنگ|فروشه|فریدگار|فرید[نه]|فرین|فرینگان|فریننده|فگانه|فل|فند|فندیدن|فیش|ق|قا|قازاده|قاسی|ق?بانو|قچه|قسنقر|قشام|قطی|قورایی|قوش|کادمیک?|کاردئون|کام|ک[بپج]|کبند|کتریس|کتور|کروبات|کروباسی|کستن|ککرا|کله|کند[نه]|کنش|کنه|کنیدن|کواریوم|کوستیک|کولاد|کومولاتور|گاهاندن|گاهی?|گ[پج]|گراندیسمان|گرمان|گشتن|گفت|گنج|گنده|گهی|گو|گور|گورگر|گو[شن]|گیشیدن|گی[من]|لاپلنگی|لات|لاچیق|لاخون|لاس|لاسکا|لاگارسون|لامد?|لاوه?|لایش|لاییدن|لبالو|لبوم|لبومین|لپر|لت|لترناتیو|لر|لرژی|ل[شغ]|لغده|لفا|لفت[نه]|لکالویید|لگرو|لگونه|لوچه|لودگی|لود[نه]|لوسن|لومین|لومینیوم|لو[ئن]ک|لیاژ|لیداد|لیزیدن|ماتور|ماج|ماجگاه|مادگی|ماده|مار|مارگر|ماریدن|ماریلیس|ماس|ماسانیدن|ماسیدن|ماق|مال|مانی|ماهانیدن|ماهیدن|مبولانس|مپر|مپرسنج|مپلی|مپول|مپی|مخته|مدگان|مدن?|مرانه|مرزش|مرزگار|مرزنده|مرزیدن|مرزیده|مرغ|مریکا|مریکایی?|مفی|مفیبول|مه|موت|موخت[نه]|مود[نه]|موزانه|موزشی?|موزشیار|موزگا[رن]|موزنده|موزه|موق|موکسی|مولن|مون|مونیاک|میب|میختگی|میخت[نه]|میز[شه]?|میزگاری?|میغه?|نابولیسم|نات?|ناتومی|نارشی|نارشیس[تم]ی?|ناس|نالوگ|نالیز|نام|ناناس|نتراکت|نتریک|نت[نی]|نتیک|نجا|نچت?|ندوتوکسین|ندودرم|ندوسپرم|ندوسکوپی|ندون|نرمال|نزیم|نژین|نژیوکت|نژیوگرافی|نسه|نسیلین|نک|نگلوفیل|نوریسم|نیلین|نین|نیه|نیون|هار|هاردن|هازیدن|هستگی|هسته|هک|همند|هنج|هنجیدن|هنگ[ری]?|هنگساز|هنین|هو|هوانگیز|هوپا|هوتک|هوچشم|هودل|هوفغند|هومند|هون|هیانه|هیختن|واخ|وارگی|وا[رز]ه?|واشناسی|واکس|وام|وانتاژ|وانس|وانگارد|وانویسی|وردجو|وردگا؟ه|وردن|وردیدن|ورک|ورنجن|وری|وریدن|وریل|ونگ|ونگان|ونگون|ویخت[نه]|ویزش?|ویزگ?ان|وی[زژ]ه|ویزون|ویشن|یا[تن]?|یبک|یتم?|یزنه|یژ|یفت|یفون|ینده|یه|ییژ|یین|[یئ]?ینه|ئورت' tnvindar = u'(الزاما|لزوما|یقینا|قطعا|حتما|قاعدتا|طبیعتا|طبعا|قهرا|جدّا|حقیقتا|واقعا|مطمئنا|واضحا|مسلما|تماما|کاملا|عینا|اکیدا|مطلقا|دقیقا|مستقیما|اصولا|اصلا|اصالتا|نسبا|نسبتا|تقریبا|حدودا|معمولا|عرفا|قانونا|شرعا|اخلاقا|خلقا|احتمالا|استثنائا|اساسا|کلّ?ا|جزئا|مجموعا|جمعا|اجماعا|شدیدا|نهایتا|اقلا|اکثرا|غالبا|عمدتا|ندرتا|بعضا|گاها|صریحا|صراحتا|عموما|اختصاصا|خصوصا|مجملا|اجمالا|اختصارا|مختصرا|مشروحا|ظاهرا|باطنا|عمیقا|ذاتا|فطرتا|روحا|جسما|ابتدائا|مقدمتا|بدوا|بعدا|قبلا|جدیدا|سابقا|اخیرا|ابدا|عمرا|تلویحا|علنا|حضورا|غیابا|نیابتا|لطفا|اجبارا|اختیارا|عالما|عمدا|عامدا|تعمدا|متعمدا|عادتا|مستقلا|احتیاطا|احیانا|غفلتا|سهوا|اشتباها|عاجلا|عجالتا|مرتجلا|ارتجالا|سریعا|فورا|دا[یئ]ما|ضرورتا|نقدا|منحصرا|صرفا|دفعتا|کرارا|مکررا|مجددا|مرتبا|مستمرا|متواترا|تدریجا|تصادفا|عملا|فعلا|موقتا|ضمنا|نتیجتا|نوعا|اصطلاحا|جسارتا|بالا ?غیرتا|م[وؤ]کدا|ذیلا|شخصا|مشترکا|مفصلا|رسما|ترجیحا|قلبا|ر[اأ]سا|تو[اأ]ما|متناوبا|متوالیا|متقابلا|متعاقبا|متّ?فقا|مثلا|فرضا|ایضا|مضافا|مصرّ?ا|ارفاقا|انصافا|جهارا|طولا|متدرجا|غانما|احتراما|ناچارا|سفارشا|تلفنا|زبانا|کتبا|شفاها|اولا|دوما|سوما|چهارما|ثانیا|ثالثا|رابعا|خامسا|سادسا|سابعا|ثامنا|تاسعا|عاشرا)' langs = u'انگلیسی|آلمانی|اسپانیایی|فرانسوی|روسی|ایتالیایی|لاتین|اسکاتلندی|هلندی|هندی|اردو|پشتو|مصری|تاجیکستانی|قرقیزستانی|ازبکستانی|ترکی|یونانی|چینی|ژاپنی|کرهای|تایلندی|[فپ]ارسی'
zaed = ur"متن مورب|متن ضخیم|\[\[پرونده:مثال\.jpg]]|=+ متن عنوان =+|:خط تو رفته\n?|اینجا متن قالببندینشده وارد شود|\# مورد فهرست شمارهای\n?|\* مورد فهرست گلولهای|متن زیرنویس|متن بالانویس|متن کوچک|متن بزرگ|#(؟:تغییرمسیر|REDIRECT) \[\[(?:نام صفحه مقصد|نام صفحه)]]|\{\| class=\.wikitable\.\n\|-\n! متن عنوان !! متن عنوان !! متن عنوان\n\|-\n\| مثال \|\| مثال \|\| مثال\n\|-\n\| مثال \|\| مثال \|\| مثال\n\|-\n\| مثال \|\| مثال \|\| مثال\n\|}|
|[۱]|[۲]|[۳]|\[\[رده:]]|\[\[en:]]|\[\[fa:.*?]]|\[\[عنوان پیوند]]|\{\{\s*}}|\[\[\s*\|?\s*]]|"
tags = ur'b|big|blockquote|charinsert|code|comment|del|div|em|gallery|hyperlink|i|includeonly|imagemap|inputbox|link|math|noinclude|nowiki|pre|ref|s|small|source|startspace|strong|sub|sup|template|timeline' sametH = ur'فرمانده|زره|کوه|گره|گنه|سپه|مکروه|م?ت?وجّ?ه|منزّ?ه|نزه|ابله|مرفّ?ه|شبیه|مت?شابه|کریه|پادشه|اللّ?ه|اله|[آکبتدرزشلم]ه' #e: صامت هـ spcBfre = u'.،,:؛;؟٫)}]»》”,·。一ー・、:()「」〜?!ء' spcAftr = u'({[«《“,·。一ー٫・、:()「」〜?!' bLA = u'(?!['+faChrs+u'])' bLB = u'(?<!['+faChrs+u'])'
def fixChars():
exceptions = ['gallery', 'hyperlink', 'interwiki', 'math', 'pre', 'template', 'timeline', 'ref', 'source', 'startspace', 'inputbox'] namespaces = list(self.site.namespace(6, all = True)) pattern = re.compile(u'\[\[(' + '|'.join(namespaces) + '):.+?\..+?]]', re.UNICODE) exceptions.append(pattern) #txt = pywikibot.replaceExcept(txt, u'ه', u'ە', exceptions) #txt = pywikibot.replaceExcept(txt, u'ه', u'ھ', exceptions) txt = pywikibot.replaceExcept(txt, u'ك', u'ک', exceptions) txt = pywikibot.replaceExcept(txt, ur'[ىي]', u'ی', exceptions) for i in range(0,10): txt = re.sub(u'(?P<enChrs>[A-Za-z0-9][^'+faChrs+faNums+u'٫﷼٪×،؛؟«»\{}\|=]*|<math>.*?)'+faNums[i]+u'(?=[^'+faChrs+u'٫﷼٪×،؛؟«»\{}\|=]*?[A-Za-z0-9]|.*?</\s*math>)', ur'\g<enChrs>'+enNums[i], txt, re.S) for i in range(0,10): txt = re.sub(u'(?P<faChrs>['+faChrs+u'][^A-Za-z0-9\{}\|=]*)'+enNums[i]+u'(?=[^A-Za-z\{}\|=]*?['+faChrs+faNums+u'])', ur'\g<faChrs>'+faNums[i], txt) for i in range(0,10): txt = re.sub(ur'(?P<isbn>(?:\|\s*(?:ISBN|isbn)\s*=\s*|\WISBN +)['+enNums+u' -]*)'+faNums[i], ur'\g<isbn>'+enNums[i], txt) for i in range(0,10): txt = pywikibot.replaceExcept(txt, arNums[i], faNums[i], exceptions)
def fixCsmtc():
# ZWNJ txt = re.sub(u'{2,}', u'', txtTmp) # پشتسرهم txt = re.sub(u'\[\[([^\]\|]*?)]](%s+)' % faChrs, ur'\1\2', txt) # Piping txt = re.sub(u'(?![ئاآأإژزرذدوؤةبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|ֹ)', , txt) # در پس txt = re.sub(u'(?<![ئبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|f|ֹ)', , txt) # در پیش
# Cats txt = re.sub(ur'\[\[ *(رده|[Cc]ategory) *: *(.*?) *]]', ur' ', txt)
# Files txt = re.sub(ur'\[\[ *[Ii]mage *: *', u'[[پرونده:', txt) txt = re.sub(ur'\[\[ *[Ff]ile *: *', u'[[پرونده:', txt) #txt = re.sub(ur'\[\[ *(?:[Ii]mage|[Ff]ile|پرونده|تصویر) *: *', u'[[پرونده:', txt) txt = re.sub(ur'(\[\[پرونده:.*?\|) *thumb *(?=\|.*?]])', ur'\1بندانگشتی', txt) txt = re.sub(ur'(\[\[پرونده:.*?\|) *left *(?=\|.*?]])', ur'\1چپ', txt) txt = re.sub(ur'(\[\[پرونده:.*?\|) *right *(?=\|.*?]])', ur'\1راست', txt) txt = re.sub(ur'(\[\[پرونده:.*?\|) *center *(?=\|.*?]])', ur'\1وسط', txt) txt = re.sub(ur'(\[\[پرونده:.*?\|) *link *= *(?=.*?]])', ur'\1پیوند=', txt)
#e: نام الگوها txt = re.sub(u'الگو:(?:الگو:', ur'{{\1', txt, re.S) txt = re.sub(u'الگو:(?:جا:', u'', txt) txt = re.sub(u'الگو:(?:جا:', u'–', txt) txt = re.sub(u'الگو:(?:جا:', u'—', txt) txt = re.sub(u'الگو:(?:DEFAULTSORT)', u'{{ترتیب پیشفرض:', txt)
txt = re.sub(ur'{{(?:[Cc]ommons?|انبار|ویکی انبار) ?\|', u'
در ویکیانبار پروندههایی دربارهٔ [[Commons:{{{1}}}|درخواستهای ربات/ربات تصحیح غلط نگارشی/ویرایش ششم]] موجود است. |
)', ur'ص=\1', txt)
txt = re.sub(ur'(pages ?= ?|pp ?[\.=] ?)(\d*?)(1?)(\d)–\2\3(\d) *(?=}})', ur'\1\2\3\4–\3\5', txt) #txt = re.sub(ur'(pages ?= ?|pp ?[\.=] ?)([023456789]+|\d*1)(\d+)–\2(\d+) ?(?=}})', ur'\1\2\3–\4', txt) txt = re.sub(ur'(صفحه ?= ?|صفحات ?= ?|صص ?[\.=] ?)(|\=)(['+faNums+u']+)(['+faNums+ur']+)–\2(['+faNums+u']+) ?(?=}})', ur'صص\1\2\3–\4', txt)
def fixText():
exceptions = ['comment', 'math', 'nowiki', 'pre', 'source', 'timeline'] text = pywikibot.replaceExcept(text, r'(?m)^(?P<bullet>[:;]*(\*+|#+)[:;\*#]*)(?P<char>[^\s\*#:;].+?)', '\g<bullet> \g<char>', exceptions)
# Remove wikilinks exceptions = ['template', 'source'] txt = pywikibot.replaceExcept(txt, ur'\[\[([^\|\]]*?)]]([^\{}]{2,800})\[\[\1]]', ur'\1\2\1', exceptions)
#s: به txt = re.sub(bLB+u'(?:ب|به)(دست|شکلی?|گونه|طوری?|صورتی؟|قدری؟|نظر|دلا?یلی؟|سبب|عل[تل]ی؟|وسیله|واسطه|گفته|شمار|حساب|عنوان|عبارتی؟|هم[یا]ن|وجود|دنبال|نوبه|دنیا)'+bLA, ur'به \1', txt) txt = re.sub(bLB+u'(?:ب|به)(تندی|کندی|ویژه|خاطر|ناچار|خوبی|نیکی|تدریج|زودی|تازگی|سادگی|آسانی|سهولت|راحتی|دشواری|زیبایی|راستی|درستی|روشنی|وضوح|صراحت|تلویح|تفصیل|اجمال|اختصار|تنها[یئ]ی|مرور|نرمی|سختی|آرامی|آهستگی|سرعت|شدت|غایت|مراتب|ضرورت|دقت|کرّات|تواتر|ندرت|وفور|فراوانی|اصطلاح|اجبار|اختیار|اشتباه|تصادف|طبع|یقین|واقع)'+bLA, ur'به\1', txt) txt = re.sub(ur'(رو|منزل|جا|یک|دو|سه)[ ]?(ب|به)\1', ur'\1به\1', txt) txt = re.sub(bLB+u'به[ ](ذاته|حمداللّ?ه|شخصه|سزایی|عینه|نفسه)'+bLA, ur'ب\1', txt) txt = re.sub(bLB+u'(نا(?: ?)|)(?:ب|به[ ])حق(ی?)'+bLA, ur'\1بحق\2', txt) txt = re.sub(bLB+u'(?:ب|به[ ]?)لا ?(استفاده|استثنا|تشبیه|تکلیف|شرط|شک|فاصله|شبهه|عوض|مانع|منا[ضز]ع|نسبت)', ur'بلا\1', txt)
#s: بر txt = re.sub(bLB+u'بر(?=اساس|پایه|طبق|روی|خلاف|ضد|دست)', u'بر ', txt)
#s: بی txt = re.sub(bLB+u'بی[ ](?=هوده|چاره|نوا|جا|خود|زار|عار|دل|قرار|راه)', u'بی', txt) txt = re.sub(bLB+u'بی[ ](?=اساس|پایه|چیز|رحم|نشان|کار)', u'بی', txt)
#s: هم txt = re.sub(bLB+u'هم[ ](چن[یا]ن|دیگر|شهری|شیره|زاد|درس|سنگ|سر|راز|وار|کار[ی ]|نوع[ی ]|راه[ی ]|دل[ی ])'+bLA, ur'هم\1', txt) txt = re.sub(bLB+u'هم ?(تیم[ی ]|صنف|صوت|آرزو|آرمان|اسم|مسلک|مرز)'+bLA, ur'هم\1', txt) txt = re.sub(bLB+u'هم[ ]?آ(?=هنگ|ورد)', u'هما', txt)
#s: هیچ txt = re.sub(u'هیچ ?(?=یک|کدام|کس)', u'هیچ', txt)
#s: چه txt = re.sub(u'چه[ ](?=قدر|گونه|طور)', u'چ', txt) txt = re.sub(u'(ا?گر|هر|آن|بدان|چنان) چه ', ur'\1چه ', txt) txt = txt.replace(u'چه ', u'چه ')
#s: که txt = re.sub(bLB+u'(هر|آن|چنان) که ', ur'\1که ', txt) txt = txt.replace(u'طوریکه', u'طوری که').replace(u'ایکه', u'ای که') txt = re.sub(bLB+u'(هم[یا]ن|این|آن|بد[یا]ن|چن[یا]ن) ?(?=گونه|[جط]ور|که|جا)', ur'\1', txt) txt = re.sub(bLB+u'(این|آن)(?=که|جا)', ur'\1', txt)
#s: ها txt = re.sub(u' ها(ی|[یئ]ی|)'+bLA, ur'ها\1', txt) txt = re.sub(bLB+u'(آن|این)[ ]?ها(|[یئ]ی)'+bLA, ur'\1ها\2', txt) txt = txt.replace(u'هائی', u'هایی')
#s: تر txt = re.sub(u'(کم|بیش)[ ]تر', ur'\1تر', txt) txt = txt.replace(u' ترین ', u'ترین ')
#s: است txt = re.sub(u'(گونه|اندازه|یده|نده) ای '+bLA, ur'\1ای', txt) txt = re.sub(u'ی است'+bLA, u'یاست', txt) txt = re.sub(u'ه است'+bLA, u'هاست', txt) #e: صامت هـ txt = re.sub(bLB+u'('+sametH+u')است'+bLA, ur'\1 است', txt) txt = re.sub(bLB+u'('+sametH+u')[ ]ای'+bLA, ur'\1ی', txt) txt = re.sub(u'اهاست'+bLA, u'اه است', txt) # ...اه
#s: شبهسادهها ####### مشارٌاليه، مضافٌاليه، منقولٌعنه، مختلفٌفيه، متفقٌعليه، بعبارةٍاُخرى، اباًعنجدٍ، اىّنحوٍكان. txt = re.sub(bLB+u'من ?(باب|جمله)'+bLA, ur'من\1', txt) txt = re.sub(u'مع ?(هذا|ذلک|الفار[غق]|الوصف|ال[اأ]سف)', ur'مع\1', txt) txt = re.sub(u'علی ?(هذا|حده|رغم|الاصول|الحساب|الخصوص|البدل|الدوام|السویه|الطلوع|الله|القاعده)', ur'علی\1', txt) txt = re.sub(bLB+u'ذو ال', u'ذوال', txt) txt = re.sub(u'ذی ?(ال|نفع|امر|جود|حساب|حق|حیات|ربط|روح|شعور|صلاح|صلاحیّ?ت|عقل|علاقه|فقار|فن|قیمت|نفوذ)'+bLA, ur'ذی\1', txt) txt = re.sub(bLB+u'حقّ? (?=البوق|العبور|الت[اأ]لیف|التدریس|الزحمه|اللّ?ه|النّ?اس|تعالی)', u'حق', txt) txt = re.sub(u'عن ?[قغ]ریب', u'عنقریب', txt) txt = re.sub(u'قتل ?عام', u'قتلعام', txt) txt = re.sub(u'علی[ ][اأ]یّ?[ ]?حال', u'علیأیحال', txt) txt = re.sub(u'من[ ]?حیث[ ]?المجموع', u'منحیثالمجموع', txt) txt = re.sub(u'ب(?:|ه[ ])ر[اأ]ی[ ]العین', u'برأیالعین', txt) txt = re.sub(u'ما ?ب(?:|ه[ ])ازا', u'مابازا', txt) txt = re.sub(u'متقابل[ ](?:ب|به[ ])ر[اأ]س', u'متقابلبهرأس', txt) txt = re.sub(u'منحصر ?(?:ب|به[ ])فرد', u'منحصربهفرد', txt) txt = re.sub(bLB+u'فی[ ]?ما ?بین', u'فیمابین', txt) txt = re.sub(u'[اآ]ی[ةت][ ]?اللّ?ه', u'آیتالله', txt) txt = re.sub(u'حج[ةته][ ]?ال[اإ]سلام', u'حجتالاسلام', txt) txt = re.sub(u'ثق[ةته][ ]?ال[اإ]سلام', u'ثقةالاسلام', txt) txt = re.sub(u'امیر ?الم[وؤ]منین', u'امیرالمؤمنین', txt) txt = re.sub(u'(متوازی|مختلف)[ ]?ال[اأ]ضلاع', ur'\1الأضلاع', txt) txt = re.sub(u'متساوی[ ]?السّ?اقین', u'متساویالساقین', txt) txt = re.sub(u'قا[یئ]م[ ]الزّاوی[ةه]', u'قائمالزاویه', txt) txt = re.sub(u'دا[یئ]ر[ةته][ ]?(البروج|المعارف|العلوم)', ur'دائرة\1', txt) txt = re.sub(u'دا[یئ]م[ ](الخمر|الصوم|الذّ?[کك]ر)', ur'دائم\1', txt) txt = re.sub(u'ر[اأإ]س[ ](الجدی|السّ?رطان|المال)', ur'رأس\1', txt) txt = re.sub(u'(مجنی|مجنی)[ ][عا]لیه', ur'\1علیه', txt) txt = re.sub(u'(مضاف|مسند|مرجوع|مشار|منتقل)ٌ?[ ]?[عا]لیه', ur'\1ٌالیه', txt) txt = re.sub(u'منته[ای][ ]?[عا]لیه', u'منتهیالیه', txt) txt = txt.replace(u'بین الملل', u'بینالملل') txt = txt.replace(u'حزب الل', u'حزبالل') txt = txt.replace(u'جدید الاحداث', u'جدیدالاحداث') txt = txt.replace(u'کثیر الانتشار', u'کثیرالانتشار') txt = txt.replace(u'سریع السیر', u'سریعالسیر') txt = txt.replace(u'لازم الاجرا', u'لازمالاجرا') txt = txt.replace(u'فوق الذکر', u'فوقالذکر') txt = txt.replace(u'مرضی الطرف', u'مرضیالطرف') txt = txt.replace(u'خاتم الانبیا', u'خاتمالانبیا') txt = txt.replace(u'متفق القول', u'متفقالقول') txt = txt.replace(u'قریب الوقوع', u'قریبالوقوع') txt = txt.replace(u'سوق الجیشی', u'سوقالجیشی') txt = txt.replace(u'چاه ورز', u'چاهورز') txt = txt.replace(u'محیر العق', u'محیرالعق') txt = txt.replace(u'عظیم الجث', u'عظیمالجث') txt = txt.replace(u'لطایف الحیل', u'لطایفالحیل') txt = txt.replace(u'موقوف المعانی', u'موقوفالمعانی') txt = txt.replace(u'سلیم النفس', u'سلیمالنفس') txt = txt.replace(u'موثق الصدور', u'موثقالصدور') txt = txt.replace(u'شمس العمار', u'شمسالعمار') txt = txt.replace(u'حسب الامر', u'حسبالامر') txt = txt.replace(u'مسلوب الاراده', u'مسلوبالاراده') txt = txt.replace(u'مستجاب الدعو', u'مستجابالدعو') txt = re.sub(bLB+u'(دار|مشترک|ممنوع|قدیم|قلیل|ناقص|ضعیف|قوی|تحت|ر[یئ]یس|ربّ?|امّ?|حقّ?|ماء|ماوراء|باب) (?=ال)', ur'\1', txt) #txt = re.sub(u'(?=الهام|الصاق|الزام|القا|الکتریک|الکتریسیته)', u, txt)
#e: اً txt = re.sub(bLB+tnvindar+bLA, ur'\1ً', txt) txt = re.sub(u'اصلاً? ?و ?ابداً?', u'اصلا و ابدا', txt) txt = re.sub(u'اهلاً? ?و ?سهلاً?', u'اهلاً وسهلاً', txt)
#e: آ txt = re.sub(bLB+u'(ا|أ)('+noAlef+u')'+bLA, ur"آ\2", txt) txt = txt.replace(u' راکتور', u' رآکتور').replace(u'فرآیند', u'فرایند').replace(u'فرآورده', u'فراورده')#.replace(u' الان', u' الآن') # e: ا <-> آ txt = re.sub(bLB+u'ایده?[ ][اآ]ل', u'ایدهآل', txt)
#e: همزه #e: أ txt = re.sub(bLB+u'ر[اأإ]ی[ ](گیر|العین)', ur'رأی\1', txt) txt = re.sub(bLB+u'ما(بون|ثر|ثو[رم]|جو?ر|خو?|دبه|ذنه?|ذون|ربه|کو?ل|لوف|منه?|مور|موریّ?ت|مو[لمن]|نوس|وا|هول|یوس)'+bLA, ur'مأ\1', txt) txt = re.sub(bLB+u'نا ?ما(ذون|لوف|نوس)'+bLA, ur'نامأ\1', txt) txt = re.sub(bLB+u'ت[اإ](ثّ?[رلم]|ثی[رلم]|ثیرات|جیل|خّ?[ری]|خیر|دّ?ب|دی[به]|ذّ?[نی]|سّ?ف|سّی|سیس|سیسات|صّ?ل|کّ?د|کید|لّ?[فمه]|لیف|لیفات|مّ?[رل]|مّ?لات|می[رلن]|مینات|نّ?[سقی]|نی[سث]|ویل|هّ?[بل]|هیل|[یئ]ید|[یئ]یدیّ?ه)ی?'+bLA, ur'تأ\1', txt) txt = re.sub(bLB+u'متا(ثّ?ر|خّ?ر|دّ?ب|سّ?ف|سّ?فانه|سّ?ی|کّ?د|لّ?[مه]|مّ?ل|نّ?ی|هّ?ل)'+bLA, ur'متأ\1', txt) txt = re.sub(bLB+u'مستا(ثر|جر|صل|من|نس|نف)'+bLA, ur'مستأ\1', txt) txt = re.sub(bLB+u'(خل|مبد|ملج|منش|مخب|لایقر)[اأإ]ء?'+bLA, ur'\1أ', txt) txt = re.sub(bLB+u'مل[اأإ](ء|)'+bLA, ur'ملأ\1', txt) txt = re.sub(u'مل[اأإ]ء?[ ]?عام'+bLA, u'ملأعام', txt) txt = re.sub(bLB+u'(خل|مبد|ملج|منش|مخب)[أإء]ی'+bLA, ur'\1ئی', txt) txt = re.sub(bLB+u'تو[اأإ]م(ان|اً|)'+bLA, ur'توأم\1', txt) txt = txt.replace(u'طمانینه', u'طمأنینه') txt = txt.replace(u' رافت ', u' رأفت ') txt = txt.replace(u' راساً', u' رأساً') txt = re.sub(u'ی[اأإ]جوج([ ]و?)[ ]?م[اأإ]جوج', ur'یأجوج\1 مأجوج', txt) txt = re.sub(u'متل[اأإ]ل[یئ][ٔء]?', u'متلألئ', txt) #e: ؤ txt = re.sub(u'سئ?[ؤو]ء?[اآ]ل', u'سؤال', txt) txt = re.sub(bLB+u'مو(یّ?د|کّ?د|من|من[ویا]ن|لّ?ف|لّ?ف[یا]ن|سّ?سه?|سّ?سات|سّ?س[یا]ن|خّ?ر|ثّ?ر|نّ?ث|ذّ?ن|دّ?ب|تمر|تمن|انست|الفت|امره|اخذه|تلفه)ی?'+bLA, ur'مؤ\1', txt) txt = re.sub(bLB+u'روء?(سا[یء]?ی?|یا[یء]?ی?|یت)'+bLA, ur'رؤ\1', txt) txt = re.sub(bLB+u'(تواط|تهی|توض)وء?'+bLA, ur'\1ؤ', txt) txt = re.sub(bLB+u'فواد'+bLA, u'فؤاد', txt) txt = re.sub(bLB+u'ذوء?ابه'+bLA, u'ذؤابه', txt) txt = re.sub(bLB+u'ثولول', u'ثؤلول', txt) txt = re.sub(bLB+u'ل[وؤ]ل[وؤ]'+bLA, ur'لؤلؤ', txt) txt = re.sub(bLB+u'تل[اأإ]ل[وؤ](ی{,2})'+bLA, ur'تلألؤ\1', txt) #e: یء txt = re.sub(bLB+u'ش(?:ی[ئءٔ]|ئ)'+bLA, u'شیء', txt) #e: ئ txt = re.sub(bLB+u'(شی|جز|سو|مر)[ءی]ی'+bLA, ur'\1ئی', txt) txt = re.sub(bLB+u'(نش|جر|هی|قرا)[اأإ]ت'+bLA, ur'\1ئت', txt) txt = re.sub(u'مس[ؤو]{1,2}ل', u'مسئول', txt) txt = re.sub(u'مس[اأإ]له', u'مسئله', txt) txt = re.sub(bLB+u'دایم(اً|)'+bLA, ur'دائم\1', txt) txt = txt.replace(u'رییس', u'رئیس') txt = txt.replace(u' مسایل', u' مسائل') txt = txt.replace(u' ملایک', u' ملائک') txt = txt.replace(u'طایر', u'طائر') txt = txt.replace(u' تآتر', u' تئاتر')
#e: هٔ txt = re.sub(u'(?:هٓ|ۀ|هٔ|هٔٔ|هء|ه[ ]ی)'+bLA, u'هٔ', txt) ### BUG: replaceExcept() txt = re.sub(u'(?<=به )(گفته|وسیله|نوشته|واسطه|منزله|اندازه|گونه|نوبه)'+bLA, ur'\1ٔ ', txt) txt = txt.replace(u'درباره ', u'دربارهٔ ') txt = txt.replace(u'هٔٔ', u'هٔ') txt = re.sub(bLB+u'(فرمانده|زره|گره|متوجه)ٔ', ur'\1ِ', txt) # هٔ -> هِ
#s: افعال txt = re.sub(bLB+u'([هن]?می) ?([نب]ی؟|)('+bnMzare+u'|'+bnMazi+u')(ان|)(م|ی|د|یم|ید|ا?ند)'+bLA, ur'\1\2\3\4\5', txt) # می txt = re.sub(bLB+u'(باز|فر[او]|وا|[بد]ر) ?([هن]?می|)([منب]ی?|)('+bnMzare+u'|'+bnMazi+u')(م|ی|د|یم|ید|ا?ند)'+bLA, ur'\1\2\3\4\5', txt) # پیشوند فعل ### BUG txt = re.sub(bLB+u'(باز|فر[او]|وا|[بد]ر) ?([منب]ی?|)('+bnMazi+u')ن'+bLA, ur'\1\2\3ن', txt) txt = re.sub(bLB+u'('+bnMazi+u')ه (ام|ای|است|ایم|اید|اند)'+bLA, ur'\1ه\2', txt) # فم بین «ه» و شناسه txt = re.sub(u'([منب])یا(رزید|فتاد|فتد|فراشت|فروخت|فزود|فسرد|فشاند|ف[کگ]ند|نجامید|ند[او]خت|ندیشید|ن[بگ]اشت|نگیخت)(م|ی|یم|ید|ند|[^'+faChrs+u'])', ur'\1ی\2', txt) # نیافتاد -> نیفتاد txt = re.sub(u'([منب])یا(رز|فر[او]ز|فزای|فسر|فشان|ف[کگ]ن|نبار|نجام|ندا[یز]|ندوز|ندیش|نگار|نگیز)(م|ی|د|یم|ید|ا?ند|[^'+faChrs+u'])', ur'\1ی\2\3', txt) # بیاندیش -> بیندیش
#s: ضمایر ملکی txt = re.sub(u'(?:ه|هٔ)[ ](مان|تان|شان)'+bLA, ur'هٔ\1', txt) txt = re.sub(u'(?<=ه)[ ](ام|ات|اش)'+bLA, ur'\1', txt)
#s: و txt = re.sub(u'رفت[ ]?و ?[اآ]مد', u'رفتوآمد', txt) txt = re.sub(u'گفت[ ]?و ?گو', u'گفتگو', txt) txt = re.sub(u'جست[ ]?و ?جو', u'جستجو', txt) txt = re.sub(u'پخت[ ]?و ?پز', u'پختوپز', txt) txt = re.sub(u'شست[ ]?و ?شو', u'شستوشو', txt) txt = re.sub(u'خفت[ ]?و ?خیز', u'خقتوخیز', txt) txt = re.sub(bLB+u'کند ?و ?کا?و'+bLA, u'کندوکاو', txt) txt = re.sub(bLB+u'کم[ ]و ?کاست', u'کموکاست', txt)
#s: بسیط txt = re.sub(u'(فن|دل)ّ?[ ]?[آا]وری', ur'\1اوری', txt) txt = re.sub(bLB+u'دل[ ](سوزی?|تنگی?|بری?)'+bLA, ur'دل\1', txt) txt = re.sub(bLB+u'یک[ ]دلی'+bLA, u'یکدلی', txt) txt = re.sub(u'گاه[ ]و ?بی[ ]?گاه', u'گاهوبیگاه', txt)
#e: دیگر غلطهای املایی txt = re.sub(u'(سپاس|شکر| بر)[ ]?گ[ذز]ار', ur'\1گزار', txt) txt = re.sub(u'(پایه|بنیان)[ ]?گ[ذز]ار', ur'\1گذار', txt) txt = re.sub(bLB+u'بی[ ]?م[حه]ابا', u'بیمحابا', txt) txt = re.sub(bLB+u'بر ?خو?است', u'برخاست', txt) txt = re.sub(u'خوانواد(?=ه|گی)', u'خانواد', txt) txt = re.sub(u'[آا]نفو?لو? ?[آا]نزا', u'آنفلوآنزا', txt) txt = re.sub(bLB+u'غری[ضظ]ه'+bLA, u'غریزه', txt) txt = txt.replace(u'خواستگاه', u'خاستگاه') txt = txt.replace(u'اطاق', u'اتاق') txt = txt.replace(u'باطری', u'باتری') txt = txt.replace(u'باطلاق', u'باتلاق') txt = txt.replace(u'ضمینه', u'زمینه') txt = txt.replace(u'انظباط', u'انضباط') txt = txt.replace(u'حاظر', u'حاضر') txt = txt.replace(u'نفوظ', u'نفوذ') ### txt = txt.replace(u'مذبور', u'مزبور') txt = txt.replace(u'قائله', u'غائله') txt = txt.replace(u' وحله', u' وهله') txt = txt.replace(u' انهنا', u' انحنا') txt = txt.replace(u'پزشگی', u'پزشکی') txt = txt.replace(u'تضاهرات', u'تظاهرات') txt = txt.replace(u'تلوزیون', u'تلویزیون') txt = txt.replace(u'پرفسور', u'پروفسور') txt = txt.replace(u' خوشنود', u' خشنود') txt = txt.replace(u' الویت', u' اولویت') txt = re.sub(u'ه(گی|گانی?)'+bLA, ur'\1', txt) txt = re.sub(bLB+u'وب[ ]?(سایت|گاه)', u'وبگاه', txt) ### txt = re.sub(u'ویکی ?(?=سازی|فا |[مپ]دیا)', u'ویکی', txt) txt = re.sub(u'ویکیپدیا ?(?='+langs+u')', u'ویکیپدیای ', txt) txt = re.sub(u'علاقه?[ ]?مند', u'علاقهمند', txt) txt = re.sub(u'باقی ?ماند', u'باقیماند', txt) txt = re.sub(u'مت[عاأ][سص]ّ?فانه', u'متأسفانه', txt)
txt = re.sub(bLB+u'من[ ]را'+bLA, u'مرا', txt) txt = re.sub(u'عدم وجود'+bLA, u'نبودِ', txt) txt = txt.replace(u'عدم حضور', u'غیاب') txt = re.sub(u'اقدامات لازمه?'+bLA, u'اقدامهای لازم', txt)
#e: ماهها txt = re.sub(bLB+u'مارچ'+bLA, u'مارس', txt) txt = re.sub(bLB+u'[اآ]ی?پریل'+bLA, u'آوریل', txt) txt = re.sub(bLB+u'(?:جولای|ژوییه)'+bLA, u'ژوئیه', txt) txt = re.sub(bLB+u'[اآ]گوست'+bLA, u'اوت', txt) txt = re.sub(bLB+u'دی?سا?مبر'+bLA, u'دسامبر', txt) txt = re.sub(u'(ربیع|جمادی)[ ]?(?:الثانی|ال[اأإ]خر)', ur'\1الثانی', txt) txt = re.sub(u'(ربیع|جمادی)[ ]?ال[اأإ]ول', ur'\1الاول', txt) txt = re.sub(u'ذ[وی][ ]?(?:ال|)(حج|قعد)[ةه]', ur'ذیال\1ه', txt) ### #monthNum = re.sub(ur'(۲۰[۰۱][۰۱۲۳۴۵۶۷۸۹] ?- ?(۰?[۱۲۳۴۵۶۷۸۹]|۱[۰۱۲]) ?- ?(۰?[۱۲۳۴۵۶۷۸۹]|[۱۲][۰۱۲۳۴۵۶۷۸۹]|۳[۰۱])', ur'\1'+monthName+ur'\3', txt)
#e: جمعالجمع txt = re.sub(u'(مدارک)[ ]?های?'+bLA, u'مدارک', txt) txt = re.sub(bLB+u'رسومات'+bLA, u'رسوم', txt)
#e: حشو txt = re.sub(bLB+u'بر ?علیه', u'علیه', txt) # بر علیه txt = re.sub(u'اعلم[ ]?تر', u'اعلم', txt) # تر
#e: طبق قاعدهٔ فارسی txt = re.sub(u'(آزمایش|پژوهش|پیشنهاد|نمایش|دستور|فرمایش|گزارش|گرایش|باغ|کوهستان)اتی ', ur'\1هایی ', txt) # اتی -> هایی txt = txt.replace(u'بازرسین', u'بازرسان').replace(u'داوطلبین', u'داوطلبان') #e: ین -> ان txt = re.sub(bLB+u'(رهبر|خوب|بد|[مز]ن)یّ?ت', ur'\1ی', txt) # یّت -> ی txt = re.sub(bLB+u'دو[یئ]یت', u'دوگانگی', txt) # یّت txt = txt.replace(u'زباناً', u'زبانی').replace(u'تلفناً', u'تلفنی').replace(u'ناچاراً', u'بهناچار').replace(u'گاهاً', u'گاهی') #e: اً
#e: ؛ txt = txt.replace(u'. زیرا ', u'؛ زیرا ')
#e: عنوانها txt = re.sub(ur'\=\s*پانویس[ ]?(?:ها)?\s*\=', u'= پانویس =', txt) txt = re.sub(ur'\=\s*جُ?ستار(?:های)? (?:وابسته|دیگر|مرتبط|مشابه)\s*\=', u'= جستارهای وابسته =', txt) txt = re.sub(ur'\=\s*منبع[ ]?(?:ها)\s*\=', u'= منابع =', txt) txt = re.sub(ur'\=\s*(?:پیوند|لین[کك])[ ]?(?:های)? (?:به بیرون|بیرونی|خارجی)\s*\=', u'= پیوند به بیرون =', txt)
#e: پارسیسازی txt = re.sub(bLB+u'لیست(ی?)'+bLA, ur'فهرست\1', txt) txt = re.sub(bLB+u'توریسم'+bLA, u'گردشگری', txt)
#a: الگوافزایی if txt.find(u'{{پانویس') is -1: if txt.find(u'= منابع =') is 1:
txt = re.sub(ur'(= منابع =+\n)', ur'\1
\n', txt, re.S)
else: bazbini = True
fixCsmtc()
def fixRedir(): ####
txt = re.sub(ur'\s*#\s*(?:REDIRECT|تغییرمسیر)\s*\s*(.*?)\s*\s*', ur'#تغییرمسیر \1', txt) if txt.find(u'نام صفحه') is 1: bazbini = True if txt.find(u'تغییرمسیر از نویسههای خاص') is -1 and not re.search(u'[A-Za-z0-9'+faChrs+faNums+arNums+u']', faName): txt += u'\n\n \n'
def faToEn(faTxt, type):
faChrsToFrcRplc = u'۰۱۲۳۴۵۶۷۸۹«»٬٫٪،؛؟' enChrsToFrcRplc = u'0123456789""`.%,;?' if type is 'force': for i in range(0,18): enTxt = faTxt.replace(faChrsToFrcRplc[i], enChrsToFrcRplc[i]) elif type is 'safe': ### return enTxt
def fixNavbox():
try: nbTxt = re.search(u'\{\{\s*[Nn]avbox(?:\{\{.*?}}|.*?)*}})'.group(0) except AttributeError: nbNames = {u'[Nn]avbox *[Ss]ubgroup': u'nbFA', u'[Nn]avbox': u, u: u, u'[Nn]avbox': u'nbFA'} nbPars = {u'name': u, u'title': u, u'state': u, u'above': u, u'image': u, u'imageright': u, u'basestyle': u, u'titlestyle': u, u'abovestyle': u, u'groupstyle': u, u'liststyle': u, u'belowstyle': u, u'below': u} for enNbName, faNbName in nbNames.iteritems(): nbTxt = re.sub(u'\{\{\s*%s\s*\|' % enNbName, ur'{{ %s\n|' % faNbName, nbTxt) for enPar, faPar in nbPars.iteritems(): nbTxt = re.sub(u'\s*\|\s*%s(\d*)\s*=\s*' % enPar, ur'\n| %s\1 = ' % faPar, nbTxt) nbTxt = nbTxt.replace(u'| group', u'| groupFA').replace(u'| list', u'| listFA') for i in range(0,10): nbTxt = re.sub(ur'(?<=\n\| groupFA)%s(?= = )' % enNums[i], faNums[i], nbTxt) nbTxt = re.sub(ur'(?<=\n\| listFA)%s(?= = )' % enNums[i], faNums[i], nbTxt) nbTxt = re.sub(ur'(?<=\n\| )((?:groupFA|listFA)[%s])style(?= = )' % faNums, ur'styleFA \1', nbTxt)
def fixInterwiki():
txt = re.sub(u'\[\[\s*(?:[a-z]{2,3}(?:-[a-z]{1,5})*|simple)\s*:\s*]]', , txt) txt = re.sub(u'\s*\[\[\s*([a-z]{2,3}(?:-[a-z]{1,5})*|simple)\s*:\s*(.*?)\s*]]\s*', ur'\n\1:\2\n', txt) txt = re.sub(ur'(?<=\n)\[\[fa:.*?]]\n', , txt) txt = re.sub(ur'(\[\[(?:[a-z]{2,3}(?:-[a-z]{1,5})*|simple):.*?]])\n(?=\1\n)', , txt) # Sort interwikis dictIW = wikipedia.getLanguageLinks(txt) listIWsrtd = wikipedia.interwikiSort(dictIW.keys()) for siteCode in listIWsrtd: ###
def fixSpamming(): ### بررسی وبلاگ بودن یا نبودن ارجاعات و پیوندها
def fixPageName(): ### انتقال صفحهها به عنوان درست
- ------------------------------------------------------------------------------ در تابع اصلی بررسی میشود فضای نام صفحه چیست و بعد یکی از توابع زیر این خط اجرا میشود و هریک از این توابع خود یک یا چندتا از توابع بالای این خط را اجرا میکنند
def inArticle():
fixChars() fixCsmtc() fixDash() fixText() fixInterwiki()
def inTemplate():
fixChars() fixCsmtc() fixDash() fixNavbox() fixText() #fixInterwiki()
def inCategory():
fixChars() fixCsmtc() fixDash() fixText() fixInterwiki()
def inRedirect():
fixCsmtc() fixRedir() ### + fixing_redirect.py
def inTalk():
fixCsmtc()
def inTemplateUser():
fixCsmtc() fixUsrCats() ### if "user" not in cat
def inUser():
fixCsmtc() fixUsrCats() ### if "user" not in cat ### if NoUser is True: remove the page
def inUserSandbox():
fixCsmtc() fixUsrCats() ### if 'user' not in cat
def inFile():
fixCsmtc()
def inPortal():
fixCsmtc() fixInterwiki()
def inProject(): ###
fixCsmtc() fixInterwiki()
def inHelp(): ###
fixCsmtc() fixInterwiki()
def inBook():
fixCsmtc()
- ------------------------------------------------------------------------------
def alarmblog():
alarmlink = u'کاربر:Reza1615/test10' blogs = 'blogfa', 'mihanblog', 'persianblog', 'parsiblog', 'blogspot', 'wordpress', 'blogsky' for blog in blogs: if text_fa.find(blog) != -1: sitea = wikipedia.getSite('fa') pagealarm = wikipedia.Page(sitea, alarmlink) blogalarmtext = pagealarm.get() blogalarmtext = blogalarmtext + u'
\n' + str(page) commentb = u'ربات: در مقاله پیوند وبلاگ موجود است.' pagealarm.put(blogalarmtext, commentb, watchArticle = None, minorEdit = True) break
def alarmsource():
alarmlink = u'کاربر:Reza1615/test9' if text_fa.find(u'= منابع =') is -1: sitea = wikipedia.getSite('fa') pagealarm = wikipedia.Page(sitea, alarmlink) blogalarmtext = pagealarm.get() blogalarmtext = blogalarmtext + u'
\n' + str(page) comments = u'ربات: مقاله بدون منبع است.' pagealarm.put(blogalarmtext, comments, watchArticle = None, minorEdit = True)
def run(self):
trovato_en = False sen = wikipedia.Site('fa') interwiki_list = [] for page in self.generator: try: if not page.canBeEdited(): wikipedia.output(u'Skipping locked page %s' % page.title()) continue text_fa = page.get() except wikipedia.NoPage: wikipedia.output(u'Page %s not found' % page.title()) continue except wikipedia.IsRedirectPage: pageRedirect = page.getRedirectTarget() text_fa = pageRedirect.get() page = page.getRedirectTarget() #wikipedia.output(u'Page %s was Redirect but edited!' % page) except: continue new_text = fixArticle(text_fa) if bloga == True: alarmblog(new_text, str(page)) if sourcea == True: alarmsource(new_text, str(page)) wikipedia.setAction(msg % page) self.change(page, new_text)
class Boteditor:
def __init__(self, generator, autoTitle = False, autoText = False): self.generator = generator def change(self, page, new_text): if new_text != page.get(): #pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title()) pywikibot.showDiff(page.get(), new_text) if raw_input(u'Edit? ') == u'y': try: page.put(new_text, msg, watchArticle = None, minorEdit = True) except wikipedia.EditConflict: wikipedia.output(u'Skipping %s because of edit conflict' % page.title()) except wikipedia.SpamfilterError, url: wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), url))
def main():
gen = None # summary message summary_commandline = None # Don't edit pages which contain certain texts. exceptions = [] # commandline paramater. # Which namespaces should be processed? # default to [] which means all namespaces will be processed namespaces = [] template = None PageTitles = [raw_input(u'Page: ').decode('utf-8')] autoText = False autoTitle = False bloga = False sourcea = False # This factory is responsible for processing command line arguments # that are also used by other scripts and that determine on which pages # to work on. genFactory = pagegenerators.GeneratorFactory() # Load default summary message. # BUG WARNING: This is probably incompatible with the -lang parameter. wikipedia.setAction(msg)
# Read commandline parameters. #------------------------------------------------------------------------------------------------- for arg in wikipedia.handleArgs(): if arg == '-autotitle': autoTitle = True elif arg == '-autotext': autoText = True elif arg.startswith('-page'): if len(arg) == 5: PageTitles.append(wikipedia.input(u'Which page do you want to change?')) else: PageTitles.append(arg[6:]) elif arg.startswith('-except:'): exceptions.append(arg[8:]) elif arg.startswith('-blog:'): bloga = True elif arg.startswith('-source:'): sourcea = True elif arg.startswith('-template:'): template = arg[10:] elif arg.startswith('-namespace:'): namespaces.append(int(arg[11:])) elif arg.startswith('-summary:'): wikipedia.setAction(arg[9:]) summary_commandline = True else: generator = genFactory.handleArg(arg) if generator: gen = generator print namespaces
if PageTitles: pages = [wikipedia.Page(wikipedia.getSite(), PageTitle) for PageTitle in PageTitles] gen = iter(pages) if not gen: # syntax error, show help text from the top of this file wikipedia.showHelp('behsaz') wikipedia.stopme() sys.exit() if namespaces != []: gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces)
- gen = pagegenerators.RedirectFilterPageGenerator(gen)
preloadingGen = pagegenerators.PreloadingGenerator(gen, pageNumber = 20) preloadingGen = pagegenerators.PreloadingGenerator(gen, pageNumber = 1) bot = Boteditor(preloadingGen, autoTitle, autoText) run(bot)
if __name__ == "__main__":
bloga = False sourcea = False main()