Χρήστης:ArielGlenn/κλείδα ταξινόμησης
Εμφάνιση
(Ανακατεύθυνση από Χρήστης: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