Χρήστης:Flubot/Κλείδα ταξινόμησης1

--> Βλέπε και Κώδικας που δεν χρησιμοποιείται πια


Πώς βρίσκουμε ποιες ξένες λέξεις χρειάζονται κλείδα επεξεργασία

Γενικά επεξεργασία

Καταρχήν παρακολουθούμε τις Νέες σελίδες. Επειδή όμως αυτό ίσως δεν είναι αρκετό, χρειαζόμαστε ένα αρχείο xml με τις λέξεις της γλώσσας που μας ενδιαφέρει ή με όλες τις λέξεις του Βικιλεξικού. Δείτε: Χρήστης:Flubot/Κλείδα ταξινόμησης1/Γενικές οδηγίες

Αποθηκεύουμε αυτό το αρχείο με το όνομα last-full.xml.bz2, στον ίδιο κατάλογο με τα script που ακολουθούν. Τρέχουμε τα script με εντολή bzcat last_full.xml.bz2 | python taxin-pl.py (για τα πολωνικά), ή με όποιο όνομα έχουμε αποθηκεύσει το script. Θα πάρουμε στην έξοδο της κονσόλας μια καταγραφή των λέξεων χωρίς κλείδα ή με λανθασμένη ή με περιττή κλείδα. Αν θέλουμε να αποθηκεύσουμε την έξοδο θα πρέπει να δώσουμε την εντολή bzcat last_full.xml.bz2 | python taxin-pl.py > pl-results. Από αυτό το αρχείο εξόδου μπορούμε να διαγράψουμε τα σχόλια και να έχουμε μια καθαρή λίστα λέξεων, τη μια κάτω από την άλλη, χωρίς αγκύλες, για να τη δώσουμε στο bot που θα βάλει την κλείδα.


Γαλλική γλώσσα επεξεργασία

Εντολή: bzcat2 last_full.xml.bz2 | ./taxin-fr.py > fr-results.txt

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

#import wikipedia
import sys, re, codecs
reload(sys)
sys.setdefaultencoding('utf8')

page_tag = re.compile('<page>')
title_tag = re.compile('<title>')
title_content = re.compile('<title>([^:]+):(.+)<\/title>')
title_capture = re.compile('<title>(.*)<\/title>')
lang_template = re.compile('\{\{-([^\}]+)\}\}')

spaces_tag = re.compile('([ ,\*\.\'\-\(\)]*)')
apost_tag = re.compile(u'’')
line_txt = re.compile('(.*)')

pos = re.compile('επίθετο\|fr')
pos_tag = re.compile('\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|προθετική έκφραση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|fr\}\}')
#meros_tag = re.compile('\{\{([^\|]+)\|fr(\|*)\}\}')
pos1_tag = re.compile('\{\{(<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|προθετική έκφραση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|fr\|([^\|\}]*)\}\}')
pos2_tag = re.compile('\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|προθετική έκφραση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|fr\|αριθ\=(?P<arith>[1-9]*)\}\}')
pos3_tag = re.compile('\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|προθετική έκφραση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|fr\|αριθ\=(?P<arith>[1-9]*)\|(?P<kleidi>[^\}\|]*)\}\}')
pos4_tag = re.compile('\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|ρηματική έκφραση|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|προθετική έκφραση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|fr\|(?P<kleidi>[^\}\|]*)\|αριθ=(?P<arith>[1-9]*)\}\}')

etym_tag = re.compile('\{\{ετυμ ([a-z]*)\|FR\}\}')
etym1_tag = re.compile('\{\{ετυμ ([a-z]*)\|FR\|([^\}]*)\}\}')
categ_tag = re.compile('\[\[Κατηγορία:(.*)γαλλικά(\)*)\]\]')
categ1_tag = re.compile('\[\[Κατηγορία:(.*)γαλλικά(\)*)\|([^\]]*)\]\]')

language_header=0
nokleida=0
kleida=""

# πίνακες αντιστοίχισης
kl_apo = u'Å À Â Ç É È Ê Ë Î Ï Ô Ù Û Ü à â á ç é è ê ë î ï ô ù û ü Œ œ æ'
kl_se =  u'A A A C E E E E I I O U U U a a a c e e e e i i o u u u Oe oe ae'

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

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

# Εδώ διαβάζει το αρχείο xml για να βρει τις λέξεις που χρειάζονται αλλαγή στην κλείδα
fin = sys.stdin
eof = 0
 #line = unicode(line, 'utf-8')

line = fin.readline()
while (line!=""):
    if page_tag.search(line):
	namespace = ""
	title = ""
	language_header = False
	nokleida = False
	kleida = ""
    elif title_tag.search(line):
           result = title_content.search(line)
           if result:
	       namespace = result.group(1)
	       title = result.group(2)
	   else:
               result = title_capture.search(line)
               if result:
	         namespace="main"
	         title=result.group(1)
    elif lang_template.search(line):
	result = lang_template.search(line)
	if result.group(1)=='fr-' and namespace=='main':
		language_header = True
		kleida = sortkey(title)
		# να βρούμε αν η λέξη αρχίζει από se ή από s'
		ti=kleida.split(' ', 1)[0]
		if ti=="se" or ti=="s'" or ti==u"s’":
			kleida = kleida.split(' ', 1)[1]
		ti=kleida.split('\'', 1)[0]
		if ti=="s":
			kleida = kleida.split('\'', 1)[1]
		# να βρούμε αν η λέξη αρχίζει από s’
		ti = kleida.split('’', 1)[0]
		if (ti == "s"):
			kleida = kleida.split('’', 1)[1]
		kleida = spaces_tag.sub('',kleida)
		kleida = apost_tag.sub('',kleida)
		if (kleida == title):
			nokleida = True
		else:
			nokleida = False
			kleida = kleida.lower()
	else:
		language_header = False
		nokleida = True
    elif language_header and not nokleida and pos_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  pos2_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  etym_tag.search(line):
        print u"%s: χρειάζεται κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and not nokleida and  categ_tag.search(line):
        print u"%s: θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and nokleida and pos1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos3_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos4_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and etym1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and nokleida and categ1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and not nokleida and pos1_tag.search(line):
	result=pos1_tag.search(line)
	kleida1=result.group(2)
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and etym1_tag.search(line):
	result=etym1_tag.search(line)
	kleida1=result.group(2)
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην ετυμολογία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and categ1_tag.search(line):
	result=categ1_tag.search(line)
	kleida1=result.group(3)
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην κατηγορία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    line = fin.readline()
fin.close()

Γερμανική γλώσσα επεξεργασία

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

#import wikipedia
import sys, re, codecs
reload(sys)
sys.setdefaultencoding('utf8')

page_tag = re.compile('<page>')
title_tag = re.compile('<title>')
title_content = re.compile('<title>([^:]+):(.+)<\/title>')
title_capture = re.compile('<title>(.*)<\/title>')
lang_template = re.compile('\{\{-([^\}]+)\}\}')

spaces_tag = re.compile('([ \*\.\'\-\(\)]*)')
apost_tag = re.compile(u'’')
line_txt = re.compile('(.*)')

pos_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|de\}\}')
#meros_tag = re.compile('\{\{([^\|]+)\|de(\|*)\}\}')
pos1_tag = re.compile(u'\{\{(<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|de\|([^\|\}]*)\}\}')
pos2_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|de\|αριθ\=(?P<arith>[1-9]*)\}\}')
pos3_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|de\|αριθ\=(?P<arith>[1-9]*)\|(?P<kleidi>[^\}\|]*)\}\}')
pos4_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|de\|(?P<kleidi>[^\}\|]*)\|αριθ=(?P<arith>[1-9]*)\}\}')

etym_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|DE\}\}')
etym1_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|DE\|([^\}]*)\}\}')
categ_tag = re.compile(u'\[\[Κατηγορία:(.*)γερμανικά(\)*)\]\]')
categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)γερμανικά(\)*)\|([^\]]*)\]\]')

language_header=0
nokleida=0
kleida=""

# πίνακες αντιστοίχισης
mtg_apo = u'É Ä Â Ö Ü à â ä ç é è ê ë î ï ô ö ù û ü ß ſ œ'
mtg_se =  u'e a a o u a a a c e e e e i i o o u u u ss s oe'

trkeys = mtg_apo.split(u' ')
for i in range(len(trkeys)):
        trkeys[i] = ord(trkeys[i]) 
trvals = mtg_se.split(u' ')
trtable = dict(zip(trkeys,trvals))

# Εδώ διαβάζει το αρχείο xml για να βρει τις λέξεις που χρειάζονται αλλαγή στην κλείδα
fin = codecs.open('last_full.xml', 'r', 'utf-8')
eof=0
while not eof:
    line = fin.readline()
 #line = unicode(line, 'utf-8')
    if line == "":
        eof = 1
    elif page_tag.search(line):
	namespace=""
	title=""
	language_header=0
	nokleida=0
	kleida=""
    elif title_tag.search(line):
           result = title_content.search(line)
           if result:
	       namespace=result.group(1)
	       title=result.group(2)
	   else:
               result = title_capture.search(line)
               if result:
	         namespace="main"
	         title=result.group(1)
    elif lang_template.search(line):
	result = lang_template.search(line)
	if result.group(1)=='de-' and namespace=='main':
		language_header=1
		kleida = title.translate(trtable)

		kleida = spaces_tag.sub('',kleida)
		kleida = apost_tag.sub('',kleida)
  		kleida = kleida.lower()
		if kleida == title:
			nokleida = 1
		else:
			nokleida = 0
    	else:
		language_header=0
		nokleida=0
    elif language_header and not nokleida and  pos_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  pos2_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  etym_tag.search(line):
        print u"%s: χρειάζεται κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and not nokleida and  categ_tag.search(line):
        print u"%s: θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and nokleida and pos1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos3_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos4_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and etym1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and nokleida and categ1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and not nokleida and pos1_tag.search(line):
	result=pos1_tag.search(line)
	kleida1=result.group(2)
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and etym1_tag.search(line):
	result=etym1_tag.search(line)
	kleida1=result.group(2)
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην ετυμολογία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and categ1_tag.search(line):
	result=categ1_tag.search(line)
	kleida1=result.group(3)
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην κατηγορία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
fin.close()

Γλώσσα Εσπεράντο επεξεργασία

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

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

page_tag = re.compile('<page>')
title_tag = re.compile('<title>')
title_content = re.compile('<title>([^:]+):(.+)<\/title>')
title_capture = re.compile('<title>(.*)<\/title>')
lang_template = re.compile('\{\{-([^\}]+)\}\}')

spaces_tag = re.compile('([ \*\.\'\-\(\)]*)')
apost_tag = re.compile('u\’')
line_txt = re.compile('(.*)')

pos_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|eo\}\}')
#meros_tag = re.compile('\{\{([^\|]+)\|eo(\|*)\}\}')
pos1_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|eo\|(?P<kleidi1>[^\=\|\}]*)\}\}')
pos2_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|eo\|αριθ\=([1-9]*)\}\}')
pos3_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|eo\|αριθ\=([1-9]*)\|(?P<kleidi3>[^\}\|]*)\}\}')
pos4_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|eo\|(?P<kleidi4>[^\|]*)|αριθ\=[1-9]*\}\}')
etym_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|EO\}\}')
etym1_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|EO\|(?P<kleidi5>[^\}]*)\}\}')
categ_tag = re.compile(u'\[\[Κατηγορία:(.*)εσπεράντο(\)*)\]\]')
categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)εσπεράντο(\)*)\|(?P<kleidi6>[^\]]*)\]\]')

language_header=0
nokleida=0
kleida=""

# πίνακες αντιστοίχισης
mtg_apo = u'ĉ ĝ ĥ ĵ ŝ ŭ'
mtg_se =  u'cα gα hα jα sα uα'


trkeys = mtg_apo.split(u' ')
for i in range(len(trkeys)):
        trkeys[i] = ord(trkeys[i]) 
trvals = mtg_se.split(u' ')
trtable = dict(zip(trkeys,trvals))

# Εδώ διαβάζει το αρχείο xml για να βρει τις λέξεις που χρειάζονται αλλαγή στην κλείδα
fin = codecs.open('last_full.xml', 'r', 'utf-8')
eof=0
while not eof:
    line = fin.readline()
 #line = unicode(line, 'utf-8')
    if line == "":
        eof = 1
    elif page_tag.search(line):
	namespace=""
	title=""
	language_header=0
	nokleida=0
	kleida=""
    elif title_tag.search(line):
           result = title_content.search(line)
           if result:
	       namespace=result.group(1)
	       title=result.group(2)
	   else:
               result = title_capture.search(line)
               if result:
	         namespace="main"
	         title=result.group(1)
    elif lang_template.search(line):
	result = lang_template.search(line)
	if result.group(1)=='eo-' and namespace=='main':
		language_header=1
		t = title
  #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας
		t = spaces_tag.sub('',t)
		t = apost_tag.sub('',t)
		T0=t[0:1]
		t9=t[1:len(t)+1]
		kleida = t9.translate(trtable)
		kleida = T0 + kleida
		kleida = kleida.lower()

		if kleida == title:
			nokleida = 1
		else:
			nokleida = 0
    	else:
		language_header=0
		nokleida=0
    elif language_header and not nokleida and  pos_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  pos2_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  etym_tag.search(line):
        print u"%s: χρειάζεται κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and not nokleida and  categ_tag.search(line):
        print u"%s: θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and nokleida and pos2_tag.search(line):
	kleida11=''
    elif language_header and nokleida and pos3_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos4_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and etym1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and nokleida and categ1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and not nokleida and pos1_tag.search(line):
	result=pos1_tag.search(line)
	kleida1=result.group('kleidi1')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and pos3_tag.search(line):
	result=pos3_tag.search(line)
	kleida1=result.group('kleidi3')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and pos4_tag.search(line):
	result=pos4_tag.search(line)
	kleida1=result.group('kleidi4')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and categ1_tag.search(line):
	result=categ1_tag.search(line)
	kleida1=result.group('kleidi6')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην κατηγορία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and etym1_tag.search(line):
	result=etym1_tag.search(line)
	kleida1=result.group('kleidi5')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην ετυμολογία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
fin.close()

Πολωνική γλώσσα επεξεργασία

Εντολή: bzcat last_full.xml.bz2 | python taxi-pl.py > pl-results.txt

taxi-pl.py επεξεργασία

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

import sys, re, codecs
sys.stdin = codecs.getreader("utf-8")(sys.stdin)
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

page_tag = re.compile('<page>')
title_tag = re.compile('<title>')
title_content = re.compile('<title>([^:]+):(.+)<\/title>')
title_capture = re.compile('<title>(.*)<\/title>')
lang_template = re.compile('\{\{-([^\}]+)\}\}')

spaces_tag = re.compile('([ \*\.\'\-\(\)]*)')
apost_tag = re.compile(u'’')
line_txt = re.compile('(.*)')

pos_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|pl\}\}')
pos1_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|pl\|(?P<kleidi1>[^\=\|\}]*)\}\}')
pos2_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|pl\|αριθ\=([1-9]*)\}\}')
pos3_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|pl\|αριθ\=([1-9]*)\|(?P<kleidi3>[^\}\|]*)\}\}')
pos4_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|pl\|(?P<kleidi4>[^\|]*)|αριθ\=[1-9]*\}\}')
etym_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|PL\}\}')
etym1_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|PL\|(?P<kleidi5>[^\}]*)\}\}')
categ_tag = re.compile(u'\[\[Κατηγορία:(.*)πολωνικά(\)*)\]\]')
categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)πολωνικά(\)*)\|(?P<kleidi6>[^\]]*)\]\]')

language_header=0
nokleida=0
kleida=""

# πίνακες αντιστοίχισης
kl_apo = u'ą ć ę ł ń ó ś ź ż'
kl_se =  u'aα cα eα lα nα oα sα zα zε'
klapo = kl_apo.split(u' ')
klse = kl_se.split(u' ')

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

# Εδώ διαβάζει το αρχείο xml για να βρει τις λέξεις που χρειάζονται αλλαγή στην κλείδα
fin = sys.stdin

line = fin.readline()
while (line!=""):
    if page_tag.search(line):
	namespace = ""
	title = ""
	language_header = False
	nokleida = False
	kleida = ""
    elif title_tag.search(line):
           result = title_content.search(line)
           if result:
	       namespace = result.group(1)
	       title = result.group(2)
	   else:
               result = title_capture.search(line)
               if result:
	         namespace="main"
	         title=result.group(1)
    elif lang_template.search(line):
	result = lang_template.search(line)
	if result.group(1)=='pl-' and namespace=='main':
		language_header=1
		t = title
  #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας
		T0=t[0:1]
		t9=t[1:len(t)+1]
		kleida = sortkey(t9)
		kleida = spaces_tag.sub('',kleida)
		kleida = apost_tag.sub('',kleida)
		kleida = T0 + kleida
		kleida = kleida.lower()
		kleida = spaces_tag.sub('',kleida)
		kleida = apost_tag.sub('',kleida)
		kleida = kleida.lower()
		if kleida == title.lower():
			nokleida = True
		else:
			nokleida = False
    	else:
		language_header=0
		nokleida=True
    elif language_header and not nokleida and  pos_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  pos2_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  etym_tag.search(line):
        print u"%s: χρειάζεται κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and not nokleida and  categ_tag.search(line):
        print u"%s: θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and nokleida and pos2_tag.search(line):
	pass
    elif language_header and nokleida and pos1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos3_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos4_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and etym1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and nokleida and categ1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and not nokleida and pos1_tag.search(line):
	result=pos1_tag.search(line)
	kleida1=result.group('kleidi1')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and pos3_tag.search(line):
	result=pos3_tag.search(line)
	kleida1=result.group('kleidi3')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and pos4_tag.search(line):
	result=pos4_tag.search(line)
	kleida1=result.group('kleidi4')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and categ1_tag.search(line):
	result=categ1_tag.search(line)
	kleida1=result.group('kleidi6')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην κατηγορία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and etym1_tag.search(line):
	result=etym1_tag.search(line)
	kleida1=result.group('kleidi5')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην ετυμολογία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    line = fin.readline()
fin.close()

Πορτογαλική γλώσσα επεξεργασία



Ρουμανική γλώσσα επεξεργασία

Εντολή: bzcat last_full.xml.bz2 | python taxi-ro.py > ro-results.txt

taxi-ro.py επεξεργασία

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

import sys, re, codecs
sys.stdin = codecs.getreader("utf-8")(sys.stdin)
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

page_tag = re.compile('<page>')
title_tag = re.compile('<title>')
title_content = re.compile('<title>([^:]+):(.+)<\/title>')
title_capture = re.compile('<title>(.*)<\/title>')
lang_template = re.compile('\{\{-([^\}]+)\}\}')

spaces_tag = re.compile('([ \*\.\'\-\(\)]*)')
apost_tag = re.compile(u'’')
line_txt = re.compile('(.*)')

pos_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|ro\}\}')
#meros_tag = re.compile('\{\{([^\|]+)\|ro(\|*)\}\}')
pos1_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|ro\|(?P<kleidi1>[^\=\|\}]*)\}\}')
pos2_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|ro\|αριθ\=([1-9]*)\}\}')
pos3_tag = re.compile(u'\{\{(?P<pos>άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|ro\|αριθ\=([1-9]*)\|(?P<kleidi3>[^\}\|]*)\}\}')
pos4_tag = re.compile(u'\{\{(άρθρο|ουσιαστικό|συντομομορφή|κύριο όνομα|πολυλεκτικός όρος|επίθετο|επιθετική έκφραση|αντωνυμία|μετοχή|ρήμα|έκφραση|επίρρημα|επιρρηματική έκφραση|πρόθεση|σύνδεσμος|επιφώνημα|αριθμητικό|μόριο|πρόθημα|επίθημα|έκφραση|ρίζα|μορφή ουσιαστικού|μορφή επιθέτου|μορφή μετοχής|μορφή αντωνυμίας|μορφή ρήματος|μορφή κυρίου ονόματος|χαρακτήρας|σύμβολο|κατάληξη|κατάληξη αρσενικών επιθέτων|κατάληξη αρσενικών ουσιαστικών|κατάληξη αρσενικών και θηλυκών ουσιαστικών|κατάληξη επιρρημάτων|κατάληξη θηλυκών ουσιαστικών|κατάληξη ουδέτερων ουσιαστικών|κατάληξη ρημάτων)\|ro\|(?P<kleidi4>[^\|]*)|αριθ\=[1-9]*\}\}')
etym_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|RO\}\}')
etym1_tag = re.compile(u'\{\{ετυμ ([a-z]*)\|RO\|(?P<kleidi5>[^\}]*)\}\}')
categ_tag = re.compile(u'\[\[Κατηγορία:(.*)ρουμανικά(\)*)\]\]')
categ1_tag = re.compile(u'\[\[Κατηγορία:(.*)ρουμανικά(\)*)\|(?P<kleidi6>[^\]]*)\]\]')

language_header=0
nokleida=0
kleida=""

# πίνακες αντιστοίχισης
kl_apo = u'ă â î ş ș ţ ț'
kl_se =  u'aα aε iα sα sα tα tα'

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

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

# Εδώ διαβάζει το αρχείο xml για να βρει τις λέξεις που χρειάζονται αλλαγή στην κλείδα
fin = sys.stdin

line = fin.readline()
while (line!=""):
    if page_tag.search(line):
	namespace = ""
	title = ""
	language_header = False
	nokleida = False
	kleida = ""
    elif title_tag.search(line):
           result = title_content.search(line)
           if result:
	       namespace = result.group(1)
	       title = result.group(2)
	   else:
               result = title_capture.search(line)
               if result:
	         namespace="main"
	         title=result.group(1)
    elif lang_template.search(line):
	result = lang_template.search(line)
	if result.group(1)=='ro-' and namespace=='main':
		language_header=1
		t = title
  #Tο πρώτο γράμμα της λέξης μένει εκτός κλείδας
		T0=t[0:1]
		t9=t[1:len(t)+1]
		kleida = sortkey(t9)
		kleida = spaces_tag.sub('',kleida)
		kleida = apost_tag.sub('',kleida)
		kleida = T0 + kleida
		kleida = kleida.lower()
		kleida = spaces_tag.sub('',kleida)
		kleida = apost_tag.sub('',kleida)
		kleida = kleida.lower()
		if kleida == title.lower():
			nokleida = True
		else:
			nokleida = False
    	else:
		language_header=0
		nokleida=True
    elif language_header and not nokleida and  pos_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  pos2_tag.search(line):
        print u"%s: χρειάζεται κλείδα στο POS, %s" % (title, kleida)
    elif language_header and not nokleida and  etym_tag.search(line):
        print u"%s: χρειάζεται κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and not nokleida and  categ_tag.search(line):
        print u"%s: θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and nokleida and pos2_tag.search(line):
	pass
    elif language_header and nokleida and pos1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos3_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and pos4_tag.search(line):
        print u"%s: δεν θέλει κλείδα στο POS, %s" % (title, kleida)
    elif language_header and nokleida and etym1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην ετυμολογία, %s" % (title, kleida)
    elif language_header and nokleida and categ1_tag.search(line):
        print u"%s: δεν θέλει κλείδα στην κατηγορία, %s" % (title, kleida)
    elif language_header and not nokleida and pos1_tag.search(line):
	result=pos1_tag.search(line)
	kleida1=result.group('kleidi1')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and pos3_tag.search(line):
	result=pos3_tag.search(line)
	kleida1=result.group('kleidi3')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and pos4_tag.search(line):
	result=pos4_tag.search(line)
	kleida1=result.group('kleidi4')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα POS %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and categ1_tag.search(line):
	result=categ1_tag.search(line)
	kleida1=result.group('kleidi6')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην κατηγορία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    elif language_header and not nokleida and etym1_tag.search(line):
	result=etym1_tag.search(line)
	kleida1=result.group('kleidi5')
	if kleida != kleida1:
		print u"%s: λανθασμένη κλείδα στην ετυμολογία %s, σωστή κλείδα %s" % (title,kleida1,kleida)
    line = fin.readline()
fin.close()