3 # :Copyright: © 2014 Günter Milde.
4 # Released without warranty under the terms of the
5 # GNU General Public License (v. 2 or later)
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
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]
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::
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
59 # Kategorisierung der Trennstellen
60 for part_all
in parts_all
[:-1]:
61 parts
.append(part_all
)
65 if p_fugen
== parts_fugen
[0]:
69 elif p_suffix
== parts_suffix
[0]:
73 elif p_major
== parts_major
[0]:
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
)
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
:
105 entry
= trenne(copy
.copy(newentry
))
110 # Vergleich mit Original::
112 alle_neuen
= dict((entry
[0].lower(), entry
) for entry
in neue
)
115 for proposal
in proposals
:
116 key
= proposal
[0].lower()
117 newentry
= alle_neuen
.get(key
)
118 if proposal
== newentry
:
119 identische
[key
] = proposal
122 newentry
.proposal
= proposal
126 print u
'\n# identisch rekonstruiert:'
127 for entry
in sorted(identische
.values(), key
=sortkey_duden
):
130 print u
'\n# mit Pattern getrennt'
132 print_proposal(entry
)