Χρήστης:Flubot/pagefromfile
Κλιτές μορφές επιθέτων
επεξεργασίαΚλιτές μορφές ουσιαστικών
επεξεργασίαΕδώ περιγράφω έναν τρόπο για να δημιουργηθεί ένα αρχείο κειμένου με νέες σελίδες που μπορούν να δημιουργηθούν από bot.
Χρειάζομαι:
- Ένα απλό αρχείο κειμένου με κλιτές μορφές
- Ένα εργαλείο που θα διαβάσει το προηγούμενο αρχείο και θα το μετατρέψει
- το pywikipedia και συγκεκριμένα το pagefromfile.py
Οι εντολές:
- cat source.txt | pagegenerator.py > final.txt
- python pagefromfile.py -start:xxxx -end:yyyy -file:final.txt -notitle
Ένα απλό αρχείο κειμένου με κλιτές μορφές (source.txt)
επεξεργασίατ<εργαλείο> γ<ο> γε>εργαλείου< γπ>εργαλείων< οακπ>εργαλεία< τ<βλακεία> γ<θ> οακπ>βλακείες< γε>βλακείας<
pagegenerator.py
επεξεργασία#!/usr/bin/python # -*- coding: utf-8 -*- #import wikipedia import sys, re reload(sys) sys.setdefaultencoding('utf8') fin = sys.stdin ch_apo = u'ς ά ό ί ή έ ώ ύ ϊ ϋ ΐ ΰ' ch_se = u'σ α ο ι η ε ω υ ι υ ι υ' trapo = ch_apo.split(u' ') trse = ch_se.split(u' ') # φτιάχνω ένα απλό αρχείο κειμένου και μετατρέπεται σε wiki-κείμενο title_ = re.compile('τ<(.*)>') # ονομαστική ενικού του ουσιαστικού, κύριο λήμμα genos_ = re.compile('γ<(.*)>') # γένος ge = re.compile('^γε>(.*)<$') # γενική ενικού ae = re.compile('^αε\>(.*)\<$') # αιτιατική ενικού ke = re.compile('^κε\>(.*)\<$') # κλητική ενικού okp = re.compile('^οκπ\>(.*)\<$') oakp = re.compile('^οακπ\>(.*)\<$') gake = re.compile('^γακε\>(.*)\<$') gp = re.compile('^γπ\>(.*)\<$') ap = re.compile('^απ\>(.*)\<$') nameh="" eof=0 def kle(trnsl): kleida = trnsl for i in range(len(trapo)): kleida = kleida.replace(trapo[i], trse[i]) return kleida def part1(nameh): print "xxxx" print "'''%s'''" % (nameh) print u"=={{-el-}}==\n\n==={{μορφή ουσιαστικού|el}}===\n'''{{PAGENAME}}''' {{%s}}" % (genos) return 1 def part3(nameh): print print u"{{κλείδα ταξινόμησης|%s}}\nyyyy" % (kle(nameh)) while not eof: line = fin.readline() if line == "": eof = 1 elif title_.search(line): result = title_.search(line) if result: namer=result.group(1) elif genos_.search(line): result = genos_.search(line) if result: genos=result.group(1) elif ge.search(line): result = ge.search(line) if result: part1(result.group(1)) print "# {{πτώσηΓεν|%s}}" % (namer) part3(result.group(1)) elif gp.search(line): result = gp.search(line) if result: part1(result.group(1)) print "# {{πτώσηΓπλ|%s}}" % (namer) part3(result.group(1)) elif ae.search(line): result = ae.search(line) if result: part1(result.group(1)) print "# {{πτώσηΑεν|%s}}" % (namer) part3(result.group(1)) elif ke.search(line): result = ke.search(line) if result: part1(result.group(1)) print "# {{πτώσηΚεν|%s}}" % (namer) part3(result.group(1)) elif okp.search(line): result = okp.search(line) if result: part1(result.group(1)) print "# {{πτώσειςΟΚπλ|%s}}" % (namer) part3(result.group(1)) elif gake.search(line): result = gake.search(line) if result: part1(result.group(1)) print "# {{πτώσειςΓΑΚεν|%s}}" % (namer) part3(result.group(1)) elif oakp.search(line): result = oakp.search(line) if result: part1(result.group(1)) print "# {{πτώσειςΟΑΚπλ|%s}}" % (namer) part3(result.group(1)) elif ap.search(line): result = ap.search(line) if result: part1(result.group(1)) print "# {{πτώσηΑπλ|%s}}" % (namer) part3(result.group(1)) fin.close()
Κώδικας για να ανεβάσουμε τον τόνο στην προηγούμενη συλλαβή
επεξεργασίαΔουλεύοντας πάνω σε τύπους όπως η λέξη κυβερνήσεις, η οποία είναι ταυτόχρονα υποτακτική ρήματος (εδώ του κυβερνώ) και πληθυντικός ουσιαστικού, χρειάστηκε να έχω κώδικα για να σχηματίσω την ονομαστική ενικού όπου ο τόνος βρίσκεται στην προηγούμενη συλλαβή.
Για να πάρουμε την ονομαστική «κυβέρνηση» από τον πληθυντικό «κυβερνήσεις», αφαιρούμε την κατάληξη -εις και καλούμε τη συνάρτηση με μια εντολή του τύπου print "%sη" (Tonos(u"κυβερνήσ")".
#!/usr/bin/python # -*- coding: utf-8 -*- import sys, re, codecs reload(sys) sys.setdefaultencoding('utf-8') kl_atona = u"α ι ο ε η υ ω ϊ ϋ" kl_tonismena= u"ά ί ό έ ή ύ ώ ΐ ΰ" atona = kl_atona.split(u' ') tonismena = kl_tonismena.split(u' ') tonoumena = {} for i in range(len(tonismena)): tonoumena[tonismena[i]]=1 mitonoumena = {} for i in range(len(atona)): mitonoumena[atona[i]]=1 def seatono(sort): for i in range(len(tonismena)): sort = sort.replace(tonismena[i], atona[i]) return sort def setonismeno(sort): for i in range(len(atona)): sort = sort.replace(atona[i], tonismena[i]) return sort def Tonos(lexi): lexi = lexi[::-1] foundaccent = False foundatono = False i=0 while not foundaccent: if lexi[i] in tonoumena: foundaccent=True if (lexi[i] == u"ί") or (lexi[i] == u"ύ"): if (lexi[i+1] == u"ε") or (lexi[i+1] == u"α") or (lexi[i+1] == u"ο"): lexi1 = lexi[:(i+2)] lexi2 = lexi[(i+2):] else : lexi1= lexi[:(i+1)] lexi2 = lexi[(i+1):] else: lexi1= lexi[:(i+1)] lexi2 = lexi[(i+1):] i = i+1 lexi1 = seatono(lexi1) i=0 while (not foundatono) and (i < len(lexi2)): if lexi2[i] in mitonoumena: foundatono=True i = i+1 if not foundatono: return lexi[::-1] i=0 foundatono = False while not foundatono: if lexi2[i] in mitonoumena: foundatono=True lexi3 = lexi2[(i+1):] lexi_m = setonismeno(lexi2[:(i+1)]) i = i+1 lexi4= lexi1 + lexi_m +lexi3 return lexi4[::-1] # Ακολουθεί ο υπόλοιπος κώδικας