ویکی‌واژه:ربات/ربات اصلاح سطح زبان‌ها

از ویکی‌واژه

<source lang=python>

  1. !/usr/bin/python
  2. -*- coding: utf-8 -*-
  3. BY: Z (User:ZxxZxxZ on fa.wikipedia)
  4. BY: رضا (User:reza1615 on fa.wikipedia)
  5. Distributed under the terms of the CC-BY-SA 3.0.

import wikipedia import pagegenerators import re, os, codecs, catlib wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() faSite = wikipedia.getSite('fa') enSite = wikipedia.getSite('en') txtTmp= faChrs = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیًٌٍَُِّْٓيك' msg = u'ربات: اصلاح بر پایهٔ شیوه‌نامه' def fixCsmtc(faTxt):

   # ZWNJ
   txt=faTxt
   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) # در پیش
   return txt

def setparts(txt):

   types=[u'صفت فاعلی',u'صفت شغلی',u'صفت مرکب',u'مصدر متعدی',u'مصدر لازم',u'اسم مصدر',u'صفت نسبی',u'صفت فاعلی',u'صفت مفعولی',u'اسم خاص',u'اسم مرکب',u'اسم',u'مصدر',u'صفت',u'فعل',u'ضمیر',u'آوا',u'پیشوند',u'پسوند',u'پیوندواژه',u'قید',u'شماره']
   typelist=','
   for type in types:
       if txt.find(u'==='+type+'===\n')!=-1:
                   txt=txt.replace(u'==='+type+'===\n',u'@type@==='+type+u'===\n')
   parts=txt.split(u'@type@')
   for i in range(1,len(parts)):
       for type in types:
           if parts[i].find(u'==='+type+'===\n')!=-1:
                   typelist+=type+','
   typelists=typelist.split(',')
   for x in range(0,len(typelists)-1):
       if typelists[x]==:
           continue
       for y in range(x+1,len(typelists)):
           if typelists[y]==:
               continue
           if typelists[x]==typelists[y] and parts[x]!= and parts[y]!=:
               parts[x]=parts[x]+parts[y].replace(u'==='+typelists[x]+u'===\n',u)
               parts[x]=setparts(parts[x])
               parts[y]=u
       print parts[x]
   text=u'\n'
   for part in parts:
       if part==:
           continue
       text+=part+u'\n'
   return text

def BotRun(page,text_fa):

  1. --------------------------------------------------------------action that you want to do on pages-----------------
   #text_fa=fixCsmtc(text_fa)
   textmain=text_fa
   text_fa=text_fa.replace(u'\r\n',u'\n').replace(u'\r',u)
   text_fa=text_fa.replace(u'= ',u'=').replace(u' =',u'=').replace(u'=',u'=').replace(u'=',u'=').replace(u'=(',u'=').replace(u')=',u'=')
   text_fa=text_fa.replace(u'==ترجمه==\n',u'===ترجمه‌ها===\n').replace(u'==ترجمه‌ها==\n',u'===ترجمه‌ها===\n').replace(u'==مترادف‌ها==\n',u'===مترادف‌ها===\n').replace(u'==مترادف==\n',u'===مترادف‌ها===\n')
   passport=False
   langs = [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'یونانی']
   lines=text_fa.split('\n')
   for line in lines:
       linemain=line
       if line.find('-')!=-1:
           if line.find('=')!=-1:
               line=line.replace('=',)
               linepart1=line.split('-')[0]
               linepart2=line.split('-')[1]
               if linepart1==u'فارسی':
                   text_fa=text_fa.replace(linemain,u'==فارسی==\n===ریشه‌شناسی===\n* '+linepart2+u'\n')
               elif linepart1==u'معرب':
                   text_fa=text_fa.replace(linemain,u'==فارسی==\n===ریشه‌شناسی===\n* معرب\n')
               else:
                   text_fa=text_fa.replace(linemain,u'==فارسی==\n===ریشه‌شناسی===\n* '+linepart1+u' و '+linepart2+u'\n')                         
   for lang in langs:               
               text_fa=text_fa.replace('='+lang+'=\n','=='+lang+'==\n').replace('==='+lang+'===\n','=='+lang+'==\n').replace('===='+lang+'====\n','=='+lang+'==\n')
               langar=lang.replace(u'ی',u'ي').replace(u'ک',u'ك')
               text_fa=text_fa.replace('='+langar+'=\n','=='+lang+'==\n').replace('==='+langar+'===\n','=='+lang+'==\n').replace('===='+langar+'====\n','=='+lang+'==\n')
               text_fa=text_fa.replace(u'=='+lang+'==\n',u'@testcases@=='+lang+u'==\n')
   if text_fa.find(u'@testcases@')!=-1:
               parts=text_fa.split(u'@testcases@')
               text='\n'
               for part in parts:
                      if part==u:
                          continue
                      if part.find(u'* فرهنگ لغت معین')!=-1:
                          for lang in langs:
                              if lang==u'فارسی':
                                  continue
                              part=part.replace(u'=='+lang+'==\n',u'\n==فارسی==\n===ریشه‌شناسی===\n* '+lang+'\n')
                      text+=part+u'\n'
               text_fa=text.strip()+'\n'
   #------------------------------------------
   types=[u'صفت فاعلی',u'صفت شغلی',u'صفت مرکب',u'مصدر متعدی',u'مصدر لازم',u'اسم مصدر',u'صفت نسبی',u'صفت فاعلی',u'صفت مفعولی',u'اسم خاص',u'اسم مرکب',u'اسم',u'مصدر',u'صفت',u'فعل',u'ضمیر',u'آوا',u'پیشوند',u'پسوند',u'پیوندواژه',u'قید',u'شماره']
   
   for type in types:               
               text_fa=text_fa.replace('=='+type+'==\n','==='+type+'===\n').replace('===='+type+'====\n','==='+type+'===\n').replace('====='+lang+'=====\n','==='+lang+'===\n')
               typear=lang.replace(u'ی',u'ي').replace(u'ک',u'ك')
               text_fa=text_fa.replace('=='+typear+'==\n','==='+type+'===\n').replace('===='+typear+'====\n','==='+type+'===\n').replace('====='+langar+'=====\n','==='+lang+'===\n')
   langlists=','
   for lang in langs:
       if text_fa.find(u'=='+lang+'==\n')!=-1:
                   text_fa=text_fa.replace(u'=='+lang+'==\n',u'@testcases@=='+lang+u'==\n')
   for type in types:
       text_fa=text_fa.replace(u'==='+type+'===\n',u'@type@==='+type+u'===\n')
   text_fa=text_fa.replace(u,u)
  
   parts=text_fa.split(u'@testcases@')
   for i in range(1,len(parts)):
       for lang in langs:
           if parts[i].find(u'=='+lang+'==\n')!=-1:
                   langlists+=lang+','
   langlist=langlists.split(',')
   for x in range(0,len(langlist)-1):
       if langlist[x]==:
           continue
       for y in range(x+1,len(langlist)):
           if langlist[y]==:
               continue
           if langlist[x]==langlist[y] and parts[x]!= and parts[y]!=:
               parts[x]=parts[x]+parts[y].replace(u'=='+langlist[x]+u'==\n',u)
               parts[x]=setparts(parts[x])
               parts[y]=u
   text=u'\n'
   for part in parts:
       if part==:
           continue
       text+=part+u'\n'
   text_fa=text.replace('@type@',).replace(u'==معرب==\n',u'==فارسی==\n===ریشه‌شناسی===\n* عربی\n')
   text_fa=text_fa.replace('\n\n\n','\n\n').replace('\n\n\n','\n\n').replace('\n\n\n','\n\n').replace('\n\n\n','\n\n')
   if text_fa==textmain:
       print "didn't work!"
   return text_fa.strip()


  1. ----------------------------------------------------------end of action that you want to do on pages---------------

def run(generator):

       for page in generator: 
           if str(page.title()).find('صفحهٔ اصلی')!=-1:
               continue
           try:
               if not page.canBeEdited():
                   wikipedia.output( u'Skipping locked page %s' % page.title() )
                   continue
               text_fa = page.get()#------------------------------geting pages content
           except wikipedia.NoPage:
               wikipedia.output( u'Page %s not found' % page.title() )
               continue
           except wikipedia.IsRedirectPage:#----------------------geting pages redirects contents
                pageRedirect = page.getRedirectTarget()
                text_fa = pageRedirect.get()
                wikipedia.output( u'Page %s was Redirect but edited!' %  pageRedirect )
                 
           except:
                continue
           if str(page).find('صفحهٔ اصلی')!=-1:
               continue
           new_text=BotRun(page,text_fa)
           savepart( page,new_text )#---------------saving changes in page with new_text content-----------------------------------


def savepart( page,new_text):

           try:
               page.put( new_text,msg % page ,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():

   summary_commandline,template,gen = None,None,None
   exceptions,PageTitles,namespaces = [],[],[]
   autoText,autoTitle = False,False
   genFactory = pagegenerators.GeneratorFactory()
   wikipedia.setAction( msg )
   arg=False#------if you dont want to work with arguments leave it False if you want change it to True---
   if arg==False:
       for arg in wikipedia.handleArgs():
           if arg == '-autotitle':
               autoTitle = True
           elif arg == '-autotext':
               autoText = True
           elif arg.startswith( '-page:' ):
               if len(arg) == 6:
                   PageTitles.append(wikipedia.input( u'Which page do you want to chage?' ))
               else:
                   PageTitles.append(arg[6:])
           elif arg.startswith( '-cat:' ):
               if len(arg) == 5:
                   PageTitles.append(wikipedia.input( u'Which Category do you want to chage?' ))
               else:
                   PageTitles.append('Category:'+arg[5:])
           elif arg.startswith( '-template:' ):
               if len(arg) == 10:
                   PageTitles.append(wikipedia.input( u'Which Template do you want to chage?' ))
               else:
                   PageTitles.append('Template:'+arg[10:])
           elif arg.startswith('-except:'):
               exceptions.append(arg[8:])
           elif arg.startswith( '-namespace:' ):
               namespaces.append( int( arg[11:] ) )
           elif arg.startswith( '-ns:' ):
               namespaces.append( int( arg[4:] ) )
           elif arg.startswith( '-summary:' ):
               wikipedia.setAction( arg[9:] )
               summary_commandline = True
           else:
               generator = genFactory.handleArg(arg)
               if generator:
                   gen = generator
   else:
       PageTitles = [raw_input(u'Page:> ').decode('utf-8')]

   if PageTitles:
       pages = [wikipedia.Page(faSite,PageTitle) for PageTitle in PageTitles]
       gen = iter( pages )
   if not gen:
       wikipedia.stopme()
       sys.exit()
   if namespaces != []:
       gen = pagegenerators.NamespaceFilterPageGenerator( gen,namespaces )
   preloadingGen = pagegenerators.PreloadingGenerator( gen,pageNumber = 60 )#---number of pages that you want load at same time
   run(preloadingGen)

if __name__ == "__main__":

   try:
       main()
   finally:
       wikipedia.stopme()