Χρήστης:Flubot/Κλείδα ταξινόμησης/Αζεριανή γλώσσα
Για τα διάφορα αλφάβητα που χρησιμοποιήθηκαν στο Αζερμπαϊτζάν βλέπε Παράρτημα:Αζεριανά αλφάβητα. Το bot προς το παρόν βάζει κλείδα ταξινόμησης για τις λέξεις που είναι γραμμένες με το λατινικό αλφάβητο, το οποίο έχει την ιδιαιτερότητα να ταξινομεί το x μετά το h. To "schwa" ταξινομείται μετά το e, αν και παλιότερα το είχαν στη δεύτερη θέση, μετά το a. Στις λέξεις που είναι γραμμένες σε κυριλλικό αλφάβητο βάζουμε προς το παρόν την ίδια κλείδα με αυτήν που βάζουμε στις γραμμένες με λατινικό αλφάβητο. Έτσι οι δύο παραλλαγές της λέξης (σε λατινικά και κυριλλικά εμφανίζονται στην Κατηγορία:Αζεριανή γλώσσα η μια κάτω από την άλλη. Για το αραβικό αλφάβητο δεν έχουμε κάνει ακόμα τίποτα.
Κώδικας για την κλείδα ταξινόμησης (λατινικά)
επεξεργασία#!/usr/bin/python # -*- coding: utf-8 -*- import wikipedia import sys, re, codecs spaces_tag = re.compile('([ \*\.\'\-\(\)]*)') apost_tag = re.compile(u'\’') page_tag = re.compile('(.*)') pos_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az(\|*)\}\}') pos1_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|(?P<kleidi>[^\|\}]*)\}\}') pos2_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|αριθ\=(?P<arith>[1-9]*)(\|*)\}\}') pos3_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|αριθ\=(?P<arith>[1-9]*)\|(?P<kleidi>[^\}\|]*)\}\}') pos4_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|(?P<kleidi>[^\}\|]*)\|αριθ=(?P<arith>[1-9]*)\}\}') etym_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|AZ\}\}') categ_tag = re.compile(u'\[\[Κατηγορία:(.*)αζεριανά(\)*)\]\](.*)') set_string = re.compile('set') debug_bul = True # πίνακες αντιστοίχισης mtg_apo = u'Ə ə Ç ç Ğ ğ X x I ı İ Ö ö Ş ş Ü ü â Â î Î û Û' mtg_se = u'eα eα cα cα gα gα hα hα hι hι i oα oα sα sα uα uα a a i i u 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)) wikipedia.setAction(u'Εισαγωγή κλείδας ταξινόμησης') # Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές fin = codecs.open('list-az', 'r', 'utf-8') eof=0 while not eof: line = fin.readline() #line = unicode(line, 'utf-8') if line == "": eof = 1 else: t1 = page_tag.search(line) # t = t1.group(1) #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας print(t) T0=t[0:1] t9=t[1:len(t)+1] kleida = t9.translate(trtable) if T0 == 'I': T0 = u'ı' elif T0 == u'İ': T0 = 'i' kleida = T0 + kleida kleida = kleida.lower() kleida = spaces_tag.sub('', kleida) kleida = apost_tag.sub('',kleida) if kleida==t: kleida="" else: kleida = "|"+kleida page = wikipedia.Page(wikipedia.getSite(), t) arxiko = page.get(get_redirect=True) # Αντικαταστάσεις p2 = pos2_tag.sub(u'{{\g<pos>|az'+kleida+u'|αριθ=\g<arith>}}',arxiko) p2 = pos3_tag.sub(u'{{\g<pos>|az'+kleida+u'|αριθ=\g<arith>}}',p2) p2 = pos_tag.sub(r'{{\g<pos>|az'+kleida+'}}',p2) p2 = pos1_tag.sub(r'{{\g<pos>|az'+kleida+'}}',p2) p2 = pos4_tag.sub(u'{{\g<pos>|az'+kleida+u'|αριθ=\g<arith>}}',p2) p2 = etym_tag.sub(u'{{ετυμ \g<1>|AZ'+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)) fin.close()
Κώδικας για την κλείδα ταξινόμησης (κυριλλικά)
επεξεργασία#!/usr/bin/python # -*- coding: utf-8 -*- import wikipedia import sys, re, codecs #reload(sys) #sys.setdefaultencoding('utf-8') # İ â Â î Î û Û Ç ç Ğ ğ Ö ö Ş ş Ü ü I ı spaces_tag = re.compile('([ \*\.\'\-\(\)]*)') apost_tag = re.compile(u'\’') page_tag = re.compile('(.*)') pos_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az(\|*)\}\}') pos1_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|(?P<kleidi>[^\|\}]*)\}\}') pos2_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|αριθ\=(?P<arith>[1-9]*)(\|*)\}\}') pos3_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|αριθ\=(?P<arith>[1-9]*)\|(?P<kleidi>[^\}\|]*)\}\}') pos4_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|az\|(?P<kleidi>[^\}\|]*)\|αριθ=(?P<arith>[1-9]*)\}\}') etym_tag = re.compile(u'\{\{ετυμ ([a-z]+)\|AZ\}\}') categ_tag = re.compile(u'\[\[Κατηγορία:(.*)αζεριανά(\)*)\]\](.*)') set_string = re.compile('set') debug_bul = True # πίνακες αντιστοίχισης mtg_apo1 = u'А а Б б В в Г г Ғ ғ Д д Е е Ә ә Ж ж З з И и Ы ы Ј ј К к Ҝ ҝ Л л М м Н н О о Ө ө П п Р р С с Т т У у Ү ү Ф ф Х х Һ һ Ч ч Ҹ ҹ Ш ш' mtg_se1 = u'a a b b v v q q ğ ğ d d e e ə ə j j z z i i ı ı y y k k g g l l m m n n o o ö ö p p r r s s t t u u ü ü f f x x h h ç ç c c ş ş' trkeys1 = mtg_apo1.split(u' ') for i in range(len(trkeys1)): trkeys1[i] = ord(trkeys1[i]) trvals1 = mtg_se1.split(u' ') trtable1 = dict(zip(trkeys1,trvals1)) # πίνακες αντιστοίχισης mtg_apo = u'Ə ə Ç ç Ğ ğ X x I ı İ Ö ö Ş ş Ü ü â Â î Î û Û' mtg_se = u'eα eα cα cα gα gα hα hα hι hι i oα oα sα sα uα uα a a i i u 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)) wikipedia.setAction(u'Εισαγωγή κλείδας ταξινόμησης') # Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές fin = codecs.open('list-az', 'r', 'utf-8') eof=0 while not eof: line = fin.readline() #line = unicode(line, 'utf-8') if line == "": eof = 1 else: t1 = page_tag.search(line) # tcyr = t1.group(1) #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας print(tcyr) t = tcyr.translate(trtable1) print(t) T0=t[0:1] t9=t[1:len(t)+1] kleida = t9.translate(trtable) if T0 == 'I': T0 = u'ı' elif T0 == u'İ': T0 = 'i' kleida = T0 + kleida kleida = kleida.lower() kleida = spaces_tag.sub('', kleida) kleida = apost_tag.sub('',kleida) if kleida==tcyr: kleida="" else: kleida = "|"+kleida print(kleida) page = wikipedia.Page(wikipedia.getSite(), tcyr) arxiko = page.get(get_redirect=True) # Αντικαταστάσεις p2 = pos2_tag.sub(u'{{\g<pos>|az'+kleida+u'|αριθ=\g<arith>}}',arxiko) p2 = pos3_tag.sub(u'{{\g<pos>|az'+kleida+u'|αριθ=\g<arith>}}',p2) p2 = pos_tag.sub(r'{{\g<pos>|az'+kleida+'}}',p2) p2 = pos1_tag.sub(r'{{\g<pos>|az'+kleida+'}}',p2) p2 = pos4_tag.sub(u'{{\g<pos>|az'+kleida+u'|αριθ=\g<arith>}}',p2) p2 = etym_tag.sub(u'{{ετυμ \g<1>|AZ'+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)) fin.close()