Korrekturen nach Analyse der Trennstellenkategorisierung.
[wortliste.git] / skripte / python / hyphenate_neueintraege.py
blobc8ef9c02a0193a37acd471b2011d3da5aff8344d
1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
3 # :Copyright: © 2014 Günter Milde.
4 # Released without warranty under the terms of the
5 # GNU General Public License (v. 2 or later)
6 # :Id: $Id: $
8 # hyphenate_neueintraege.py: Versuche kategorisierte Trennung
9 # über "hyphenation"-Algorithmus und patgen-patterns.
10 # ============================================================
12 import sys, codecs, glob, copy
13 from werkzeug import WordFile, WordEntry, join_word, toggle_case, sortkey_duden
14 from abgleich_neueintraege import print_proposal
15 from hyphenation import Hyphenator
18 # Konfiguration
19 # -------------
21 # Pfad zur Datei mit den neu einzutragenden Wörtern::
23 neuwortdatei = "spell/zusatz-de-1996-aspell-compact"
24 # neuwortdatei = "spell/DDR.txt"
27 # Die neuesten Pattern-Dateien welche über die "make" Ziele
28 # `make pattern-refo`, `make major pattern-refo`, `make fugen pattern-refo`
29 # im Wurzelverzeichnis der wortliste generiert werden::
31 pfile_all = glob.glob('../../dehyphn-x/dehyphn-x-*.pat')[-1]
32 pfile_major = glob.glob('../../dehyphn-x-major/dehyphn-x-major-*.pat')[-1]
33 pfile_fugen = glob.glob('../../dehyphn-x-fugen/dehyphn-x-fugen-*.pat')[-1]
34 pfile_suffix = glob.glob('../../dehyphn-x-suffix/dehyphn-x-suffix-*.pat')[-1]
38 # Trenner-Instanzen::
40 h_all = Hyphenator(pfile_all)
41 h_major = Hyphenator(pfile_major)
42 h_fugen = Hyphenator(pfile_fugen)
43 h_suffix = Hyphenator(pfile_suffix)
46 # Trenne mit Hyphenator::
48 def trenne(entry):
49 key = entry[0]
50 parts_fugen = h_fugen.split_word(key)
51 parts_major = h_major.split_word(key)
52 parts_suffix = h_suffix.split_word(key)
53 parts_all = h_all.split_word(key)
55 parts = [] # Liste von Silben und Trennzeichen, wird am Ende zusammengefügt.
56 p_major = '' # zum Vergleich mit parts_major
57 p_fugen = ''
58 p_suffix = ''
59 # Kategorisierung der Trennstellen
60 for part_all in parts_all[:-1]:
61 parts.append(part_all)
62 p_major += part_all
63 p_fugen += part_all
64 p_suffix += part_all
65 if p_fugen == parts_fugen[0]:
66 parts_fugen.pop(0)
67 p_fugen = ''
68 parts.append(u'=')
69 elif p_suffix == parts_suffix[0]:
70 parts_suffix.pop(0)
71 p_suffix = ''
72 parts.append(u'>')
73 elif p_major == parts_major[0]:
74 parts_major.pop(0)
75 p_major = ''
76 parts.append(u'<')
77 else:
78 parts.append(u'-')
79 parts.append(parts_all[-1])
80 word = u''.join(parts)
82 # Alternative Kategorisierung über Zerlegung der Teilwörter/Wortteile:
83 # word = u'='.join([u'<'.join([h_all.hyphenate_word(part, '-')
84 # for part in h_major.split_word(teilwort)])
85 # for teilwort in h_fugen.split_word(key)])
86 return WordEntry(key + u';' + word)
88 if __name__ == '__main__':
90 # sys.stdout mit UTF8 encoding.
91 sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)
93 neue = []
95 # Erstellen der neuen Einträge::
97 proposals = [WordEntry(line.decode('utf8').strip())
98 for line in open(neuwortdatei)
99 if not line.startswith('#')]
101 for newentry in proposals:
103 # Trennen::
105 entry = trenne(copy.copy(newentry))
106 if entry:
107 neue.append(entry)
110 # Vergleich mit Original::
112 alle_neuen = dict((entry[0].lower(), entry) for entry in neue)
114 identische = {}
115 for proposal in proposals:
116 key = proposal[0].lower()
117 newentry = alle_neuen.get(key)
118 if proposal == newentry:
119 identische[key] = proposal
120 else:
121 if newentry:
122 newentry.proposal = proposal
124 # Ausgabe::
126 print u'\n# identisch rekonstruiert:'
127 for entry in sorted(identische.values(), key=sortkey_duden):
128 print unicode(entry)
130 print u'\n# mit Pattern getrennt'
131 for entry in neue:
132 print_proposal(entry)