I wrote a little Python script (see below) to find candidate words. It takes a dictionary and yields all uppercase words that end on ung unless:
- there exists a corresponding lowercase word ending on en, eln, or ern. For example bergen → Bergung, kapseln → Kapselung, mitteln → Mittlung, weigern → Weigerung. The presumed verb must at least have five letters to avoid false negatives due to such words as den, gen, wen, etc.
- the word is longer than 10 letters and end on ierung (to exclude false positives such as Balkanisierung or Hierarchisierung);
- removing three or more characters from the beginning results in a match according to the first point or another dictionary word ending on ung (to exclude false positives originating from composites).
That match must at least have five letters to avoid false negatives because of words like Dung.
As pointed out by this answer, this script has false negatives such as Innung, which is not found because of the adverb innen.
(Though in this case the origin is a verb innen, which is not in use anymore.)
This gives you 94 candidates, namely:
Abforstung,
Abgeltung,
Abhandlung,
Abhärtung,
Abplattung,
Abschwung,
Absprung,
Alarmübung,
Angriffsübung,
Anwandelung,
Anwandlung,
Atemübung,
Atomversuchsübung,
Aufwärmübung,
Ausgasung,
Bedachung,
Bedüsung,
Behaarung,
Beköstigung,
Beplankung,
Bereifung,
Beriemung,
Besatzung,
Bestuhlung,
Böschung,
Deckelung,
Diktatübung,
Dung,
Eisprung,
Entvölkerung,
Erbitterung,
Ertüchtigung,
Fingerübung,
Firmung,
Fleckung,
Gattung,
Gefechtsübung,
Gemarkung,
Genugtuung,
Gesittung,
Halterung,
Häutung,
Hoffnung,
Höhlung,
Hydrierung,
Kaperung,
Körnung,
Kröpfung,
Laibung,
Legierung,
Markung,
Maserung,
Nahrung,
Normung,
Nutznießung,
Ölbohrung,
Ölheizung,
Ölleitung,
Ölrechnung,
Ölung,
Pflichtübung,
Planierung,
Polung,
Protektorung,
Quittung,
Rötung,
Samsung,
Satzung,
Schlafzimmerübung,
Schwung,
Sprung,
Stallung,
Stilübung,
Stundung,
Teuerung,
Truppenübung,
Überhöhung,
Übung,
Umdeutung,
Umeichung,
Umschwung,
Unbildung,
Unordnung,
Unzahlung,
Urbevölkerung,
Urfassung,
Ursprung,
Verstädterung,
Vorübung,
Waldung,
Wehrübung,
Zeitung,
Zinkung, and
Zulieferung
We can now manually exclude obvious false positives that are not feminine or where the corresponding verb exists but is irregular, short, archaic, etc.
This leaves us with:
- Laibung, for which I fail to find anything about its origin.
- Waldung, whose origin is somewhat unclear but does not appear to be a verb.
(This was first mentioned by this answer, which made me find an problem with my script.)
- Zeitung, which originates from an ancient verb according to Grimm’s Dictionary (as pointed out by David Vogt).
- Satzung, which originates from an ancient verb according to Grimm’s Dictionary
- Markung, which originates from the archaic verb marken.
- Fleckung, which originates from the archaic verb flecken.
- Quittung, which originates from quittieren or its predecessors (frz. quitter). It’s a bit odd that it’s not Quittierung, but here I would suspect that the ier was added to the verb (as opposed to being omitted from the noun) since quitten would not work so well as a verb in German.
- Protektorung, which seems to be a bug in the dictionary, because I cannot find any usage that does not seem like an accident on the Internet.
The script
This requires Python 3.8 and Aspell:
import subprocess
dictionary_process = subprocess.Popen(
"aspell -l de dump master | aspell -l de expand",
shell = True,
stdout = subprocess.PIPE,
encoding = "utf-8"
)
unged_verbs = set()
ungs = set()
while line := dictionary_process.stdout.readline():
for word in line.split():
if len(word)>=5 and word[0].islower():
if word.endswith("en"):
unged_verbs.add( word[:-2].title()+"ung" )
if word.endswith("eln"):
unged_verbs.add( word[:-3].title()+"lung" )
unged_verbs.add( word[:-1].title()+"ung" )
if word.endswith("ern"):
unged_verbs.add( word[:-1].title()+"ung" )
elif word[0].isupper() and word.endswith("ung"):
ungs.add(word)
all_ungs = unged_verbs|ungs
for candidate in ungs-unged_verbs:
if candidate.endswith("ierung") and len(candidate)>10:
continue
for i in range(3,len(candidate)-5):
if candidate[i:].title() in all_ungs:
break
else:
print(candidate)