Χρήστης: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]
# Ακολουθεί ο υπόλοιπος κώδικας