Χρήστης:Flubot/pagefromfile/ρηματικοί τύποι/αόριστος

Για την υποτακτική του αορίστου βλέπε Χρήστης:Flubot/pagefromfile/ρηματικοί τύποι

Οριστική αορίστου επεξεργασία

Πρώτο βήμα επεξεργασία

Ξεκινάμε με το ίδιο αρχείο κειμένου που χρησιμοποιήσαμε για την υποτακτική και το οποίο περιέχει τον ενεστώτα του ρήματος και το απαρέμφατο αορίστου. Κάτι σαν κι αυτό (το ονομάζω πχ list1):

ζεσταίνομαι;ζεσταθεί
ζεσταίνω;ζεστάνει
ζυμώνω;ζυμώσει
ζω;ζήσει

Δεύτερο βήμα επεξεργασία

Στη συνέχεια το δίνουμε στο παρακάτω πρόγραμμα με τίτλο make-aor.py και με την εντολή ...

> cat list1 | ./make-aor.py > list2

... και παίρνουμε ένα νέο αρχείο list2 με το εξής περιεχόμενο:

ζεσταίνομαι;ζεσταθεί;ζεστάθηκα
ζεσταίνω;ζεστάνει;ζέστανα
ζυμώνω;ζυμώσει;ζύμωσα
ζω;ζήσει;έζησα

Προσοχή:: Πρέπει οπωσδήποτε να ελέγξουμε με προσοχή το list2 και να διορθώσουμε με το χέρι τα αναπόφευκτα λάθη. Πχ το πρόγραμμα θα μετατρέψει το απαρέμφατο βρει σε αόριστο βρ*****, το παραμείνει σε παράμεινα και το λογαριάσει σε λογαρίασα, που πρέπει να τα διορθώσουμε σε βρήκα, παρέμεινα και λογάριασα αντιστοίχως.

Τρίτο βήμα επεξεργασία

Δίνουμε το list2 στο πρόγραμμα με τίτλο makelist-aor.py και με την εντολή ...

> cat list1 | ./makelist-aor.py > list3

... και παίρνουμε ένα νέο αρχείο list3 με το εξής περιεχόμενο:

ζεσταίνομαι;ζεστάθηκα;ζεστάθηκες;ζεστάθηκε;-;ζεσταθήκαμε;ζεσταθήκατε;ζεστάθηκαν;-
ζεσταίνω;ζέστανα;ζέστανες;ζέστανε;+;ζεστάναμε;ζεστάνατε;ζέσταναν;-
ζυμώνω;ζύμωσα;ζύμωσες;ζύμωσε;+;ζυμώσαμε;ζυμώσατε;ζύμωσαν;-
ζω;έζησα;έζησες;έζησε;-;ζήσαμε;ζήσατε;έζησαν;ζήσε

Το σημείο "+" μετά το τρίτο ενικό δηλώνει ότι αυτό είναι ταυτόχρονα και β' ενικό προστακτικής, όπως στο ζύμωσε. Το "-" δηλώνει ότι είναι μόνο γ' ενικό οριστικής, όπως το έζησε ή το ζεστάθηκε. Σε αυτή την περίπτωση, η τελευταία λέξη της γραμμής είναι η προστακτική (πχ ζήσε) ή η παύλα.

Προσοχή:: Πρέπει οπωσδήποτε να ελέγξουμε με προσοχή το list3 και να διορθώσουμε με το χέρι τα πιθανά λάθη στα + και -.

Τέταρτο βήμα επεξεργασία

Το τελευταίο βήμα είναι να παραχθεί το αρχείο για το pagefromfile με το πρόγραμμα rt-aor.py:

> cat list3 | ./rt-aor.py > wikitext.txt
> ../pywikipedia/pagefromfile.py -start:xxxx -end:yyyy -notitle -file:wikitext.txt

make-aor.py επεξεργασία

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys, re, codecs
reload(sys)
sys.setdefaultencoding('utf-8')

riza = re.compile(u'(.*)')
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 and (i < len(lexi)):
	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
    if not foundaccent:
       lexi = lexi[::-1] + "****"
       return lexi

    lexi1 = seatono(lexi1)
    
    i=0
    foundatono = False
    while not foundatono and (i < len(lexi2)):
        if lexi2[i] in mitonoumena:
        	foundatono=True
        	lexi3 = lexi2[(i+1):]
        	lexi_m = setonismeno(lexi2[:(i+1)])
        i = i+1

    if not foundatono:
        lexi = lexi1 + lexi2 + u"έ"
    	return lexi[::-1]
    else:
        lexi4= lexi1 + lexi_m +lexi3    
        return lexi4[::-1]

def makeList(ri, l):
  
  l1 = l[:(len(l)-2)]
  l2 = l[(len(l)-2):]
  if l2 == u"ει":
	l0 = Tonos(l1)
	aoristos = l0 + u"α"
  else:
	l0 = Tonos(l)
	aoristos = l0[:(len(l0)-2)] + u"ηκα"
  print "%s;%s;%s" % (ri, l, aoristos)
  return 1


eof = 0
fin = sys.stdin
while not eof:
    grammi = fin.readline()
    if grammi == "":
	eof = 1
    else:
	line0 = riza.search(grammi)
	line = line0.group(1)
	rima = line.split(';')
	enestotas = rima[0] + u""
	apar = rima[1] + u""
	if line != "":
	    makeList(enestotas, apar)
fin.close()

makelist-aor.py επεξεργασία

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys, re
reload(sys)
sys.setdefaultencoding('utf8')

riza = re.compile(u'(.*)')
eof=0

fin = sys.stdin

def makeList(ri, ap, aor):
  
  m1 = ap[:(len(ap)-2)]
  m2 = ap[(len(ap)-2):]

  if m2 == u"ει":
  	l1 = aor[:(len(aor)-1)]
    	s2 = l1 + u"ες"
  	s3 = l1 + u"ε"
  	p1 = m1 + u"αμε"
  	p2 = m1 + u"ατε"
  	p3 = l1 + u"αν"
  	if aor[0] == u"έ":
  	  b = "-"
  	  ps2 = m1 + u"ε"
  	else:
  	  b = "+"
  	  ps2 = "-"
  	print u"%s;%s;%s;%s;%s;%s;%s;%s;%s" % (ri,aor,s2,s3,b,p1,p2,p3,ps2)
  else:
  	l1 = aor[:(len(aor)-3)]
  	s2 = l1 + u"ηκες"
  	s3 = l1 + u"ηκε"
  	p1 = m1 + u"ήκαμε"
  	p2 = m1 + u"ήκατε"
  	p3 = l1 + u"ηκαν"
  	print u"%s;%s;%s;%s;-;%s;%s;%s;-" % (ri,aor,s2,s3,p1,p2,p3)
  return 1

while not eof:
    grammi = fin.readline()
    if grammi == "":
	eof = 1
    else:
	line0 = riza.search(grammi)
	line = line0.group(1)
	rima = line.split(';')
	enestotas = rima[0] + u""
	apar = rima[1] + u""
	aoristos = rima[2] + u""
	if line != "":
	    makeList(enestotas, apar, aoristos)
fin.close()

rt-aor.py επεξεργασία

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys, re
reload(sys)
sys.setdefaultencoding('utf8')

riza = re.compile(u'(.*)')
eof=0

fin = sys.stdin

kl_apo = u'ς ά ό ί ή έ ώ ύ ϊ ϋ ΐ ΰ'
kl_se =  u'σ α ο ι η ε ω υ ι υ ι υ'

klapo = kl_apo.split(u' ')
klse = kl_se.split(u' ')

riza = re.compile(u'(.*)')
eof=0

def sortkey(sort):
  for i in range(len(klapo)):
        sort = sort.replace(klapo[i], klse[i])
  return sort

def arxi(k):
  print "xxxx"
  print "'''%s'''" % (k)
  print "=={{-el-}}==\n\n==={{μορφή ρήματος|el}}===\n'''{{PAGENAME}}'''"
  return 1
  
def telos(k):
  print "\n{{κλείδα ταξινόμησης|%s}}" % (sortkey(k))
  print "yyyy"
  return 1

def makeEntries(ri,s1,s2,s3,yes,p1,p2,p3,ps2):
  if s1 != u"-":
    arxi(s1)
    print "# {{ρημ τύπος|γ' ενικό [[οριστική]]ς αορίστου|%s}}" % (ri)
    telos(s1)
  if s2 != u"-":
    arxi(s2)
    print "# {{ρημ τύπος|β' ενικό [[οριστική]]ς αορίστου|%s}}" % (ri)
    telos(s2)
  if s3 != u"-":
    arxi(s3)
    print "# {{ρημ τύπος|γ' ενικό [[οριστική]]ς αορίστου|%s}}" % (ri)
    if yes == u"+":
    	print "# {{ρημ τύπος|β' ενικό [[προστακτική]]ς αορίστου|%s}}" % (ri)
    telos(s3)
  if p1 != u"-":
    arxi(p1)
    print "# {{ρημ τύπος|α' πληθυντικό [[οριστική]]ς αορίστου|%s}}" % (ri)
    telos(p1)
  if p2 != u"-":    
    arxi(p2)
    print "# {{ρημ τύπος|β' πληθυντικό [[οριστική]]ς αορίστου|%s}}" % (ri)
    telos(p2)
  if p3 != u"-":
    arxi(p3)
    print "# {{ρημ τύπος|γ' πληθυντικό [[οριστική]]ς αορίστου|%s}}" % (ri)
    telos(p3)
  if ps2 != u"-":
    arxi(ps2)
    print "# {{ρημ τύπος|β' ενικό [[προστακτική]]ς αορίστου|%s}}" % (ri)
    telos(ps2)
    
  return 1

while not eof:
    grammi = fin.readline()
    if grammi == "":
	eof = 1
    else:
	line0 = riza.search(grammi)
	line = line0.group(1)
	rima = line.split(';')
	enestotas = rima[0] + u""
	e1 = rima[1] + u""
	e2 = rima[2] + u""
	e3 = rima[3] + u""
	b = rima[4] + u""
	pl1 = rima[5] + u""
	pl2 = rima[6] + u""
	pl3 = rima[7] + u""
	pr2 = rima[8] + u""
	if line != "":
	    makeEntries(enestotas,e1,e2,e3,b,pl1,pl2,pl3,pr2)
fin.close()