ویکیواژه:ربات/ربات اصلاح سطح زبانها
ظاهر
این کد را به صورت گسترده و بر روی گروهی زیادی از لغات نرانید، باعث بهم ریختن صفحات می شود. |
<source lang=python>
- !/usr/bin/python
- -*- coding: utf-8 -*-
- BY: Z (User:ZxxZxxZ on fa.wikipedia)
- BY: رضا (User:reza1615 on fa.wikipedia)
- 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):
- --------------------------------------------------------------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()
- ----------------------------------------------------------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()