Κλιτές μορφές επιθέτων

επεξεργασία

Βλέπε Χρήστης:Flubot/pagefromfile/επίθετα

Κλιτές μορφές ουσιαστικών

επεξεργασία

Εδώ περιγράφω έναν τρόπο για να δημιουργηθεί ένα αρχείο κειμένου με νέες σελίδες που μπορούν να δημιουργηθούν από bot.

Χρειάζομαι:

  1. Ένα απλό αρχείο κειμένου με κλιτές μορφές
  2. Ένα εργαλείο που θα διαβάσει το προηγούμενο αρχείο και θα το μετατρέψει
  3. το 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]
    
# Ακολουθεί ο υπόλοιπος κώδικας