Flubot
Εγκατάσταση του pywikibot
- Χρήστης:Flubot/pywikibot (Οκτ 2013)
Νέα κλείδα
Interwikis
Χρησιμοποιώ:
- Για την επικαιροποίηση του dump με τις τελευταίες αλλαγές: Χρήστης:AtouBot/getrcs.sh
- Χρήστης:Flubot/παραγωγή λίστας iw
- Για την τελική φάση (επεξεργασία των σελίδων και εισαγωγή των νέων διαγλωσσικών συνδέσμων): Χρήστης:Flubot/interwikibot2
Ιστορικό (παλιότερες προσπάθειες)
Κώδικας
Μετατροπή ανακατευθύνσεων σε άρθρα με κλιτές μορφές
Στη σελίδα αυτή έχω μαζέψει αρκετές ανακατευθύνσεις που αντιστοιχούν σε κλιτές μορφές και θα μπορούσαν να μετατραπούν σε κανονικές σελίδες. Στη συνέχεια ένα μικρό script (με την καθοριστική συμβολή του Ariel που μπορεί να χρησιμεύσει με μικρές αλλαγές σε όποιον κάνει παρόμοια δουλειά με το pagefromfile.
Ανοίγουμε δύο αρχεία, το pages1.txt που περιέχει τις ανακατευθύνσεις αυτές που ταιριάζουν στο συγκεκριμένο πρότυπο πτώσειςΟΑΚεν (π.χ. αθλητή // ακονιστή) τη μία κάτω από την άλλη, και το pages2.txt που περιέχει τα ουσιαστικά στην ονομαστική ενικού (αθλητής, ακονιστής κλπ). Σε ένα τρίτο αρχείο pages3.txt θα δημιουργήσουμε το κείμενο που θα χρησιμοποιήσει το pagefromfile. Η εντολή είναι απλώς python make-page-wl.py > pages3.txt ή όπως αλλιώς ονομάσουμε το script.
Εννοείται ότι πριν τρέξει το pagefromfile, θα πρέπει να γίνει επιβεβαίωση του καταλόγου των ανακατευθύνσεων με χρήση του εργαλείου Εξαγωγή σελίδων ώστε να αποκλείσουμε την πιθανότητα κάποια από τις λέξεις να έχει ήδη υποστεί άλλη επεξεργασία.
#!/usr/bin/python # -*- coding: utf-8 -*- import sys, re, codecs reload(sys) sys.setdefaultencoding('utf-8') fin1 = codecs.open('pages1.txt', 'r', 'utf-8') fin2 = codecs.open('pages2.txt', 'r', 'utf-8') page_tag = re.compile('(.*)') eof=0 pgn="'''{{PAGENAME}}''' {{α}}" tonos3="'''" protypo=u"* {{πτώσειςΓΑΚεν|" agk=u"}}" while not eof: line = fin1.readline() if line == "": eof = 1 else: result1= page_tag.search(line) line2 = fin2.readline() result2 = page_tag.search(line2) title=tonos3+result1.group(1)+tonos3 ermn=protypo+result2.group(1)+agk print('0000') print(title) print('{{=el=}}') print('{{-μορφ-ουσ-|el}}') print(pgn) print(ermn) print('1111') print('') fin1.close() fin2.close()
Πώς δημιουργούμε μια λίστα από ανακατευθύνσεις
Από το αρχείο xml που μας δίνει η "Εξαγωγή αρχείων" μπορούμε να συντάξουμε τον κατάλογο των ανακατευθύνσεων που αυτό περιέχει με τη χρήση ενός script σε python.
#!/usr/bin/python # -*- coding: utf-8 -*- import sys, re # τρέξε το πρόγραμμα με την εντολή: # cat elwiktionary-xxxx.xml | ./bl-riderects.py # (ή όποιο αρχείο xml θέλεις) fin = sys.stdin page_tag = re.compile('<page>') title_tag = re.compile('<title>') title_content = re.compile('<title>([^:]+):(.+)<\/title>') title_capture = re.compile('<title>(.*)<\/title>') redirect_text = re.compile('#REDIRECT',re.IGNORECASE) page_tag_end = re.compile('<\/page>') set_string = re.compile('set') main_string = re.compile('main') eof=0 while not eof: line = fin.readline() if line == "": eof = 1 elif page_tag.search(line): namespace="" title="" language_header="" redirect="" 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 redirect_text.search(line): redirect="set" elif page_tag_end.search(line): if set_string.search(redirect) and main_string.search(namespace): print(title) fin.close()
Kατάλογοι λέξεων
"αλτρουι-"
Κώδικας για την εύρεση των λημμάτων που περιέχουν το κείμενο "αλτρουι-" και δεν είναι ανακατευθύνσεις
#!/usr/bin/python # -*- coding: utf-8 -*- # τρέξε το πρόγραμμα με την εντολή: # cat elwiktionary-20071005-pages-meta-current.xml | ./bl-xml-check-altroui.py >list_altroui # elwiktionary-20071005-pages-meta-current.xml : το αρχείο με όλα τα άρθρα του Βικιλεξικού # bl-xml-check-altroui.py : το αρχείο με τον κώδικα # θα πρέπει προηγουμένως να έχει γίνει εκτελέσιμο: chmod 755 bl-xml-check-altroui.py # list_altroui: το αρχείο όπου θα αποθηκευτούν οι τίτλοι των λημμάτων που περιέχουν το κείμενο "αλτρουι-" import sys, re fin = sys.stdin # οι ακόλουθες γραμμές δημιουργούν μεταβλητές για τα τμήματα κειμένου που θα ψάξουμε στο αρχείο xml # re.IGNORECASE : να αγνοήσει τη διαφορά πεζών - κεφαλαίων page_tag = re.compile('<page>') title_tag = re.compile('<title>') title_content = re.compile('<title>([^:]+):(.+)<\/title>') title_capture = re.compile('<title>(.*)<\/title>') redirect_text = re.compile('#REDIRECT',re.IGNORECASE) page_tag_end = re.compile('<\/page>') set_string = re.compile('set') main_string = re.compile('main') article_text = re.compile('αλτρου([ιϊΐ])') # elif title_tag.search(line): αν βρεί τίτλο σελίδας του τύπου [[Πρότυπο:-ουσ-]] # τότε namespace="Πρότυπο" και title="-ουσ-" # result = title_capture.search(line): αν βρεί τίτλο σελίδας "κανονικού" άρθρου, όπως [[μάτι]] # τότε namespace="main" και title="μάτι" # μετά ελέγχει αν το άρθρο είναι ανακατεύθυνση # elif article_text.search(line): μετά ελέγχει αν στη γραμμή που διάβασε υπάρχει 'αλτρου([ιϊΐ])' # και μετά αν υπάρχει σε οποιοδήποτε άλλο σημείο του άρθρου # όταν φτάσει στο τέλος του άρθρου (<\/page>) # τότε εφόσον έχει βρεθεί το κείμενο και δεν είναι ανακατεύθυνση και βρίσκεται στον κύριο τομέα, # αποθηκεύει τον τίτλο στο list_altroui # η διαδικασία επαναλαμβάνεται μέχρι το end of file ( eof διάφορο του μηδενός) eof=0 while not eof: line = fin.readline() if line == "": eof = 1 elif page_tag.search(line): namespace="" title="" title_found="" redirect="" 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) if article_text.search(title): title_found="set" elif redirect_text.search(line): redirect="set" elif article_text.search(line): title_found="set" elif page_tag_end.search(line): if set_string.search(title_found) and not set_string.search(redirect) and main_string.search(namespace): print(title) fin.close()
Ευχαριστώ τον ArielGlenn για τις υποδείξεις και το "μάθημα"
Αναζήτηση από τη γραμμή εντολής
<
#!/usr/bin/python # -*- coding: utf-8 -*- # to script είναι στην ουσία επανάληψη του προηγούμενου μ ε τη μόνη διαφορά ότι # ο χρήστης πρέπει να δώσει το κείμενο που αναζητεί ως παράμετρο στη γραμμή εντολής # π.χ. cat elwiktionary-20071005-pages-meta-current.xml | ./bl-xml-check-sthing.py αλτρου >list_01 import sys, re fin = sys.stdin page_tag = re.compile('<page>') title_tag = re.compile('<title>') title_content = re.compile('<title>([^:]+):(.+)<\/title>') title_capture = re.compile('<title>(.*)<\/title>') redirect_text = re.compile('#REDIRECT',re.IGNORECASE) page_tag_end = re.compile('<\/page>') set_string = re.compile('set') main_string = re.compile('main') option1 = re.compile(sys.argv[1]) eof=0 while not eof: line = fin.readline() if line == "": eof = 1 elif page_tag.search(line): namespace="" title="" title_found="" redirect="" 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) if option1.search(title): title_found="set" elif redirect_text.search(line): redirect="set" elif option1.search(line): title_found="set" elif page_tag_end.search(line): if set_string.search(title_found) and not set_string.search(redirect) and main_string.search(namespace): print(title) fin.close()
Χωρισμός μιας σελίδας σε τομείς ανά γλώσσα
Kάνω μια δοκιμή για να χωρίσω τη σελίδα Orion σε τομείς ανά γλώσσα και να αποδώσω το περιεχόμενο της κάθε γλώσσας σε μια μεταβλητή tomeas[x]. O κωδικός της γλώσσας του κάθε τομέα (πχ en, el, fr κλπ) αποθηκεύεται στη μεταβλητή glossa[x]. Ο αριθμός της γραμμής που έχει την επικεφαλίδα =={{-γλώσσα-}}== αποθηκεύεται στη μεταβλητή indx[x].
#!/usr/bin/python # -*- coding: utf-8 -*- import wikipedia import sys, re, codecs lang_tag = re.compile('==\{\{-([a-z\-]+)-\}\}==') # Εδώ ορίζεται η λέξη t = 'Orion' indx = [] tomeas = [] glossa = [] page = wikipedia.Page(wikipedia.getSite(), t) arxiko = page.get(get_redirect=True) meso = arxiko.splitlines() tomeis = arxiko.count('=={{-') print(tomeis) j=0 for k in range(len(meso)): result = lang_tag.search(meso[k]) if result: glossa.append(result.group(1)) indx.append(k) j = j+1 indx.append(len(meso)+1) tomeas.append('') for j2 in range(indx[1]-1): tomeas[0] = tomeas[0] + meso[j2] + '\n' for j1 in range(1,tomeis): tomeas.append('') for j2 in range(indx[j1],indx[j1+1]-1): tomeas[j1] = tomeas[j1] + meso[j2] + '\n' # Εδώ ξαναενώνονται οι τομείς των γλωσσών για να πάρουμε την ενιαία σελίδα # αφού έχουμε κάνει όποιες τυχόν αλλαγές θέλουμε στον κάθε τομέα χωριστά keimeno = "\n".join(tomeas) if keimeno[-1] == '\n': keimeno = keimeno[0:-1]