From ba2be14e65d1360ebb51774d63d6d94755cba7c0 Mon Sep 17 00:00:00 2001 From: Guenter Milde Date: Tue, 24 Jun 2014 15:20:41 +0200 Subject: [PATCH] Python-Skript Update und Fix. --- skripte/python/abgleich_neueintraege.py | 30 ++++++++++++++++++++++++++++-- skripte/python/prepare_patch.py | 2 +- skripte/python/s2long-s.py | 17 +++++++++-------- skripte/python/werkzeug.py | 5 +++-- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/skripte/python/abgleich_neueintraege.py b/skripte/python/abgleich_neueintraege.py index 1e9f4e8..72a22b1 100644 --- a/skripte/python/abgleich_neueintraege.py +++ b/skripte/python/abgleich_neueintraege.py @@ -553,6 +553,7 @@ endungen = [ (u'ie', u'e'), (u'in', u'en'), (u'isch', u'i-sche'), + (u'ck', u'-cke'), (u'k', u'-ke'), (u'k', u'-ken'), (u'k', u'-ker'), @@ -567,7 +568,7 @@ endungen = [ (u'lt', u'-le'), (u'm', u'-me'), (u'm', u'-mer'), - (u'me', u'-men'), + (u'me', u'men'), (u'mus', u'men'), (u'mus', u'ten'), (u'mus', u'tik'), @@ -668,6 +669,17 @@ def zerlege(s): for i in range(1, len(s)): yield s[:i], s[i:] +# Zerlege Kompositum in gleichberechtigte Teile:: + +# >>> from abgleich_neueintraege import split_composits +# >>> from werkzeug import WordEntry +# >>> split_composits(WordEntry(u'Blockheizkraftwerk;Block===heiz==kraft=werk')) +# [u'Block', u'heiz', u'kraft', u'werk'] +# +# :: + +def split_composits(entry): + return [w for w in entry[1].split(u'=') if w] # Zerlege String, wenn die Teile in der Wortliste vorhanden sind, setze # sie neu zusammen und übernehme die Trennmarkierer: @@ -695,7 +707,7 @@ def trenne_key(key, grossklein = False): continue entry = WordEntry(key) for w1, w2 in zip(e1,e2)[1:]: - if w1.startswith(u'-'): + if w1.startswith(u'-'): # empty column -2-, -3-, ... wort = w1 elif w2.startswith(u'-'): wort = w2 @@ -710,6 +722,16 @@ def trenne_key(key, grossklein = False): entry.append(wort) entry.conflate_fields() entries.append(entry) + # Teste auf 3-teilige Composita und entferne die Wichtung: + # ['Kau==zahn=weh', 'Kau=zahn=weh'] -> ['Kau=zahn=weh'] + if len(entries) == 2: + teile = [split_composits(entry) for entry in entries] + if teile[0] == teile[1]: + level = 1 + while level*sep in teile[0]: + level += 1 + entries = [entries[0]] + entries[0][1] = entries[0][1].replace((level+1)*sep, level*sep) return entries @@ -723,6 +745,10 @@ def filter_neuliste(neuwortdatei, words): neukey = line.split(u';')[0] if neukey in words: print 'vorhanden:', line + elif neukey.title() in words: + print 'Vorhanden:', line + elif neukey.lower() in words: + print 'vorhanden (kleingeschrieben):', line else: neue.append(line) return neue diff --git a/skripte/python/prepare_patch.py b/skripte/python/prepare_patch.py index 851976a..8aeb050 100755 --- a/skripte/python/prepare_patch.py +++ b/skripte/python/prepare_patch.py @@ -328,7 +328,7 @@ def neu(wordfile, datei): continue # Eintrag ggf. komplettieren: if u';' not in line: - line = u's%;s%' % (join_word(line), line) + line = u'%s;%s' % (join_word(line), line) entry = WordEntry(line) key = entry[0] # Test auf "Neuwert": diff --git a/skripte/python/s2long-s.py b/skripte/python/s2long-s.py index c6ddc33..6894b97 100755 --- a/skripte/python/s2long-s.py +++ b/skripte/python/s2long-s.py @@ -74,7 +74,7 @@ def s_ersetzen(word): # (gilt auch für ungetrenntes ss zwischen Selbstlauten, z.B. Hausse, Baisse):: word = re.sub(ur'([AEIOUYÄÖÜaeiouäöüé])s([aeiouyäöüé])', ur'\1ſ\2', word) - word = re.sub(ur'([AEIOUYÄÖÜaeiouäöüé])ss([aeiouyäöüé])', ur'\1ſſ\2', word) + word = re.sub(ur'([AEIOUYÄÖÜaeiouäöüé])ss([aeiouyäöüés])', ur'\1ſſ\2', word) # ſ steht in den Verbindungen sp, st, sch und in Digraphen:: @@ -87,7 +87,7 @@ def s_ersetzen(word): word = re.sub(ur'^ps', ur'pſ', word) # ψ (ps am Wortanfang) word = re.sub(ur'([-<>=·.])ps', ur'\1pſ', word) # ψ (ps am Silbenanfang) - word = word.replace(u'ſsſt', u'ſſſt') # Pssst! + # word = word.replace(u'ſsſt', u'ſſſt') # Pssst! # ſ vor Trennstellen # ~~~~~~~~~~~~~~~~~~ @@ -302,14 +302,15 @@ def is_complete(word): # Angabe der Sprachvariante nach [BCP47]_ (Reformschreibung 'de' oder 'de-1996', # Schweiz 'de-CH', ...) -sprachvariante = 'de-1901' +sprachtag = 'de-1901' # Für gebrochene Schriften gibt es den ISO Sprachtag # # :Latf: Latin (Fraktur variant) # -# also "Lateinisches Alphabet, gebrochen". Wir hätten dann "de-1901-Latf". - +# also "Lateinisches Alphabet, gebrochen". Wir hätten dann "de-1901-Latf" und +# "de-1996-Latf" +# http://www.unicode.org/iso15924/iso15924-codes.html # Kategorien # ---------- @@ -344,7 +345,7 @@ offen = [] for entry in wordfile: - word = entry.get(sprachvariante) # Wort mit Trennstellen + word = entry.get(sprachtag) # Wort mit Trennstellen if word is None: # Wort existiert nicht in der Sprachvariante continue @@ -372,7 +373,7 @@ for entry in wordfile: completed.append(join_word(word)) continue - entry.set(word, sprachvariante) # Rückschreiben von teilweisen Ersetzungen + entry.set(word, sprachtag) # Rückschreiben von teilweisen Ersetzungen if word.find(u's·') != -1: ungewichtet.append(entry) @@ -385,7 +386,7 @@ for entry in wordfile: # # Wortliste mit automatisch bestimmter S-Schreibung, ohne Trennstellen:: -completed_file = file('wortliste-lang-s', 'w') +completed_file = file('words-' + sprachtag + 'Latf.txt', 'w') completed_file.write(u'\n'.join(completed).encode('utf8') + '\n') # Auswertung diff --git a/skripte/python/werkzeug.py b/skripte/python/werkzeug.py index fc8015e..c4d627f 100755 --- a/skripte/python/werkzeug.py +++ b/skripte/python/werkzeug.py @@ -162,8 +162,9 @@ class WordEntry(list): # eventuell vorhandenen Kommentar abtrennen und speichern:: if '#' in line: - line, self.comment = line.split('#') - line = line.rstrip() + line = line.split(u'#') + self.comment = u'#'.join(line[1:]) + line = line[0].rstrip() # Zerlegen in Datenfelder, in Liste eintragen:: -- 2.11.4.GIT