Python-Skripte: kleine Korrekturen.
[wortliste.git] / skripte / python / edit_tools / split_wortliste.py
blob4066cdde1d532c18c7f8d96b04dfccd484424882
1 #!/usr/bin/env python3
2 # :Copyright: © 2014 Günter Milde.
3 # Released without warranty under the terms of the
4 # GNU General Public License (v. 2 or later)
5 # :Id: $Id: $
7 # split_wortliste.py: Helfer für kleine Editieraufgaben
8 # ===================================================
9 # ::
11 """
12 Aufteilen einer Wortliste-Datei.
13 """
15 # ::
17 import argparse, sys, os, re, unicodedata
19 # append path to the "edit_tools" package
20 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
22 from edit_tools.wortliste import sortkey_duden, umschrift_skey, WordFile
25 # Gib den ersten Buchstaben einer Zeile (normalisiert auf a-z) zurück
27 # >>> from split_wortliste import startletter
28 # >>> startletter('Öfen')
29 # 'o'
30 # >>> startletter('-*-;ſoff')
31 # 's'
33 # ::
35 def startletter(line):
37 match = re.search('[a-zäöüßæœſA-ZÄÖÜÆÅØ]', line)
38 if not match:
39 return ''
40 sl = match.group(0).lower()
41 sl = sl.translate(umschrift_skey)
42 sl = unicodedata.normalize('NFKD', sl)
43 return sl.encode('ascii', 'ignore').decode('utf8')
45 # Erzeuge ein Dictionary mit leeren Listen für die Buchstabne a bis z
47 # >>> from split_wortliste import make_az_lists
48 # >>> lists = make_az_lists()
49 # >>> lists['m']
50 # []
52 # ::
54 def make_az_lists():
55 lists = {}
56 for i in range(ord('a'), ord('z')+1):
57 lists[chr(i)] = []
58 return lists
60 # split_a_z
61 # ---------
63 # Sortiere eine Liste von Zeilen je nach Anfangsbuchstaben in
64 # Einzellisten. Gib ein Dictionary mit den Listen zurück. ::
66 def split_a_z(lines):
68 lists = make_az_lists()
69 # einsortieren:
70 for line in lines:
71 try:
72 lists[startletter(line)].append(line)
73 except IndexError:
74 # print(line, startletter(line))
75 continue
76 return lists
78 # Sortiere eine Liste von Zeilen je nach Anfangsbuchstaben in
79 # Einzeldateien. Das Argument ``destination`` wird um die Endungen
80 # ``a`` … ``z`` ergänzt::
82 def write_a_z(lists, destination):
83 for ch, lines in lists.items():
84 print(ch, len(lines), end=' ')
85 if not lines:
86 continue
87 outfile = open(destination+ch, 'w')
88 outfile.writelines(line for line in lines)
91 # Default-Aktion::
93 if __name__ == '__main__':
96 # Optionen::
98 usage = '%(prog)s [Optionen] destination\n' + __doc__
100 parser = argparse.ArgumentParser(usage=usage)
101 parser.add_argument('destination', help='Template für die Ausgangsdateien'
102 '(wird um "a"..."z" erweitert).')
103 parser.add_argument('-i', '--wordfile',
104 help='Eingangsdatei, Vorgabe "../../../wortliste"',
105 default='../../../wortliste')
106 parser.add_argument('-s', '--sort',
107 help='Einträge sortieren (Dudensortierung).',
108 action="store_true", default=False)
110 args = parser.parse_args()
112 # Öffnen::
114 wordfile = open(args.wordfile) # vorhandene Einträge
116 # Aufteilen und Schreiben::
118 lists = split_a_z(wordfile.readlines())
119 write_a_z(lists, args.destination)