Χρήστης:Flubot/Πίνακες κλίσης
Ουδέτερα όπως το πεύκο
επεξεργασίαΧρειαζόμαστε μια λίστα με λέξεις σε αρχείο με όνομα "πεύκο.list". To πρόγραμμα διαβαζει τη λίστα και προσθέτει στε κάθε λήμμα το πρότυπο {{el-κλίση-'πεύκο'}}
ακριβώς πριν την ετυμολογία. Αν η σελίδα δεν έχει επικεφαλίδα για Ετυμολογία ή αν το πρότυπο υπάρχει ήδη μέσα στη σελίδα, το πρόγραμμα δεν κάνει καμία ενέργεια και προχωράει στην επόμενη λέξη. Είναι φανερό ότι όλη η προσοχή πρέπει να δοθεί στην κατάρτιση του καταλόγου με τις λέξεις.
πεύκο.py
επεξεργασία#!/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()
Ουδέτερα όπως το όνομα
επεξεργασίαΕδώ χρειάζεται προσοχή καθώς το πρόγραμμα θα αποτύχει να βάλει σωστά τα διαλυτικά σε λέξεις όπως το αγλάισμα
όνομα.py
επεξεργασία#!/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()