Χρήστης:Flubot/Κλείδα ταξινόμησης
Κώδικας που δεν χρησιμοποιείται πια
επεξεργασίαΓαλλική γλώσσα
επεξεργασίαΑκολουθεί κώδικας που θα προσθέτει την κλείδα ταξινόμησης σε γαλλικές μόνο λέξεις. Η κλείδα θα προστίθεται
- μετά την παράμετρο γλώσσας στο πρότυπο που δηλώνει το μέρος του λόγου
- σε κείμενο του τύπου [[Κατηγορία:xxxxxxxx γαλλικά]] ή [[Κατηγορία:xxxxxxxx (γαλλικά)]]
- σε ετυμολογίες, π.χ {{ετυμ xx|FR}}
εντολή: python taxin-fr.py -file:kle-list
- ή : python taxin-fr.py -cat:"Γαλλική γλώσσα"
taxin-fr.py
επεξεργασία#!/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()
Γερμανική γλώσσα
επεξεργασίαΑκολουθεί κώδικας που θα προσθέτει την κλείδα ταξινόμησης σε γερμανικές μόνο λέξεις. Η κλείδα θα προστίθεται
- μετά την παράμετρο γλώσσας στο πρότυπο που δηλώνει το μέρος του λόγου
- σε κείμενο του τύπου [[Κατηγορία:xxxxxxxx γερμανικά]] ή [[Κατηγορία:xxxxxxxx (γερμανικά)]]
- σε ετυμολογίες, π.χ {{ετυμ 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()
Πορτογαλική γλώσσα
επεξεργασίαΑκολουθεί κώδικας που θα προσθέτει την κλείδα ταξινόμησης σε πορτογαλικές μόνο λέξεις. Η κλείδα θα προστίθεται
- μετά την παράμετρο γλώσσας στο πρότυπο που δηλώνει το μέρος του λόγου
- σε κείμενο του τύπου [[Κατηγορία:xxxxxxxx πορτογαλικά]] ή [[Κατηγορία:xxxxxxxx (πορτογαλικά)]]
- σε ετυμολογίες, π.χ {{ετυμ 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
taxin-ro.py
επεξεργασία#!/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()