Χρήστης:Flubot/Κλείδα ταξινόμησης

Κώδικας που δεν χρησιμοποιείται πια

επεξεργασία
Χρήστης:Flubot/Κλείδα_ταξινόμησης/παρωχημένο

Γαλλική γλώσσα

επεξεργασία

Ακολουθεί κώδικας που θα προσθέτει την κλείδα ταξινόμησης σε γαλλικές μόνο λέξεις. Η κλείδα θα προστίθεται

  1. μετά την παράμετρο γλώσσας στο πρότυπο που δηλώνει το μέρος του λόγου
  2. σε κείμενο του τύπου [[Κατηγορία:xxxxxxxx γαλλικά]] ή [[Κατηγορία:xxxxxxxx (γαλλικά)]]
  3. σε ετυμολογίες, π.χ {{ετυμ xx|FR}}

εντολή: python taxin-fr.py -file:kle-list

ή : python taxin-fr.py -cat:"Γαλλική γλώσσα"
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wikipedia, pagegenerators, catlib
import re

class kleidabot:

  def __init__(self, generator, debug_bul = True):
    self.generator = generator
    self.debug_bul = debug_bul

  def run(self):
    spaces_tag = re.compile('([ \*\.,\'\-\(\)]*)')
    apost_tag = re.compile(u'\’')
    page_tag = re.compile('(.*)')
    pos1_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|προθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|fr((?P<arith>\|αριθ=[0-9]+)|(?P<kleida>\|[^\|\}]*))*\}\}')
    etym_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|FR(\|*)\}\}')
    etym1_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|FR\|([^\}]*)\}\}')
    categ_tag = re.compile(u'\[\[Κατηγορία:(.*)γαλλικά(\)*)(\|*)\]\](.*)')
    categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)γαλλικά(\)*)\|([^\]]*)\]\]')
    #set_string = re.compile('set')
    # πίνακες αντιστοίχισης
    mtg_apo = u'À Â Ç É È Ê Ë Î Ï Ô Œ Ù Û Ü à â ç é è ê ë î ï ô œ ù û ü æ'
    mtg_se =  u'a a c e e e e i i o oe u u u a a c e e e e i i o oe u u u ae'
    trkeys = mtg_apo.split(u' ')
    for i in range(len(trkeys)):
        trkeys[i] = ord(trkeys[i])
    trvals = mtg_se.split(u' ')
    trtable = dict(zip(trkeys,trvals)) 


    # Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές

    for p in self.generator:
    	  t = p.title()
	  print(t)
	  kleida = t.translate(trtable)
	  # να βρούμε αν η λέξη αρχίζει από se ή από s'
	  ti=kleida.split(' ', 1)[0]
	  if ti=="se" or ti=="s'"or ti==u"s’":
		kleida = kleida.split(' ', 1)[1]
	  ti=kleida.split('\'', 1)[0]
	  if ti=="s":
		kleida = kleida.split('\'', 1)[1]
	  ti=kleida.split(u'’', 1)[0]
	  if ti=="s":
		kleida = kleida.split(u'’', 1)[1]

	  kleida = spaces_tag.sub('',kleida)
	  kleida = apost_tag.sub('',kleida)
	  kleida = kleida.lower()
	  if kleida != t.lower():
	  	kleida = '|' + kleida
		wikipedia.setAction(u'Εισαγωγή κλείδας ταξινόμησης')
	  else:
	        kleida = ''
		wikipedia.setAction(u'διαγραφή λανθασμένης ή περιττής κλείδας ταξινόμησης')
	  page = wikipedia.Page(wikipedia.getSite(), t)
	  arxiko = page.get(get_redirect=True)

	# Αντικαταστάσεις

	  seires = arxiko.split("\n")
	  kainoyrio = []  
	  for seira in seires:
		  result = pos1_tag.search(seira)
		  if (result):
			  if result.group('arith'):
				  seira = pos1_tag.sub(u'{{\g<pos>|fr'+kleida+u'\g<arith>}}',seira)
			  else:
				  seira = pos1_tag.sub(u'{{\g<pos>|fr'+kleida+u'}}',seira)
		  kainoyrio.append(seira)
	  p2 = "\n".join(kainoyrio)
	  p2 = etym_tag.sub(u'{{ετυμ \g<1>|FR'+kleida+'}}',p2)
	  p2 = etym1_tag.sub(u'{{ετυμ \g<1>|FR'+kleida+'}}',p2)
	  p2 = categ_tag.sub(u'[[Κατηγορία:\g<1>γαλλικά\g<2>'+kleida+']]',p2)
	  keimeno = categ1_tag.sub(u'[[Κατηγορία:\g<1>γαλλικά\g<2>'+kleida+']]',p2)


	# Εδώ ο κώδικας για την αποθήκευση
	  if keimeno != page.get():
            # Show the title of the page we're working on.
            # Highlight the title in purple.
	      wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
            ## show what was changed
	      wikipedia.showDiff(page.get(), keimeno)
	      #choice= 'y'
	      if self.debug_bul:
	        choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['yes', 'No', 'all'], ['y', 'N', 'a'], 'N')
        	if choice == 'a':
	          choice = 'y'
	          self.debug_bul = False
	        elif choice != 'y':
	          choice='n'
	      if choice == 'y':
	        try:
			# Save the page
			page.put(keimeno)
		except wikipedia.IsRedirectPage:
			wikipedia.output(u'Skipping %s because it is a redirect' % (page.title()))
	        except wikipedia.EditConflict:
			wikipedia.output(u'Skipping %s because of edit conflict' % (page.title()))
	        except wikipedia.SpamfilterError, error:
			wikipedia.output(u'Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))
    return 0

def main():
    gen = None
    pageTitle = []
    for arg in wikipedia.handleArgs():
        if arg:
            if arg.startswith('-start:'):
                gen = pagegenerators.AllpagesPageGenerator(arg[7:])
            elif arg.startswith('-ref:'):
                referredPage = wikipedia.Page(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.ReferringPageGenerator(referredPage)
            elif arg.startswith('-links:'):
                linkingPage = wikipedia.Page(wikipedia.getSite(), arg[7:])
                gen = pagegenerators.LinkedPageGenerator(linkingPage)
            elif arg.startswith('-file:'):
                gen = pagegenerators.TextfilePageGenerator(arg[6:])
            elif arg.startswith('-cat:'):
                cat = catlib.Category(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.CategorizedPageGenerator(cat)
            else:
                pageTitle.append(arg)

    if pageTitle:
        page = wikipedia.Page(wikipedia.getSite(), ' '.join(pageTitle))
        gen = iter([page])
    if not gen:
        wikipedia.showHelp('touch')
    else:
        preloadingGen = pagegenerators.PreloadingGenerator(gen)
        bot = kleidabot(preloadingGen)
        bot.run()


if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()

Γερμανική γλώσσα

επεξεργασία

Ακολουθεί κώδικας που θα προσθέτει την κλείδα ταξινόμησης σε γερμανικές μόνο λέξεις. Η κλείδα θα προστίθεται

  1. μετά την παράμετρο γλώσσας στο πρότυπο που δηλώνει το μέρος του λόγου
  2. σε κείμενο του τύπου [[Κατηγορία:xxxxxxxx γερμανικά]] ή [[Κατηγορία:xxxxxxxx (γερμανικά)]]
  3. σε ετυμολογίες, π.χ {{ετυμ xx|DE}}
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wikipedia, pagegenerators, catlib
import re

class kleidabot:

  def __init__(self, generator, debug_bul = True):
    self.generator = generator
    self.debug_bul = debug_bul

# a ą b c ć d e ę f g h i j k l ł m n ń o ó p r s ś t u w y z ź ż

  def run(self):
    spaces_tag = re.compile('([ \*\.,\'\-\(\)]*)')
    apost_tag = re.compile(u'\’')
    pos1_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|de((?P<arith>\|αριθ=[0-9]+)|(?P<kleida>\|[^\|\}]*))*\}\}')

    etym_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|DE(\|*)\}\}')
    etym1_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|DE\|([^\}]*)\}\}')
    categ_tag = re.compile(u'\[\[Κατηγορία:(.*)γερμανικά(\)*)(\|*)\]\](.*)')
    categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)γερμανικά(\)*)\|([^\]]*)\]\]')



    # πίνακες αντιστοίχισης
    mtg_apo = u'É Ä Â Ö Ü à â ä ç é è ê ë î ï ô ö ù û ü ß ſ œ'
    mtg_se =  u'e a a ο u a a a c e e e e i i o o u u u ss s oe'

    trkeys = mtg_apo.split(u' ')
    for i in range(len(trkeys)):
	trkeys[i] = ord(trkeys[i]) 
    trvals = mtg_se.split(u' ')
    trtable = dict(zip(trkeys,trvals)) 

# Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές
    for p in self.generator:
    	  t = p.title()
	  print(t)
	  kleida = t.translate(trtable)
	  kleida = kleida.lower()
	  kleida = spaces_tag.sub('', kleida)
	  kleida = apost_tag.sub('',kleida)
	  if kleida != t.lower():
	  	kleida = '|' + kleida
		wikipedia.setAction(u'Εισαγωγή κλείδας ταξινόμησης')
	  else:
	        kleida = ''
		wikipedia.setAction(u'διαγραφή λανθασμένης ή περιττής κλείδας ταξινόμησης')
	  page = wikipedia.Page(wikipedia.getSite(), t)
	  arxiko = page.get(get_redirect=True)
  
# Αντικαταστάσεις

	  seires = arxiko.split("\n")
	  kainoyrio = []  
	  for seira in seires:
		  result = pos1_tag.search(seira)
		  if (result):
			  if result.group('arith'):
				  seira = pos1_tag.sub(u'{{\g<pos>|de'+kleida+u'\g<arith>}}',seira)
			  else:
				  seira = pos1_tag.sub(u'{{\g<pos>|de'+kleida+u'}}',seira)
		  kainoyrio.append(seira)
	  p2 = "\n".join(kainoyrio)

	  p2 = etym_tag.sub(u'{{ετυμ \g<1>|DE'+kleida+'}}',p2)
	  p2 = etym1_tag.sub(u'{{ετυμ \g<1>|DE'+kleida+'}}',p2)
	  p2 = categ_tag.sub(u'[[Κατηγορία:\g<1>γερμανικά\g<2>'+kleida+']]',p2)
	  keimeno = categ1_tag.sub(u'[[Κατηγορία:\g<1>γερμανικά\g<2>'+kleida+']]',p2)

	# Εδώ ο κώδικας για την αποθήκευση
	  if keimeno != page.get():
            # Show the title of the page we're working on.
            # Highlight the title in purple.
	      wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
            ## show what was changed
	      wikipedia.showDiff(page.get(), keimeno)
	      #choice= 'y'
	      if self.debug_bul:
	        choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['yes', 'No', 'all'], ['y', 'N', 'a'], 'N')
        	if choice == 'a':
	          choice = 'y'
	          self.debug_bul = False
	        elif choice != 'y':
	          choice='n'
	      if choice == 'y':
	        try:
			# Save the page
			page.put(keimeno)
		except wikipedia.IsRedirectPage:
			wikipedia.output(u'Skipping %s because it is a redirect' % (page.title()))
	        except wikipedia.EditConflict:
			wikipedia.output(u'Skipping %s because of edit conflict' % (page.title()))
	        except wikipedia.SpamfilterError, error:
			wikipedia.output(u'Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))
    return 0

def main():
    gen = None
    pageTitle = []
    for arg in wikipedia.handleArgs():
        if arg:
            if arg.startswith('-start:'):
                gen = pagegenerators.AllpagesPageGenerator(arg[7:])
            elif arg.startswith('-ref:'):
                referredPage = wikipedia.Page(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.ReferringPageGenerator(referredPage)
            elif arg.startswith('-links:'):
                linkingPage = wikipedia.Page(wikipedia.getSite(), arg[7:])
                gen = pagegenerators.LinkedPageGenerator(linkingPage)
            elif arg.startswith('-file:'):
                gen = pagegenerators.TextfilePageGenerator(arg[6:])
            elif arg.startswith('-cat:'):
                cat = catlib.Category(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.CategorizedPageGenerator(cat)
            else:
                pageTitle.append(arg)

    if pageTitle:
        page = wikipedia.Page(wikipedia.getSite(), ' '.join(pageTitle))
        gen = iter([page])
    if not gen:
        wikipedia.showHelp('touch')
    else:
        preloadingGen = pagegenerators.PreloadingGenerator(gen)
        bot = kleidabot(preloadingGen)
        bot.run()


if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()

Γλώσσα Εσπεράντο

επεξεργασία

Πολωνική γλώσσα

επεξεργασία
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wikipedia, pagegenerators, catlib
import re

class kleidabot:

  def __init__(self, generator, debug_bul = True):
    self.generator = generator
    self.debug_bul = debug_bul

# a ą b c ć d e ę f g h i j k l ł m n ń o ó p r s ś t u w y z ź ż

  def run(self):
    spaces_tag = re.compile('([ \*\.,\'\-\(\)]*)')
    apost_tag = re.compile(u'\’')
    pos1_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|pl((?P<arith>\|αριθ=[0-9]+)|(?P<kleida>\|[^\|\}]*))*\}\}')

    etym_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|PL(\|*)\}\}')
    etym1_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|PL\|([^\}]*)\}\}')
    categ_tag = re.compile(u'\[\[Κατηγορία:(.*)πολωνικά(\)*)(\|*)\]\](.*)')
    categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)πολωνικά(\)*)\|([^\]]*)\]\]')



    # πίνακες αντιστοίχισης
    mtg_apo = u'ą ć ę ł ń ó ś ź ż'
    mtg_se =  u'aα cα eα lα nα oα sα zα zε'

    trkeys = mtg_apo.split(u' ')
    for i in range(len(trkeys)):
	trkeys[i] = ord(trkeys[i]) 
    trvals = mtg_se.split(u' ')
    trtable = dict(zip(trkeys,trvals)) 

# Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές
    for p in self.generator:
    	  t = p.title()
	  print(t)
	  #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας
	  T0=t[0:1]
	  t9=t[1:len(t)+1]
	  kleida = t9.translate(trtable)
	  kleida = T0 + kleida
	  kleida = kleida.lower()
	  kleida = spaces_tag.sub('', kleida)
	  kleida = apost_tag.sub('',kleida)
	  if kleida != t.lower():
	  	kleida = '|' + kleida
		wikipedia.setAction(u'Εισαγωγή κλείδας ταξινόμησης')
	  else:
	        kleida = ''
		wikipedia.setAction(u'διαγραφή λανθασμένης ή περιττής κλείδας ταξινόμησης')
	  page = wikipedia.Page(wikipedia.getSite(), t)
	  arxiko = page.get(get_redirect=True)
  
# Αντικαταστάσεις

	  seires = arxiko.split("\n")
	  kainoyrio = []  
	  for seira in seires:
		  result = pos1_tag.search(seira)
		  if (result):
			  if result.group('arith'):
				  seira = pos1_tag.sub(u'{{\g<pos>|pl'+kleida+u'\g<arith>}}',seira)
			  else:
				  seira = pos1_tag.sub(u'{{\g<pos>|pl'+kleida+u'}}',seira)
		  kainoyrio.append(seira)
	  p2 = "\n".join(kainoyrio)

	  p2 = etym_tag.sub(u'{{ετυμ \g<1>|PL'+kleida+'}}',p2)
	  p2 = etym1_tag.sub(u'{{ετυμ \g<1>|PL'+kleida+'}}',p2)
	  p2 = categ_tag.sub(u'[[Κατηγορία:\g<1>πολωνικά\g<2>'+kleida+']]',p2)
	  keimeno = categ1_tag.sub(u'[[Κατηγορία:\g<1>πολωνικά\g<2>'+kleida+']]',p2)

	# Εδώ ο κώδικας για την αποθήκευση
	  if keimeno != page.get():
            # Show the title of the page we're working on.
            # Highlight the title in purple.
	      wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
            ## show what was changed
	      wikipedia.showDiff(page.get(), keimeno)
	      #choice= 'y'
	      if self.debug_bul:
	        choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['yes', 'No', 'all'], ['y', 'N', 'a'], 'N')
        	if choice == 'a':
	          choice = 'y'
	          self.debug_bul = False
	        elif choice != 'y':
	          choice='n'
	      if choice == 'y':
	        try:
			# Save the page
			page.put(keimeno)
		except wikipedia.IsRedirectPage:
			wikipedia.output(u'Skipping %s because it is a redirect' % (page.title()))
	        except wikipedia.EditConflict:
			wikipedia.output(u'Skipping %s because of edit conflict' % (page.title()))
	        except wikipedia.SpamfilterError, error:
			wikipedia.output(u'Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))
    return 0

def main():
    gen = None
    pageTitle = []
    for arg in wikipedia.handleArgs():
        if arg:
            if arg.startswith('-start:'):
                gen = pagegenerators.AllpagesPageGenerator(arg[7:])
            elif arg.startswith('-ref:'):
                referredPage = wikipedia.Page(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.ReferringPageGenerator(referredPage)
            elif arg.startswith('-links:'):
                linkingPage = wikipedia.Page(wikipedia.getSite(), arg[7:])
                gen = pagegenerators.LinkedPageGenerator(linkingPage)
            elif arg.startswith('-file:'):
                gen = pagegenerators.TextfilePageGenerator(arg[6:])
            elif arg.startswith('-cat:'):
                cat = catlib.Category(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.CategorizedPageGenerator(cat)
            else:
                pageTitle.append(arg)

    if pageTitle:
        page = wikipedia.Page(wikipedia.getSite(), ' '.join(pageTitle))
        gen = iter([page])
    if not gen:
        wikipedia.showHelp('touch')
    else:
        preloadingGen = pagegenerators.PreloadingGenerator(gen)
        bot = kleidabot(preloadingGen)
        bot.run()


if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()

Πορτογαλική γλώσσα

επεξεργασία

Ακολουθεί κώδικας που θα προσθέτει την κλείδα ταξινόμησης σε πορτογαλικές μόνο λέξεις. Η κλείδα θα προστίθεται

  1. μετά την παράμετρο γλώσσας στο πρότυπο που δηλώνει το μέρος του λόγου
  2. σε κείμενο του τύπου [[Κατηγορία:xxxxxxxx πορτογαλικά]] ή [[Κατηγορία:xxxxxxxx (πορτογαλικά)]]
  3. σε ετυμολογίες, π.χ {{ετυμ xx|PT}}

πίνακες αντιστοίχισης

Από: ç á â ã à é ê í ó ô õ ú ü

Σε: c a a a a e e i o o o u u


Ρουμανική γλώσσα

επεξεργασία

Εντολή

python taxin-ro.py -cat:"Ρουμανική γλώσσα"
(ή με λίστα λέξεων) python taxin-ro.py -file:kle-list
#!/usr/bin/python
# -*- coding: utf-8 -*-

# a ą b c ć d e ę f g h i j k l ł m n ń o ó p r s ś t u w y z ź ż

import wikipedia, pagegenerators, catlib
import re

class kleidabot:

  def __init__(self, generator, debug_bul = True):
    self.generator = generator
    self.debug_bul = debug_bul

# a ą b c ć d e ę f g h i j k l ł m n ń o ó p r s ś t u w y z ź ż

  def run(self):
    spaces_tag = re.compile('([ \*\.,\'\-\(\)]*)')
    apost_tag = re.compile(u'\’')
    pos1_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|ro((?P<arith>\|αριθ=[0-9]+)|(?P<kleida>\|[^\|\}]*))*\}\}')

    etym_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|RO(\|*)\}\}')
    etym1_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|RO\|([^\}]*)\}\}')
    categ_tag = re.compile(u'\[\[Κατηγορία:(.*)ρουμανικά(\)*)(\|*)\]\](.*)')
    categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)ρουμανικά(\)*)\|([^\]]*)\]\]')

    # πίνακες αντιστοίχισης

    mtg_apo = u'ă â î ş ș ţ ț'
    mtg_se =  u'aα aε iα sα sα tα tα'

    trkeys = mtg_apo.split(u' ')
    for i in range(len(trkeys)):
	trkeys[i] = ord(trkeys[i]) 
    trvals = mtg_se.split(u' ')
    trtable = dict(zip(trkeys,trvals)) 

# Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές
    for p in self.generator:
    	  t = p.title()
	  print(t)
	  #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας
	  T0=t[0:1]
	  t9=t[1:len(t)+1]
	  kleida = t9.translate(trtable)
	  kleida = T0 + kleida
	  kleida = kleida.lower()
	  kleida = spaces_tag.sub('', kleida)
	  kleida = apost_tag.sub('',kleida)
	  if kleida != t.lower():
	  	kleida = '|' + kleida
		wikipedia.setAction(u'Εισαγωγή κλείδας ταξινόμησης')
	  else:
	        kleida = ''
		wikipedia.setAction(u'διαγραφή λανθασμένης ή περιττής κλείδας ταξινόμησης')
	  page = wikipedia.Page(wikipedia.getSite(), t)
	  arxiko = page.get(get_redirect=True)
  
# Αντικαταστάσεις

	  seires = arxiko.split("\n")
	  kainoyrio = []  
	  for seira in seires:
		  result = pos1_tag.search(seira)
		  if (result):
			  if result.group('arith'):
				  seira = pos1_tag.sub(u'{{\g<pos>|ro'+kleida+u'\g<arith>}}',seira)
			  else:
				  seira = pos1_tag.sub(u'{{\g<pos>|ro'+kleida+u'}}',seira)
		  kainoyrio.append(seira)
	  p2 = "\n".join(kainoyrio)

	  p2 = etym_tag.sub(u'{{ετυμ \g<1>|RO'+kleida+'}}',p2)
	  p2 = etym1_tag.sub(u'{{ετυμ \g<1>|RO'+kleida+'}}',p2)
	  p2 = categ_tag.sub(u'[[Κατηγορία:\g<1>ρουμανικά\g<2>'+kleida+']]',p2)
	  keimeno = categ1_tag.sub(u'[[Κατηγορία:\g<1>ρουμανικά\g<2>'+kleida+']]',p2)

	# Εδώ ο κώδικας για την αποθήκευση
	  if keimeno != page.get():
            # Show the title of the page we're working on.
            # Highlight the title in purple.
	      wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
            ## show what was changed
	      wikipedia.showDiff(page.get(), keimeno)
	      #choice= 'y'
	      if self.debug_bul:
	        choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['yes', 'No', 'all'], ['y', 'N', 'a'], 'N')
        	if choice == 'a':
	          choice = 'y'
	          self.debug_bul = False
	        elif choice != 'y':
	          choice='n'
	      if choice == 'y':
	        try:
			# Save the page
			page.put(keimeno)
		except wikipedia.IsRedirectPage:
			wikipedia.output(u'Skipping %s because it is a redirect' % (page.title()))
	        except wikipedia.EditConflict:
			wikipedia.output(u'Skipping %s because of edit conflict' % (page.title()))
	        except wikipedia.SpamfilterError, error:
			wikipedia.output(u'Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))
    return 0

def main():
    gen = None
    pageTitle = []
    for arg in wikipedia.handleArgs():
        if arg:
            if arg.startswith('-start:'):
                gen = pagegenerators.AllpagesPageGenerator(arg[7:])
            elif arg.startswith('-ref:'):
                referredPage = wikipedia.Page(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.ReferringPageGenerator(referredPage)
            elif arg.startswith('-links:'):
                linkingPage = wikipedia.Page(wikipedia.getSite(), arg[7:])
                gen = pagegenerators.LinkedPageGenerator(linkingPage)
            elif arg.startswith('-file:'):
                gen = pagegenerators.TextfilePageGenerator(arg[6:])
            elif arg.startswith('-cat:'):
                cat = catlib.Category(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.CategorizedPageGenerator(cat)
            else:
                pageTitle.append(arg)

    if pageTitle:
        page = wikipedia.Page(wikipedia.getSite(), ' '.join(pageTitle))
        gen = iter([page])
    if not gen:
        wikipedia.showHelp('touch')
    else:
        preloadingGen = pagegenerators.PreloadingGenerator(gen)
        bot = kleidabot(preloadingGen)
        bot.run()


if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()

Τουρκική γλώσσα

επεξεργασία

Σημ.: Εξαιτίας της ενοποίησης κεφαλαίων και πεζών αρχικών από τον κώδικα του Mediawiki, είναι αναγκαίο μόνο για την τουρκική γλώσσα να μπαίνει ο κεφαλαίος χαρακτήρας İ στην κλείδα ταξινόμησης των λέξεων που αρχίζουν από πεζό i . Είναι το μοναδικό κεφαλαίο γράμμα που χρησιμοποιούμε στις κλείδες ταξινόμησης.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wikipedia, pagegenerators, catlib
import re

class kleidabot:

  def __init__(self, generator, debug_bul = True):
    self.generator = generator
    self.debug_bul = debug_bul

  def run(self):

# İ â Â î Î û Û Ç ç Ğ ğ Ö ö Ş ş Ü ü I ı

	spaces_tag = re.compile('([ \*\.\'\-\(\)]*)')
	apost_tag = re.compile(u'\’')
	page_tag = re.compile('(.*)')
	pos_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|tr(\|*)\}\}')

	pos1_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|tr\|(?P<kleidi>[^\|\}]*)\}\}')
	pos2_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|tr\|αριθ\=(?P<arith>[1-9]*)(\|*)\}\}')
	pos3_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|tr\|αριθ\=(?P<arith>[1-9]*)\|(?P<kleidi>[^\}\|]*)\}\}')
	pos4_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|tr\|(?P<kleidi>[^\}\|]*)\|αριθ=(?P<arith>[1-9]*)\}\}')
	etym_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|TR\}\}')
	categ_tag = re.compile(u'\[\[Κατηγορία:(.*)τουρκικά(\)*)\]\](.*)')
	set_string = re.compile('set')
	debug_bul = True

	# πίνακες αντιστοίχισης
	mtg_apo = u'â Â î Î û Û Ç ç Ğ ğ Ö ö Ş ş Ü ü I ı İ'
	mtg_se =  u'a a i i u u cα cα gα gα oα oα sα sα uα uα hι hι i'

	trkeys = mtg_apo.split(u' ')
	for i in range(len(trkeys)):
		trkeys[i] = ord(trkeys[i]) 
	trvals = mtg_se.split(u' ')
	trtable = dict(zip(trkeys,trvals)) 

	wikipedia.setAction(u'Εισαγωγή κλείδας ταξινόμησης')

	for p in self.generator:
    	  t = p.title()
	  #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας
	  print(t)
	  T0=t[0:1]
	  t9=t[1:len(t)+1]
	  kleida = t9.translate(trtable).lower()
	  if T0 == 'I':
		T0 = u'ı'
	  elif T0 == u'i' or T0 == u'İ':
		T0 = u'İ'
	  else:
	  	T0 = T0.lower()
	  
	  kleida = T0 + kleida

	  kleida = spaces_tag.sub('', kleida)
	  kleida = apost_tag.sub('',kleida)
	  
	  if kleida.upper()==t.upper():
		kleida=""
	  else:
		kleida = "|"+kleida
	  page = wikipedia.Page(wikipedia.getSite(), t)
	  arxiko = page.get(get_redirect=True)
  
# Αντικαταστάσεις

	  p2 = pos2_tag.sub(u'{{\g<pos>|tr'+kleida+u'|αριθ=\g<arith>}}',arxiko)
	  p2 = pos3_tag.sub(u'{{\g<pos>|tr'+kleida+u'|αριθ=\g<arith>}}',p2)

	  p2 =  pos_tag.sub(r'{{\g<pos>|tr'+kleida+'}}',p2)
	  p2 = pos1_tag.sub(r'{{\g<pos>|tr'+kleida+'}}',p2)

	  p2 = pos4_tag.sub(u'{{\g<pos>|tr'+kleida+u'|αριθ=\g<arith>}}',p2)

	  p2 = etym_tag.sub(u'{{ετυμ \g<1>|TR'+kleida+'}}',p2)
	  keimeno = categ_tag.sub(u'[[Κατηγορία:\g<1>τουρκικά\g<2>'+kleida+']]',p2)

	# Εδώ θα μπει ο κώδικας για την αποθήκευση
	  if keimeno != page.get():
         # Show the title of the page we're working on.
            # Highlight the title in purple.
	      wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
            ## show what was changed
	      wikipedia.showDiff(page.get(), keimeno)
	      if debug_bul:
	        choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['yes', 'No', 'all'], ['y', 'N', 'a'], 'N')
	        if choice == 'a':
		  choice = 'y'
	          debug_bul = False
	        elif choice != 'y':
	          choice='n'
	      if choice == 'y':
                    try:
			# Save the page
                        page.put(keimeno)
                    except wikipedia.EditConflict:
                        wikipedia.output(u'Skipping %s because of edit conflict' % (page.title()))
                    except wikipedia.SpamfilterError, error:
                        wikipedia.output(u'Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))

	return 0

def main():
    gen = None
    pageTitle = []
    for arg in wikipedia.handleArgs():
        if arg:
            if arg.startswith('-start:'):
                gen = pagegenerators.AllpagesPageGenerator(arg[7:])
            elif arg.startswith('-ref:'):
                referredPage = wikipedia.Page(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.ReferringPageGenerator(referredPage)
            elif arg.startswith('-links:'):
                linkingPage = wikipedia.Page(wikipedia.getSite(), arg[7:])
                gen = pagegenerators.LinkedPageGenerator(linkingPage)
            elif arg.startswith('-file:'):
                gen = pagegenerators.TextfilePageGenerator(arg[6:])
            elif arg.startswith('-cat:'):
                cat = catlib.Category(wikipedia.getSite(), arg[5:])
                gen = pagegenerators.CategorizedPageGenerator(cat)
            else:
                pageTitle.append(arg)

    if pageTitle:
        page = wikipedia.Page(wikipedia.getSite(), ' '.join(pageTitle))
        gen = iter([page])
    if not gen:
        wikipedia.showHelp('touch')
    else:
        preloadingGen = pagegenerators.PreloadingGenerator(gen)
        bot = kleidabot(preloadingGen)
        bot.run()


if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()