Χρήστης:ArielGlenn/κλείδα ταξινόμησης
το μποτ
επεξεργασίαο κώδικας:
# -*- coding: utf-8 -*- u""" Αυτό το script μεταφέρει όλους τους πολυγλωσσικούς συνδέσμους στο κάτω μέρος της σελίδας, όλες τις κατηγορίες στο κάτω μέρος πριν από τους πολυγλωσσικούς, και προσθέτει το πρότυπο {{κλείδα ταξινόμησης}} μόλις πριν από τις κατηγορίες. Το πρότυπο καλείται με την κατάλληλη παράμετρο για την γλώσσα (fr, en, κλπ), ανάλογα με το πρότυπο γλώσσας στην αρχή της σελίδας ({{=nn=}}). (Ψέματα!) Υποστηρίζονται οι εξής παράμετροι: ¶ms; Much of this code was stolen from cosmetic_changes.py. """ __version__ = '$Id: default_kleidaTaksinomhshs.py 4260 2007-09-12 22:12:11Z wikipedian $' import wikipedia, pagegenerators, string import sys import re warning = u"""Προσοχή! Αν σκοπεύετε να εκτελέσετε αυτό το μποτ κάπου αλλού εκτός από το el.wiktionary, ξανασκεφτείτε το!""" docuReplacements = { '¶ms;': pagegenerators.parameterHelp, '&warning;': warning, } # Summary message when using this module as a stand-alone script msg_standalone = { 'el': u'Bot: εισαγωγή κλείδας ταξινόμησης', } class EpiloghKleidaTaksinomhshsToolkit: def __init__(self, site, title, exceptions = [], debug = False): self.site = site self.debug = debug self.title = title self.exceptions = exceptions def allagh(self, keimeno): """ Given a wiki source code text, returns the cleaned up version. FIXME σύνοψη εδώ """ palioKeimeno = keimeno protypo = u'{{κλείδα ταξινόμησης}}' # αφαιρούμε την επόμενη κενή γραμμή μαζί με το πρότυπο αν υπάρχει protyporegexp = u'\{\{κλείδα ταξινόμησης\|[^\}]*\}\}(\r\n\r\n|$)' keimeno = self.removeKleidaTaksinomhshsProtypo(keimeno,protyporegexp) protyporegexp1 = u'\{\{κλείδα ταξινόμησης\|[^\}]*\}\}\r\n' keimeno = self.removeKleidaTaksinomhshsProtypo(keimeno,protyporegexp1) keimeno = self.addKleidaTaksinomhshsProtypo(keimeno,protypo) if self.debug: wikipedia.showDiff(palioKeimeno, keimeno) return keimeno def paragwghKleidaTaksinomhshsProtypo(self): u""" παραγωγή της παραμέτρου για το πρότυπο κλείδα ταξινόμησης γυρίζει το πρότυπο (με τις παραμέτρους) ακριβώς όπως θα έμπαινε σε wikitext """ # αυτό εξαρτάται από το locale;;; parametros = self.title().lower() # print parametros # εξαφάνιση των διακριτικών σημείων # νεοελληνικά #ά έ ή ί ϊ ΐ ό ύ ϋ ΰ ώ ς #α ε η ι ι ι ο υ υ υ ω σ # αρχαία ελληνικά #ά έ ή ί ό ύ ώ ᾴ ῄ ῴ ὰ ὲ ὴ ὶ ὸ ὺ ὼ ᾲ ῂ ῲ ᾶ ῆ ῖ ῦ ῶ ᾷ ῇ ῷ ῗ ῧ ῒ ῢ ΐ ΰ ᾳ ῃ ῳ ἀ ἐ ἠ ἰ ὀ ὐ ὠ ᾀ ᾐ ᾠ ἄ ἔ ἤ ἴ ὄ ὔ ὤ ᾄ ᾔ ᾤ #ἂ ἒ ἢ ἲ ὂ ὒ ὢ ᾂ ᾒ ᾢ ἆ ἦ ἶ ὖ ὦ ᾆ ᾖ ᾦ ἁ ἑ ἡ ἱ ὁ ὑ ὡ ἅ ἕ ἥ ἵ ὅ ὕ ὥ ᾅ ᾕ ᾥ ἃ ἓ ἣ ἳ ὃ ὓ ὣ ᾃ ᾓ ᾣ ἇ ἧ ἷ ὗ ὧ ᾇ ᾗ ᾧ ᾰ ῐ ῠ ᾱ ῑ ῡ ῥ # γαλλικά #à â ç é è ê ë î ï ô œ ù û ü # γερμανικά #ä ö ß ſ ü # δανικά #á é ó æ ø å # βοσνιακά #č ć đ š ž # αφρικάανς #ä ê ë é î ï ô ö û ü # βένδα #ḓ ḽ ṋ ṅ ṱ # βιετναμικά #à ả á ạ ã ă ằ ẳ ẵ ắ ặ â ầ ẩ ẫ ấ ậ đ è ẻ ẽ é ẹ ê ề ể ễ ế ệ ỉ ĩ í ị ì ỏ ó ọ ò õ ô ồ ổ ỗ ố ộ ơ ờ ở ỡ ớ ợ ù ủ ũ ú ụ ư ừ ử ữ ứ ự ỳ ỷ ỹ ỵ ý # βολαπούκ #ä ö ü # εσθονικά #č š ž õ ä ö ü # εσπεράντο #ĉ ĝ ĥ ĵ ŝ ŭ # ισλανδικά #á ð é í ó ú ý þ æ ö # ισπανικά #á é í ñ ó ú ü # ιταλικά #á à é è í ì ó ò ú ù # καταλανικά #á à ç é è ë í ï ó ò ö ú ù • # κινέζικα #á à ǎ ā é è ě ē í ì ǐ ī ó ò ǒ ō ú ù ü ǔ ū ǘ ǜ ǚ ǖ # κουρδικά #ç ê ğ ḧ ı î ş û ẍ # κροατικά #č ć đ š ž # λευκορωσικά #ć č ł ń ś š ŭ ź ž # μαλτέζικα #ċ ġ ħ ż # μολδαβικά #ă â î ş ţ # νορβηγικά #á é ó æ ø å # ουαλλέζικα #á à â ä é è ê ë ì î ï ó ò ô ö ù û ẁ ŵ ẅ ý ỳ ŷ ÿ # πολωνικά #ą ć ę ł ń ó ś ź ż # πορτογαλικά #á à â ã ç é ê í ó ô õ ú ü # ρουμανικά #ă â î ş ţ # σλοβακικά #á ä č ď é í ĺ ľ ň ó ô ŕ š ť ú ý ž # σότο #ê ô š # σουηδικά #é å ä ö # τουρκικά #â ç ğ ı i î ş # τσεχικά #á č ď é ě í ň ó ř š ť ú ů ý ž # τσουάνα #ê ô š # χαβανέζικα #ā ē ī ō ū mtg_apo = u'à â ç é è ê ë î ï ô œ ù û ü' + u' ä ö ß ſ ü' + u' á é ó æ ø å' + u' č ć đ š ž' mtg_se = u'a a c e e e e i i o oe u u u' + u' a o ss ? u' + u' a e o ae o a' + u' c c d s z' mtg_apo = mtg_apo + u' ä ê ë é î ï ô ö û ü' + u' ḓ ḽ ṋ ṅ ṱ' mtg_se = mtg_se + u' a e e e i i o o u u' + u' d l n n t' mtg_apo = mtg_apo + u' à ả á ạ ã ă ằ ẳ ẵ ắ ặ â ầ ẩ ẫ ấ ậ đ è ẻ ẽ é ẹ ê ề ể ễ ế ệ ỉ ĩ í ị ì' mtg_se = mtg_se + u' a a a a a a a a a a a a a a a a a d e e e e e e e e e e e i i i i i' mtg_apo = mtg_apo + u' ỏ ó ọ ò õ ô ồ ổ ỗ ố ộ ơ ờ ở ỡ ớ ợ ù ủ ũ ú ụ ư ừ ử ữ ứ ự ỳ ỷ ỹ ỵ ý' mtg_se = mtg_se + u' o o o o o o o o o o o o o o o o o u u u u u u u u u u u y y y y y' mtg_apo = mtg_apo + u' ä ö ü' + u' č š ž õ ä ö ü' + u' ĉ ĝ ĥ ĵ ŝ ŭ' + u' á ð é í ó ú ý þ æ ö' mtg_se = mtg_se + u' a o u' + u' c s z o a o u' + u' c g h j s u' + u' a ? e i o u y ? ae o' mtg_apo = mtg_apo + u' á é í ñ ó ú ü' + u' á à é è í ì ó ò ú ù' + u' á à ç é è ë í ï ó ò ö ú ù' mtg_se = mtg_se + u' a e i n o u u' + u' a a e e i i o o u u' + u' a a c e e e i i o o o u u' mtg_apo = mtg_apo + u' á à ǎ ā é è ě ē í ì ǐ ī ó ò ǒ ō ú ù ü ǔ ū ǘ ǜ ǚ ǖ' + u' ç ê ğ ḧ ı î ş û ẍ' mtg_se = mtg_se + u' a a a a e e e e i i i i o o o o u u u u u u u u u' + u' c e g h i i s u x' mtg_apo = mtg_apo + u' č ć đ š ž' + u' ć č ł ń ś š ŭ ź ž' + u' ċ ġ ħ ż' + u' ă â î ş ţ' + u' á é ó æ ø å' mtg_se = mtg_se + u' c c d s z' + u' c c ? n s s u z z' + u' c g h z' + u' a a i s t' + u' a e o ae o a' mtg_apo = mtg_apo + u' á à â ä é è ê ë ì î ï ó ò ô ö ù û ẁ ŵ ẅ ý ỳ ŷ ÿ' + u' ą ć ę ł ń ó ś ź ż' mtg_se = mtg_se + u' a a a a e e e e i i i o o o o u u w w w y y y y' + u' a c e ? n o s z z' mtg_apo = mtg_apo + u' á à â ã ç é ê í ó ô õ ú ü' + u' ă â î ş ţ' + u' á ä č ď é í ĺ ľ ň ó ô ŕ š ť ú ý ž' mtg_se = mtg_se + u' a a a a c e e i o o o u u' + u' a a i s t' + u' a a c d e i l l n o o r s t u y z' mtg_apo = mtg_apo + u' ê ô š' + u' é å ä ö' + u' â ç ğ ı i î ş' + u' á č ď é ě í ň ó ř š ť ú ů ý ž' mtg_se = mtg_se + u' e o s' + u' e a a o' + u' a c g i i i s' + u' a c d e e i n o r s t u u y z' mtg_apo = mtg_apo + u' ê ô š' + u' ā ē ī ō ū' + u' ά έ ή ί ϊ ΐ ό ύ ϋ ΰ ώ ς' mtg_se = mtg_se + u' e o s' + u' a e i o u' + u' α ε η ι ι ι ο υ υ υ ω σ' mtg_apo = mtg_apo + u' ά έ ή ί ό ύ ώ ᾴ ῄ ῴ ὰ ὲ ὴ ὶ ὸ ὺ ὼ ᾲ ῂ ῲ ᾶ ῆ ῖ ῦ ῶ ᾷ ῇ ῷ ῗ ῧ ῒ ῢ ΐ ΰ ᾳ ῃ ῳ ἀ ἐ ἠ' mtg_se = mtg_se + u' α ε η ι ο υ ω α η ω α ε η ι ο υ ω α η ω α η ι υ ω α η ω ι υ ι υ ι υ α η ω α ε η' mtg_apo = mtg_apo + u' ἰ ὀ ὐ ὠ ᾀ ᾐ ᾠ ἄ ἔ ἤ ἴ ὄ ὔ ὤ ᾄ ᾔ ᾤ ἂ ἒ ἢ ἲ ὂ ὒ ὢ ᾂ ᾒ ᾢ ἆ ἦ ἶ ὖ ὦ ᾆ ᾖ ᾦ ἁ ἑ ἡ ἱ ὁ' mtg_se = mtg_se + u' ι ο υ ω α η ω α ε η ι ο υ ω α η ω α ε η ι ο υ ω α η ω α η ι υ ω α η ω α ε η ι ο' mtg_apo = mtg_apo + u' ὑ ὡ ἅ ἕ ἥ ἵ ὅ ὕ ὥ ᾅ ᾕ ᾥ ἃ ἓ ἣ ἳ ὃ ὓ ὣ ᾃ ᾓ ᾣ ἇ ἧ ἷ ὗ ὧ ᾇ ᾗ ᾧ ᾰ ῐ ῠ ᾱ ῑ ῡ ῥ' mtg_se = mtg_se + u' υ ω α ε η ι ο υ ω α η ω α ε η ι ο υ ω α η ω α η ι υ ω α η ω α ι υ α ι υ ρ' 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)) # TODO: # σημεία στίξης; # όπου έβαλα ερωτηματικό πάνω # άλλες γλώσσες # αν διαφορετικές γλώσσες έχουν διαφορετική αλφαβητική σειρά, τι θα κάνουμε; # τα λήμματα που αρχίζουν με κεφαλαία γράμματα θα πάνε σε ξεχωριστή θέση ή όχι; parametros = parametros.translate(trtable) # για ελληνικές λέξεις *μόνο* parametros = re.sub(u'[^αβγδεζηθικλμνξοπρστυφχψω]', u'', parametros) protypo = u'{{κλείδα ταξινόμησης|' + parametros + '}}' return protypo def removeKleidaTaksinomhshsProtypo(self,keimeno,protypo): u""" remove old template if it is there """ teliko_keimeno = re.sub(protypo,u'',keimeno) return teliko_keimeno def addKleidaTaksinomhshsProtypo(self,keimeno,protypo): u""" stuff provided protypo into the wikitext right before categories and interwiki links. """ # βρίσκουμε σημάδι που δεν περιέχεται ήδη στο κείμενο marker = '@@' while marker in keimeno: marker += '@' site = self.site protypo = self.paragwghKleidaTaksinomhshsProtypo() kathgories = wikipedia.getCategoryLinks(keimeno, site = site) xwris_kathgories = wikipedia.removeCategoryLinks(keimeno, site = site, marker = '') interwiki = wikipedia.getLanguageLinks(xwris_kathgories, insite = site) textnocatsnoiws = wikipedia.removeLanguageLinks(xwris_kathgories.replace(marker,'').strip(), site = self.site) + site.family.category_text_separator + protypo + site.family.category_text_separator # βάζουμε τώρα τις κατηγορίες, τους συνδέσμους me_kathgories = wikipedia.replaceCategoryLinks(textnocatsnoiws, kathgories, site = self.site) teliko_keimeno = wikipedia.replaceLanguageLinks(me_kathgories, interwiki, site = self.site) return teliko_keimeno class EpiloghKleidaTaksinomhshsBot: def __init__(self, generator, exceptions=[], acceptall = False): self.generator = generator self.acceptall = acceptall self.exceptions = exceptions # Load default summary message. wikipedia.setAction(wikipedia.translate(wikipedia.getSite(), msg_standalone)) def checkExceptions(self, original_text): """ If one of the exceptions applies for the given text, returns the substring which matches the exception. Otherwise it returns None. """ for exception in self.exceptions: hit = exception.search(original_text) if hit: return hit.group(0) return None def treat(self, page): try: # 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()) ccToolkit = EpiloghKleidaTaksinomhshsToolkit(page.site(), page.title, debug = True) keimeno = page.get() match = self.checkExceptions(keimeno) # skip all pages that contain certain texts if match: wikipedia.output(u'Skipping %s because it contains %s' % (page.aslink(), match)) else: allages = ccToolkit.allagh(keimeno) if allages != keimeno: if not self.acceptall: choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N') if choice in ['a', 'A']: self.acceptall = True if self.acceptall or choice in ['y', 'Y']: page.put(allages) else: wikipedia.output(u"Καμία αλλαγή δεν χρειάστηκε στο %s" % page.title()) except wikipedia.NoPage: wikipedia.output(u"Η σελίδα %s δεν υπάρχει;!" % page.aslink()) except wikipedia.IsRedirectPage: wikipedia.output("Η σελίδα %s είναι ανακατεύθυνση, skipping." % page.aslink()) except wikipedia.LockedPage: wikipedia.output(u"Η σελίδα %s είναι κλειδωμένη;!" % page.aslink()) def run(self): for page in self.generator: self.treat(page) original_text = page.get() def main(): #page generator gen = None PageTitles = [] exceptions=[] namespaces = [] regex = False caseInsensitive = 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() for arg in wikipedia.handleArgs(): if arg.startswith('-except:'): exceptions.append(arg[8:]) elif arg == '-regex': regex = True elif arg == '-nocase': caseInsensitive = True elif arg.startswith('-namespace:'): try: namespaces.append(int(arg[11:])) except ValueError: namespaces.append(arg[11:]) 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:]) else: generator = genFactory.handleArg(arg) if generator: gen = generator else: wikipedia.showHelp() for i in range(len(exceptions)): exception = exceptions[i] if not regex: exception = re.escape(exception) if caseInsensitive: exceptionR = re.compile(exception, re.UNICODE | re.IGNORECASE) else: exceptionR = re.compile(exception, re.UNICODE) exceptions[i] = exceptionR if PageTitles: pages = [wikipedia.Page(wikipedia.getSite(), PageTitle) for PageTitle in PageTitles] gen = iter(pages) if not gen: wikipedia.showHelp() elif wikipedia.inputChoice(warning + u'\nΘέλετε σίγουρα να συνεχίσετε;', ['yes', 'no'], ['y', 'N'], 'N') == 'y': if namespaces != []: gen = pagegenerators.NamespaceFilterPageGenerator(gen, namespaces) preloadingGen = pagegenerators.PreloadingGenerator(gen) bot = EpiloghKleidaTaksinomhshsBot(preloadingGen, exceptions) bot.run() if __name__ == "__main__": try: main() finally: wikipedia.stopme()
τα πρότυπα
επεξεργασίαΚατευθείαν από το γαλλικό ΒΛ: {{κλείδα ταξινόμησης}}
, {{κλείδα ταξινόμησης/el}}
, {{κλείδα ταξινόμησης/παραγωγή}}
Τα γαλλικά: clé de tri, clé de tri/fr, clé de tri/composée