Χρήστης:Flubot/Αυτοματοποιημένη εισαγωγή σε θηλυκά ουσιαστικά

Αυτοματοποιημένη εισαγωγή ετυμολογιών (και ορισμών) σε θηλυκά ουσιαστικά

επεξεργασία

Eίναι δυνατόν να εισάγουμε μαζικά ετυμολογίες και ορισμούς τύπου {{βλ|ΧΧΧΧΧ}} σε μια ομάδα λημμάτων με κοινά χαρακτηριστικά, όπως είναι τα θηλυκά ουσιαστικά σε -τρια, -τρα, -ισσα. Χρειαζόμαστε δύο αρχεία εισαγωγής, το ένα με τους τίτλους των θηλυκών λημμάτων και το δεύτερο με τα αρσενικά αντίστοιχά τους.

Παίρνουμε ως παράδειγμα τα θηλυκά σε -τρια. Ονομάζουμε τα δύο αρχεία list-f-tria και list-m-tria αντιστοίχως. Οι λέξεις πρέπει να βρίσκονται η μία κάτω από την άλλη και χωρίς τετράγωνες αγκύλες. Το bot θα αντικαταστήσει το {{λείπει ο ορισμός}} με το {{βλ|αρσενικόΧΧΧ}} και το {{λείπει η ετυμολογία}} καθώς και το {{θηλ του|ΧΧΧ}} με το {{θηλ τρια|αρσενικόΧΧΧ.

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

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

debug_bul = True

page_tag = re.compile('(.*)')
etym1 = re.compile(u'PAGENAME\}\}\'\'\'( *)(\<|\:)?( *)\{\{λείπει η ετυμολογία\}\}')
etym2 = re.compile(u'PAGENAME\}\}\'\'\'( *)(\<|\:)?( *){\{θηλ_του\|([^\}]+)}\}')
etym3 = re.compile(u'PAGENAME\}\}\'\'\'( *)(\<|\:)?( *)\[\[([^\]]+)\]\]')
etym4 = re.compile(u'PAGENAME\}\}\'\'\'( *)(\<|\:)?( *)θηλυκό του \[\[([^\]]+)\]\]')
orism = re.compile(u'\{\{λείπει ο ορισμός\}\}')

wikipedia.setAction(u'Εισαγωγή ετυμολογίας, ανακατεύθυνσης στον ορισμό')

# Εδώ ορίζεται η λέξη στην οποία θα γίνουν οι αλλαγές
fin1 = codecs.open('list-f-tria', 'r', 'utf-8')
fin2 = codecs.open('list-m-tria', 'r', 'utf-8')
eof=0


while not eof:
	line = fin1.readline()
	line2 = fin2.readline()
	if line == "":
		eof = 1
	else:
		t1 = page_tag.search(line)
		title = t1.group(1)
		m2 = page_tag.search(line2)
		t2 = m2.group(1)
		page = wikipedia.Page(wikipedia.getSite(), title)
		arxiko = page.get(get_redirect=True)
# Αντικαταστάσεις

	p2 = etym2.sub(u'PAGENAME}}\'\'\' < {{θηλ τρια|'+t2+'}}', arxiko)
	p2 = etym1.sub(u'PAGENAME}}\'\'\' < {{θηλ τρια|'+t2+'}}', p2)
	p2 = etym3.sub(u'PAGENAME}}\'\'\' < {{θηλ τρια|'+t2+'}}', p2)
	p2 = etym4.sub(u'PAGENAME}}\'\'\' < {{θηλ τρια|'+t2+'}}', p2)

	p2 = orism.sub(u'{{βλ|'+t2+'}}', p2)

	keimeno = p2
# Εδώ ο κώδικας για την αποθήκευση
	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)
		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'
		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))

fin2.close()
fin1.close()