Ουδέτερα όπως το πεύκο

επεξεργασία

Χρειαζόμαστε μια λίστα με λέξεις σε αρχείο με όνομα "πεύκο.list". To πρόγραμμα διαβαζει τη λίστα και προσθέτει στε κάθε λήμμα το πρότυπο {{el-κλίση-'πεύκο'}} ακριβώς πριν την ετυμολογία. Αν η σελίδα δεν έχει επικεφαλίδα για Ετυμολογία ή αν το πρότυπο υπάρχει ήδη μέσα στη σελίδα, το πρόγραμμα δεν κάνει καμία ενέργεια και προχωράει στην επόμενη λέξη. Είναι φανερό ότι όλη η προσοχή πρέπει να δοθεί στην κατάρτιση του καταλόγου με τις λέξεις.

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

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

page_tag = re.compile('(.*)')
etym_tag = re.compile(u'===\{\{ετυμολογία\}\}')

debug_bul = True

def mainloop(line):
   global debug_bul
   t1 = page_tag.search(line)
   t = t1.group(1)
   print(t)
   klprot=re.compile(u"{{el-κλίση-'πεύκο'")
   klisi=u"{{el-κλίση-'πεύκο'|%s}}\n==={{ετυμολογία}}"%t[0:len(t)-1]
	
   page = wikipedia.Page(wikipedia.getSite(), t)
   arxiko = page.get(get_redirect=True)
  
   # Αντικαταστάσεις
   if klprot.search(arxiko):
   	return 0
   keimeno = etym_tag.sub(klisi,arxiko)

   # Εδώ θα μπει ο κώδικας για την αποθήκευση
   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)
      #choice= 'y'
      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'
          wikipedia.output(u"\03{lightpurple}%s\03{default} : Δεν αποθηκεύτηκαν οι αλλαγές" % page.title())
      else:
         choice = 'y'
      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))

   else:
           wikipedia.output(u"\03{lightpurple}%s\03{default} : Καμία αλλαγή δεν απαιτείται" % page.title())

def main():
 wikipedia.setLogfileStatus(True, 'πεύκο-log.txt')
 debug_bul = True

 wikipedia.setAction(u'Bot:Εισαγωγή πίνακα κλίσης')

 # Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές
 fin = codecs.open('πεύκο.list', 'r', 'utf-8')
 eof=0
 while not eof:
  line = fin.readline()
  #line = unicode(line, 'utf-8')
  if line == "":
    eof = 1
  else:
	mainloop(line)
 fin.close()

if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()

Ουδέτερα όπως το όνομα

επεξεργασία

Εδώ χρειάζεται προσοχή καθώς το πρόγραμμα θα αποτύχει να βάλει σωστά τα διαλυτικά σε λέξεις όπως το αγλάισμα

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

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

page_tag = re.compile('(.*)')
etym_tag = re.compile(u'===\{\{ετυμολογία\}\}')

debug_bul = True

atona = u"α ι ο ε η υ ω ϊ ϋ"
tonismena= u"ά ί ό έ ή ύ ώ ΐ ΰ"

trkeys = tonismena.split(u' ')
tonoumena = {}
for i in range(len(trkeys)):
    	tonoumena[trkeys[i]]=1
        trkeys[i] = ord(trkeys[i]) 
trvals = atona.split(u' ')
trtable = dict(zip(trkeys,trvals)) 

xoristono = atona.split(u' ')
for i in range(len(xoristono)):
        xoristono[i] = ord(xoristono[i]) 
metono = tonismena.split(u' ')
trtable2 = dict(zip(xoristono, metono))

lathos = u"άί όί έί ύί άύ έύ ήύ όύ έίά όίά ίά έίό όίό ίό έίέ όίέ ίέ όίώ έίώ ίώ"
sosta  = u"αί οί εί υί αύ εύ ηύ ού ειά οιά ιά ειό οιό ιό ειέ οιέ ιέ οιώ ειώ ιώ"
dyotonoi = lathos.split(u' ')
enastonos = sosta.split(u' ')

def katavivasmosTonou(lexi):

    lexi1=""
    foundaccent = False
    i=0
    while not foundaccent:
	if lexi[i] in tonoumena:
		foundaccent=True
	lexi1 = lexi1 + lexi[i]
	i = i+1
    lexi1 = lexi1.translate(trtable)
    lexi2 = lexi[i:]
    lexi2 = lexi2.translate(trtable2)
    for i in range(len(dyotonoi)):
        lexi2 = lexi2.replace(dyotonoi[i], enastonos[i])
    
    lexi3= lexi1 + lexi2
    return lexi3


def mainloop(line):
   global debug_bul
   t1 = page_tag.search(line)
   t = t1.group(1)
   print(t)
   r1=t[0:len(t)-1]
   klprot=re.compile(u"{{el-κλίση-'όνομα'")
   klisi=u"{{el-κλίση-'όνομα'|%s|%s|%s}}\n==={{ετυμολογία}}" % (r1, katavivasmosTonou(r1), r1.translate(trtable))
	
   page = wikipedia.Page(wikipedia.getSite(), t)
   arxiko = page.get(get_redirect=True)
  
   # Αντικαταστάσεις
   if klprot.search(arxiko):
   	return 0
   keimeno = etym_tag.sub(klisi,arxiko)

   # Εδώ θα μπει ο κώδικας για την αποθήκευση
   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)
      #choice= 'y'
      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'
          wikipedia.output(u"\03{lightpurple}%s\03{default} : Δεν αποθηκεύτηκαν οι αλλαγές" % page.title())
      else:
         choice = 'y'
      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))

   else:
           wikipedia.output(u"\03{lightpurple}%s\03{default} : Καμία αλλαγή δεν απαιτείται" % page.title())

def main():
 wikipedia.setLogfileStatus(True, 'όνομα-log.txt')
 debug_bul = True

 wikipedia.setAction(u'Bot:Εισαγωγή πίνακα κλίσης')

 # Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές
 fin = codecs.open('όνομα.list', 'r', 'utf-8')
 eof=0
 while not eof:
  line = fin.readline()
  #line = unicode(line, 'utf-8')
  if line == "":
    eof = 1
  else:
	mainloop(line)
 fin.close()

if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()