Faker Klasse um Fake-Daten zu generieren
This commit is contained in:
parent
1260a38bb7
commit
c92a4517b3
|
@ -2,8 +2,6 @@ package schule.ngb.zm.util;
|
|||
|
||||
import schule.ngb.zm.Color;
|
||||
import schule.ngb.zm.Constants;
|
||||
import schule.ngb.zm.Zeichenmaschine;
|
||||
import schule.ngb.zm.util.io.FileLoader;
|
||||
import schule.ngb.zm.util.io.ImageLoader;
|
||||
|
||||
import java.awt.Font;
|
||||
|
@ -11,46 +9,69 @@ import java.awt.FontMetrics;
|
|||
import java.awt.Graphics2D;
|
||||
import java.awt.font.LineMetrics;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.lang.reflect.Array;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static java.lang.Math.exp;
|
||||
import static java.lang.Math.log;
|
||||
import static schule.ngb.zm.Constants.random;
|
||||
|
||||
/**
|
||||
* Hilfsklasse, um zufällige Beispieldaten zu erzeugen.
|
||||
* <p>
|
||||
* Die Klasse kann verschiedene Arten realistischer Beispieldaten erzeugen,
|
||||
* unter anderem Namen, E-Mail-Adressen, Passwörter oder Platzhalterbilder.
|
||||
* unter anderem Namen, E-Mail-Adressen, Passwörter oder Platzhalter-Bilder.
|
||||
*/
|
||||
@SuppressWarnings( "unused" )
|
||||
public final class Faker {
|
||||
|
||||
public static final String FAKE_IMG_URL = "https://loremflickr.com/%d/%d";
|
||||
|
||||
public static void main( String[] args ) {
|
||||
String text = Faker.fakeText(2000, 8);
|
||||
System.out.println(text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger Nutzernamen.
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger Benutzerdaten.
|
||||
* <p>
|
||||
* Jeder Datensatz besteht aus einem String-Array mit den folgenden Daten
|
||||
* <ul>
|
||||
* <li><code>fakeUser[i][0]</code>: Vorname</li>
|
||||
* <li><code>fakeUser[i][1]</code>: Nachname</li>
|
||||
* <li><code>fakeUser[i][2]</code>: Geschlecht</li>
|
||||
* <li><code>fakeUser[i][3]</code>: Nutzername</li>
|
||||
* <li><code>fakeUser[i][4]</code>: Passwort</li>
|
||||
* <li><code>fakeUser[i][5]</code>: E-Mail</li>
|
||||
* <li><code>fakeUser[i][6]</code>: Geburtsdatum</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param n Anzahl der Beispieldaten.
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static String[][] fakeUsers( int n ) {
|
||||
String[][] data = loadMockfile("users");
|
||||
String[][] result = new String[n][];
|
||||
for( int i = 0; i < n; i++ ) {
|
||||
result[i] = Constants.choice(data);
|
||||
}
|
||||
return result;
|
||||
public static String[][] fakeUsers( int count ) {
|
||||
return randomSample("users", count, ( line ) -> line.split(","), String[].class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger Vornamen.
|
||||
*
|
||||
* @param n Anzahl der Beispieldaten.
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static String[] fakeNames( int n ) {
|
||||
String[][] data = loadMockfile("users");
|
||||
String[] result = new String[n];
|
||||
for( int i = 0; i < n; i++ ) {
|
||||
String[] row = Constants.choice(data);
|
||||
result[i] = row[0];
|
||||
}
|
||||
return result;
|
||||
public static String[] fakeNames( int count ) {
|
||||
return randomSample("users", count, ( line ) -> line.split(",")[0], String.class);
|
||||
}
|
||||
|
||||
|
||||
|
@ -58,65 +79,187 @@ public final class Faker {
|
|||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger Namen (Vor- und
|
||||
* Nachname).
|
||||
*
|
||||
* @param n Anzahl der Beispieldaten.
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static String[] fakeFullnames( int n ) {
|
||||
String[][] data = loadMockfile("users");
|
||||
String[] result = new String[n];
|
||||
for( int i = 0; i < n; i++ ) {
|
||||
String[] row = Constants.choice(data);
|
||||
result[i] = row[0] + " " + row[1];
|
||||
}
|
||||
return result;
|
||||
public static String[] fakeFullnames( int count ) {
|
||||
return randomSample("users", count, ( line ) -> {
|
||||
String[] parts = line.split(",");
|
||||
return parts[0] + " " + parts[1];
|
||||
}, String.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger Nutzernamen.
|
||||
*
|
||||
* @param n Anzahl der Beispieldaten.
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static String[] fakeUsernames( int n ) {
|
||||
String[][] data = loadMockfile("users");
|
||||
String[] result = new String[n];
|
||||
for( int i = 0; i < n; i++ ) {
|
||||
String[] row = Constants.choice(data);
|
||||
result[i] = row[3];
|
||||
}
|
||||
return result;
|
||||
public static String[] fakeUsernames( int count ) {
|
||||
return randomSample("users", count, ( line ) -> line.split(",")[3], String.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger Passwörter.
|
||||
*
|
||||
* @param n Anzahl der Beispieldaten.
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static String[] fakePasswords( int n ) {
|
||||
String[][] data = loadMockfile("users");
|
||||
String[] result = new String[n];
|
||||
for( int i = 0; i < n; i++ ) {
|
||||
String[] row = Constants.choice(data);
|
||||
result[i] = row[4];
|
||||
}
|
||||
return result;
|
||||
public static String[] fakePasswords( int count ) {
|
||||
return randomSample("users", count, ( line ) -> line.split(",")[4], String.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger E-Mail-Adressen.
|
||||
*
|
||||
* @param n Anzahl der Beispieldaten.
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static String[] fakeEmails( int n ) {
|
||||
String[][] data = loadMockfile("users");
|
||||
String[] result = new String[n];
|
||||
for( int i = 0; i < n; i++ ) {
|
||||
String[] row = Constants.choice(data);
|
||||
result[i] = row[5];
|
||||
public static String[] fakeEmails( int count ) {
|
||||
return randomSample("users", count, ( line ) -> line.split(",")[5], String.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger deutscher
|
||||
* Wörter.
|
||||
*
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static String[] fakeStrings( int count ) {
|
||||
return randomSample("words", count, ( line ) -> line, String.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erzeugt ein Array mit den angegebenen Anzahl zufälliger
|
||||
* {@code Date}-Objekte.
|
||||
*
|
||||
* @param count Anzahl der Beispieldaten.
|
||||
* @return Ein Array mit den Beispieldaten.
|
||||
*/
|
||||
public static LocalDate[] fakeDates( int count ) {
|
||||
long nowEpoch = LocalDate.now().toEpochDay();
|
||||
long from = LocalDate.ofEpochDay(nowEpoch - 18 * 365).toEpochDay();
|
||||
long to = LocalDate.ofEpochDay(nowEpoch - 14 * 365).toEpochDay();
|
||||
|
||||
LocalDate[] result = new LocalDate[count];
|
||||
for( int i = 0; i < count; i++ ) {
|
||||
result[i] = LocalDate.ofEpochDay((int) Constants.interpolate(from, to, random()));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static LocalDateTime[] fakeDatetimes( int count ) {
|
||||
long nowEpoch = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
|
||||
long from = LocalDateTime.ofEpochSecond(nowEpoch - 18 * 365, 0, ZoneOffset.UTC).toEpochSecond(ZoneOffset.UTC);
|
||||
long to = LocalDateTime.ofEpochSecond(nowEpoch - 14 * 365, 0, ZoneOffset.UTC).toEpochSecond(ZoneOffset.UTC);
|
||||
|
||||
LocalDateTime[] result = new LocalDateTime[count];
|
||||
for( int i = 0; i < count; i++ ) {
|
||||
result[i] = LocalDateTime.ofEpochSecond((int) Constants.interpolate(from, to, random()), 0, ZoneOffset.UTC);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static String fakeText( int words, int paragraphs ) {
|
||||
String basetext = "";
|
||||
try(
|
||||
InputStream in = Faker.class.getResourceAsStream("mock-text.txt");
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in))
|
||||
) {
|
||||
basetext = reader.readLine();
|
||||
} catch( IOException ex ) {
|
||||
LOG.error(ex, "Error generating fake blindtext: " + ex.getMessage());
|
||||
}
|
||||
|
||||
String result = basetext.repeat(words / 283);
|
||||
|
||||
int w = (words % 283);
|
||||
if( w > 0 ) {
|
||||
Matcher m = Pattern.compile("([a-zA-Z_0-9\\u00C0-\\u017F]+\\W+){" + w + "}").matcher(basetext);
|
||||
if( m.find() ) {
|
||||
result += m.group().stripTrailing();
|
||||
}
|
||||
}
|
||||
|
||||
if( paragraphs > 1 ) {
|
||||
int half = words / paragraphs;
|
||||
final int maxLength = result.length();
|
||||
Matcher m = Pattern.compile("([a-zA-Z_0-9\\u00C0-\\u017F]+\\W+){" + (half - 10) + "," + (half + 10) + "}([a-zA-Z_0-9\\u00C0-\\u017F]+)\\.").matcher(result);
|
||||
if( m.find() ) {
|
||||
result = m.replaceAll(( mr ) -> mr.end() == maxLength ? mr.group().trim() : mr.group().trim() + "\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int[] fakeIntArray( int count, int min, int max ) {
|
||||
int[] arr = new int[count];
|
||||
for( int i = 0; i < count; i++ ) {
|
||||
arr[i] = random(min, max);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
public static List<Integer> fakeIntegerList( int count, int min, int max, List<Integer> list ) {
|
||||
if( list == null ) {
|
||||
list = new ArrayList<>(count);
|
||||
}
|
||||
for( int i = 0; i < count; i++ ) {
|
||||
list.add(random(min, max));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "unchecked" )
|
||||
private static <T> T[] randomSample( String filename, int count, Function<String, T> transformer, Class<T> type ) {
|
||||
T[] result = (T[]) Array.newInstance(type, count);
|
||||
|
||||
int i = 0;
|
||||
double k = count; // cast to double
|
||||
|
||||
double W = exp(log(random()) / k);
|
||||
|
||||
try(
|
||||
InputStream in = Faker.class.getResourceAsStream("mock-" + filename + ".csv");
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in))
|
||||
) {
|
||||
String line;
|
||||
while( (line = reader.readLine()) != null ) {
|
||||
if( i < count ) {
|
||||
result[i] = transformer.apply(line);
|
||||
i += 1;
|
||||
} else {
|
||||
int j = (int) (log(random()) / log(1 - W)) + 1;
|
||||
while( j > 0 ) {
|
||||
line = reader.readLine();
|
||||
j -= 1;
|
||||
}
|
||||
|
||||
if( line != null ) {
|
||||
result[random(0, count - 1)] = transformer.apply(line);
|
||||
i += 1;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
W *= exp(log(random()) / k);
|
||||
}
|
||||
}
|
||||
|
||||
// Fill remaining array
|
||||
while( i < count ) {
|
||||
result[i] = result[random(0, i - 1)];
|
||||
i += 1;
|
||||
}
|
||||
} catch( IOException ex ) {
|
||||
LOG.error(ex, "Error loading mock data file: " + ex.getMessage());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -165,7 +308,7 @@ public final class Faker {
|
|||
FontMetrics fontMerics = graphics.getFontMetrics();
|
||||
LineMetrics lineMetrics = fontMerics.getLineMetrics(text, graphics);
|
||||
graphics.drawString(text,
|
||||
(int) ((width - fontMerics.stringWidth(text)) / 2),
|
||||
(width - fontMerics.stringWidth(text)) / 2,
|
||||
(int) (height / 2 - lineMetrics.getDescent() + lineMetrics.getAscent() / 2)
|
||||
);
|
||||
graphics.dispose();
|
||||
|
@ -176,15 +319,9 @@ public final class Faker {
|
|||
}
|
||||
}
|
||||
|
||||
public static String fakeText( int words, int paragraphs ) {
|
||||
return "";
|
||||
}
|
||||
|
||||
private static String[][] loadMockfile( String name ) {
|
||||
return FileLoader.loadCsv("schule/ngb/zm/util/mock-" + name + ".csv", true);
|
||||
}
|
||||
|
||||
private Faker() {
|
||||
}
|
||||
|
||||
private static final Log LOG = Log.getLogger(Faker.class);
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht - ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort "und" und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch.
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,949 @@
|
|||
Abbau
|
||||
Abend
|
||||
Abzug
|
||||
Adler
|
||||
Adolf
|
||||
Agent
|
||||
Akten
|
||||
Aktie
|
||||
Alarm
|
||||
Album
|
||||
Allee
|
||||
Alpen
|
||||
Ampel
|
||||
Amtes
|
||||
Anbau
|
||||
Angst
|
||||
Anruf
|
||||
Anton
|
||||
Anzug
|
||||
Apple
|
||||
April
|
||||
Areal
|
||||
Arena
|
||||
Armee
|
||||
Armut
|
||||
Arten
|
||||
Asien
|
||||
Athen
|
||||
Augen
|
||||
Autor
|
||||
Autos
|
||||
Baden
|
||||
Bande
|
||||
Bands
|
||||
Basel
|
||||
Basis
|
||||
Bauch
|
||||
Bauer
|
||||
Bayer
|
||||
Beate
|
||||
Beide
|
||||
Beine
|
||||
Beleg
|
||||
Bernd
|
||||
Beruf
|
||||
Beste
|
||||
Beton
|
||||
Beute
|
||||
Bevor
|
||||
Bezug
|
||||
Bibel
|
||||
Bitte
|
||||
Blatt
|
||||
Blick
|
||||
Block
|
||||
Blues
|
||||
Bogen
|
||||
Bombe
|
||||
Boris
|
||||
Brand
|
||||
Braun
|
||||
Brief
|
||||
Bruch
|
||||
Bruno
|
||||
Brust
|
||||
Buben
|
||||
Buche
|
||||
Busse
|
||||
Bäume
|
||||
Böden
|
||||
Börse
|
||||
Bühne
|
||||
Büros
|
||||
Chaos
|
||||
Chefs
|
||||
Chile
|
||||
China
|
||||
Clubs
|
||||
Coach
|
||||
Daher
|
||||
Damen
|
||||
Daran
|
||||
Darum
|
||||
Datei
|
||||
Daten
|
||||
Datum
|
||||
Dauer
|
||||
David
|
||||
Davon
|
||||
Decke
|
||||
Deren
|
||||
Diana
|
||||
Dinge
|
||||
Donau
|
||||
Doris
|
||||
Drama
|
||||
Dreck
|
||||
Druck
|
||||
Duell
|
||||
Durch
|
||||
Ecken
|
||||
Edith
|
||||
Eiern
|
||||
Eisen
|
||||
Elite
|
||||
Engel
|
||||
Enkel
|
||||
Erbin
|
||||
Erich
|
||||
Erika
|
||||
Erlös
|
||||
Ernst
|
||||
Erste
|
||||
Erwin
|
||||
Essen
|
||||
Ethik
|
||||
Fahne
|
||||
Fahrt
|
||||
Falls
|
||||
Farbe
|
||||
Faust
|
||||
Fazit
|
||||
Feier
|
||||
Feind
|
||||
Felix
|
||||
Ferne
|
||||
Feuer
|
||||
Figur
|
||||
Filme
|
||||
Films
|
||||
Firma
|
||||
Fisch
|
||||
Flüge
|
||||
Focus
|
||||
Folge
|
||||
Fonds
|
||||
Forum
|
||||
Fotos
|
||||
Foyer
|
||||
Franc
|
||||
Frank
|
||||
Franz
|
||||
Frist
|
||||
Fritz
|
||||
Front
|
||||
Frust
|
||||
Fuchs
|
||||
Fulda
|
||||
Fälle
|
||||
Fülle
|
||||
Füßen
|
||||
Geben
|
||||
Gebot
|
||||
Gehen
|
||||
Gehör
|
||||
Geist
|
||||
Georg
|
||||
Gerda
|
||||
Gerät
|
||||
Geste
|
||||
Glanz
|
||||
Glück
|
||||
Gnade
|
||||
Gramm
|
||||
Griff
|
||||
Group
|
||||
Grund
|
||||
Grüne
|
||||
Gunst
|
||||
Gutes
|
||||
Gäste
|
||||
Güter
|
||||
Haare
|
||||
Haars
|
||||
Hafen
|
||||
Halle
|
||||
Hanau
|
||||
Handy
|
||||
Harry
|
||||
Hauch
|
||||
Hause
|
||||
Hebel
|
||||
Heike
|
||||
Heims
|
||||
Heinz
|
||||
Helga
|
||||
Henry
|
||||
Herrn
|
||||
Hilfe
|
||||
Hitze
|
||||
Horst
|
||||
Hosen
|
||||
Hotel
|
||||
Huber
|
||||
Humor
|
||||
Hunde
|
||||
Hände
|
||||
Härte
|
||||
Hätte
|
||||
Höhen
|
||||
Hölle
|
||||
Hörer
|
||||
Hügel
|
||||
Hürde
|
||||
Hütte
|
||||
Ideen
|
||||
Image
|
||||
Index
|
||||
Indiz
|
||||
Infos
|
||||
Insel
|
||||
Intel
|
||||
Irene
|
||||
Islam
|
||||
Jahre
|
||||
Jakob
|
||||
James
|
||||
Japan
|
||||
Jeans
|
||||
Jesus
|
||||
Josef
|
||||
Jubel
|
||||
Juden
|
||||
Julia
|
||||
Jungs
|
||||
Jutta
|
||||
Jäger
|
||||
Kabel
|
||||
Kabul
|
||||
Kader
|
||||
Kairo
|
||||
Kampf
|
||||
Kanal
|
||||
Karin
|
||||
Karte
|
||||
Kasse
|
||||
Kenia
|
||||
Kette
|
||||
Kinos
|
||||
Kirch
|
||||
Klage
|
||||
Klaus
|
||||
Klima
|
||||
Klubs
|
||||
Kohle
|
||||
Kohls
|
||||
Konto
|
||||
Kopie
|
||||
Korea
|
||||
Kraft
|
||||
Krebs
|
||||
Kreis
|
||||
Kreml
|
||||
Kreuz
|
||||
Krieg
|
||||
Kripo
|
||||
Krise
|
||||
Krone
|
||||
Krupp
|
||||
Kugel
|
||||
Kunde
|
||||
Kunst
|
||||
Kurse
|
||||
Kurve
|
||||
König
|
||||
Köpfe
|
||||
Küche
|
||||
Kürze
|
||||
Küste
|
||||
Labor
|
||||
Lager
|
||||
Laien
|
||||
Lande
|
||||
Lange
|
||||
Laufe
|
||||
Laune
|
||||
Leder
|
||||
Legen
|
||||
Lehre
|
||||
Leser
|
||||
Leute
|
||||
Licht
|
||||
Linie
|
||||
Linke
|
||||
Liste
|
||||
Liter
|
||||
Logik
|
||||
Lokal
|
||||
Luxus
|
||||
Lyrik
|
||||
Löhne
|
||||
Löwen
|
||||
Lücke
|
||||
Macht
|
||||
Mafia
|
||||
Magen
|
||||
Mainz
|
||||
Major
|
||||
Maler
|
||||
Maria
|
||||
Marie
|
||||
Mario
|
||||
Marke
|
||||
Markt
|
||||
Maske
|
||||
Masse
|
||||
Match
|
||||
Mauer
|
||||
Media
|
||||
Meist
|
||||
Menge
|
||||
Meter
|
||||
Metro
|
||||
Meyer
|
||||
Miami
|
||||
Milch
|
||||
Minen
|
||||
Mitte
|
||||
Monat
|
||||
Moral
|
||||
Motiv
|
||||
Motor
|
||||
Motto
|
||||
Musik
|
||||
Möbel
|
||||
Nacht
|
||||
Nagel
|
||||
Namen
|
||||
Natur
|
||||
Nazis
|
||||
Nebel
|
||||
Netze
|
||||
Noten
|
||||
Ohren
|
||||
Onkel
|
||||
Opfer
|
||||
Orden
|
||||
Organ
|
||||
Orten
|
||||
Oskar
|
||||
Osten
|
||||
Paare
|
||||
Paket
|
||||
Panik
|
||||
Papst
|
||||
Paris
|
||||
Parks
|
||||
Party
|
||||
Pause
|
||||
Pence
|
||||
Peter
|
||||
Petra
|
||||
Pferd
|
||||
Pfund
|
||||
Phase
|
||||
Pilot
|
||||
Platz
|
||||
Polen
|
||||
Preis
|
||||
Prinz
|
||||
Probe
|
||||
Profi
|
||||
Prosa
|
||||
Punkt
|
||||
Quote
|
||||
Rache
|
||||
Radio
|
||||
Rande
|
||||
Rasen
|
||||
Ratte
|
||||
Rauch
|
||||
Regel
|
||||
Regen
|
||||
Regie
|
||||
Reihe
|
||||
Rente
|
||||
Reste
|
||||
Rhein
|
||||
Rolle
|
||||
Roman
|
||||
Route
|
||||
Rover
|
||||
Rubel
|
||||
Russe
|
||||
Räder
|
||||
Römer
|
||||
Sache
|
||||
Sauna
|
||||
Schau
|
||||
Schoß
|
||||
Seele
|
||||
Segen
|
||||
Seite
|
||||
Sekte
|
||||
Senat
|
||||
Seoul
|
||||
Serie
|
||||
Shell
|
||||
Sicht
|
||||
Simon
|
||||
Sinne
|
||||
Smith
|
||||
Songs
|
||||
Sonne
|
||||
Sound
|
||||
Spiel
|
||||
Sport
|
||||
Spree
|
||||
Staat
|
||||
Stadt
|
||||
Stamm
|
||||
Stars
|
||||
Start
|
||||
Stasi
|
||||
Staub
|
||||
Staus
|
||||
Stein
|
||||
Stern
|
||||
Stirn
|
||||
Stock
|
||||
Stoff
|
||||
Story
|
||||
Strom
|
||||
Stufe
|
||||
Stuhl
|
||||
Sturm
|
||||
Sturz
|
||||
Stück
|
||||
Summe
|
||||
Szene
|
||||
Sätze
|
||||
Söhne
|
||||
Süden
|
||||
Tagen
|
||||
Tages
|
||||
Tante
|
||||
Tarif
|
||||
Teams
|
||||
Tempo
|
||||
Tenor
|
||||
Tests
|
||||
Texas
|
||||
Texte
|
||||
Thema
|
||||
These
|
||||
Thron
|
||||
Tiefs
|
||||
Tiere
|
||||
Tiger
|
||||
Tisch
|
||||
Titel
|
||||
Todes
|
||||
Tokio
|
||||
Tonne
|
||||
Toren
|
||||
Traum
|
||||
Treff
|
||||
Trend
|
||||
Trick
|
||||
Trios
|
||||
Trost
|
||||
Typen
|
||||
Täter
|
||||
Tönen
|
||||
Türen
|
||||
Türke
|
||||
UdSSR
|
||||
Uhren
|
||||
Ulmer
|
||||
Umbau
|
||||
Umzug
|
||||
Union
|
||||
Unmut
|
||||
Vater
|
||||
Vetos
|
||||
Video
|
||||
Villa
|
||||
Viren
|
||||
Virus
|
||||
Vogts
|
||||
Votum
|
||||
Vögel
|
||||
Waffe
|
||||
Weber
|
||||
Weile
|
||||
Welle
|
||||
Werke
|
||||
Werks
|
||||
Wesen
|
||||
Wiese
|
||||
Wille
|
||||
Willi
|
||||
Wirte
|
||||
Wirts
|
||||
Witwe
|
||||
Witze
|
||||
Woche
|
||||
Wolke
|
||||
World
|
||||
Worte
|
||||
Wände
|
||||
Wüste
|
||||
Zaire
|
||||
Zeile
|
||||
Zelle
|
||||
Zeugs
|
||||
Ziels
|
||||
Zitat
|
||||
Zorns
|
||||
Zunge
|
||||
Zweck
|
||||
Zähne
|
||||
Zügen
|
||||
ahnen
|
||||
ahnst
|
||||
aktiv
|
||||
allem
|
||||
allen
|
||||
aller
|
||||
alles
|
||||
allzu
|
||||
altem
|
||||
alten
|
||||
altes
|
||||
angab
|
||||
armen
|
||||
außen
|
||||
außer
|
||||
bauen
|
||||
baute
|
||||
bekam
|
||||
berge
|
||||
berät
|
||||
besaß
|
||||
bezog
|
||||
biete
|
||||
birgt
|
||||
blaue
|
||||
blieb
|
||||
blind
|
||||
bloße
|
||||
boten
|
||||
brach
|
||||
breit
|
||||
bunte
|
||||
bösen
|
||||
dabei
|
||||
dafür
|
||||
dahin
|
||||
damit
|
||||
darin
|
||||
davor
|
||||
deine
|
||||
denen
|
||||
denke
|
||||
denkt
|
||||
derer
|
||||
desto
|
||||
dicht
|
||||
dicke
|
||||
dient
|
||||
diese
|
||||
drauf
|
||||
dreht
|
||||
drohe
|
||||
droht
|
||||
dürfe
|
||||
ebene
|
||||
echte
|
||||
ehren
|
||||
eigen
|
||||
einem
|
||||
einen
|
||||
einer
|
||||
eines
|
||||
einig
|
||||
einst
|
||||
eisig
|
||||
elend
|
||||
enden
|
||||
endet
|
||||
engem
|
||||
engen
|
||||
enger
|
||||
enges
|
||||
enorm
|
||||
erben
|
||||
ergab
|
||||
erhob
|
||||
ernte
|
||||
etwas
|
||||
ewige
|
||||
exakt
|
||||
extra
|
||||
fehle
|
||||
fehlt
|
||||
feine
|
||||
feste
|
||||
finde
|
||||
folgt
|
||||
frage
|
||||
fragt
|
||||
freie
|
||||
fremd
|
||||
freut
|
||||
frühe
|
||||
fähig
|
||||
fällt
|
||||
fängt
|
||||
fügte
|
||||
fühle
|
||||
fühlt
|
||||
führe
|
||||
führt
|
||||
füllt
|
||||
gaben
|
||||
ganze
|
||||
gegen
|
||||
gelbe
|
||||
gelte
|
||||
gemäß
|
||||
genau
|
||||
genug
|
||||
gerne
|
||||
getan
|
||||
geübt
|
||||
ginge
|
||||
gingt
|
||||
glatt
|
||||
graue
|
||||
große
|
||||
gutem
|
||||
guten
|
||||
haben
|
||||
halbe
|
||||
halte
|
||||
heben
|
||||
hebst
|
||||
hefte
|
||||
heiße
|
||||
heißt
|
||||
helle
|
||||
heran
|
||||
herum
|
||||
heuer
|
||||
heute
|
||||
hielt
|
||||
hilft
|
||||
hinzu
|
||||
hoffe
|
||||
hofft
|
||||
hohem
|
||||
hohes
|
||||
holen
|
||||
holte
|
||||
hängt
|
||||
höher
|
||||
hören
|
||||
hörte
|
||||
ideal
|
||||
ihnen
|
||||
ihrem
|
||||
ihren
|
||||
ihrer
|
||||
ihres
|
||||
immer
|
||||
indem
|
||||
indes
|
||||
innen
|
||||
jedem
|
||||
jeden
|
||||
jeder
|
||||
jedes
|
||||
jeher
|
||||
jenem
|
||||
jenen
|
||||
jener
|
||||
jenes
|
||||
jetzt
|
||||
junge
|
||||
kalte
|
||||
kauft
|
||||
kehrt
|
||||
keine
|
||||
kenne
|
||||
kennt
|
||||
klagt
|
||||
klang
|
||||
klare
|
||||
klein
|
||||
knapp
|
||||
komme
|
||||
kommt
|
||||
krank
|
||||
kämen
|
||||
könne
|
||||
lacht
|
||||
laden
|
||||
lagen
|
||||
lasse
|
||||
leben
|
||||
lebte
|
||||
leere
|
||||
legte
|
||||
lehnt
|
||||
lehrt
|
||||
leise
|
||||
lernt
|
||||
lesen
|
||||
liebe
|
||||
liebt
|
||||
liege
|
||||
liegt
|
||||
liest
|
||||
ließe
|
||||
links
|
||||
lobte
|
||||
lockt
|
||||
lohnt
|
||||
lässt
|
||||
läuft
|
||||
lösen
|
||||
löste
|
||||
mache
|
||||
manch
|
||||
meine
|
||||
meint
|
||||
merkt
|
||||
messe
|
||||
miete
|
||||
minus
|
||||
morde
|
||||
mögen
|
||||
müsse
|
||||
nahen
|
||||
neben
|
||||
nebst
|
||||
nehme
|
||||
nennt
|
||||
nette
|
||||
neuem
|
||||
neuen
|
||||
neuer
|
||||
neues
|
||||
nicht
|
||||
nimmt
|
||||
näher
|
||||
nötig
|
||||
nützt
|
||||
obere
|
||||
offen
|
||||
ordne
|
||||
packe
|
||||
packt
|
||||
parat
|
||||
passe
|
||||
passt
|
||||
plane
|
||||
plant
|
||||
prüfe
|
||||
prüft
|
||||
quasi
|
||||
rasch
|
||||
raten
|
||||
reale
|
||||
recht
|
||||
reden
|
||||
redet
|
||||
reich
|
||||
reine
|
||||
reise
|
||||
reist
|
||||
rollt
|
||||
rotem
|
||||
roten
|
||||
roter
|
||||
rotes
|
||||
rufen
|
||||
ruhen
|
||||
ruhig
|
||||
runde
|
||||
räume
|
||||
räumt
|
||||
rückt
|
||||
sagen
|
||||
sagte
|
||||
sahen
|
||||
sanft
|
||||
satte
|
||||
sauer
|
||||
saßen
|
||||
schuf
|
||||
schön
|
||||
sechs
|
||||
sehen
|
||||
seien
|
||||
seine
|
||||
sende
|
||||
setze
|
||||
setzt
|
||||
siege
|
||||
siehe
|
||||
sieht
|
||||
singt
|
||||
sinkt
|
||||
sitze
|
||||
sitzt
|
||||
sogar
|
||||
solch
|
||||
solle
|
||||
sollt
|
||||
somit
|
||||
sonst
|
||||
sorge
|
||||
sorgt
|
||||
sowie
|
||||
spare
|
||||
spart
|
||||
spitz
|
||||
späte
|
||||
spürt
|
||||
stahl
|
||||
stand
|
||||
starb
|
||||
stark
|
||||
statt
|
||||
stehe
|
||||
steht
|
||||
stets
|
||||
stich
|
||||
stieg
|
||||
stieß
|
||||
still
|
||||
stolz
|
||||
stoße
|
||||
stört
|
||||
stößt
|
||||
suche
|
||||
sucht
|
||||
tanze
|
||||
tanzt
|
||||
taten
|
||||
teile
|
||||
teils
|
||||
teilt
|
||||
teuer
|
||||
teure
|
||||
tiefe
|
||||
tolle
|
||||
total
|
||||
totem
|
||||
toter
|
||||
totes
|
||||
traue
|
||||
traut
|
||||
treue
|
||||
trieb
|
||||
trink
|
||||
tritt
|
||||
trotz
|
||||
träge
|
||||
trägt
|
||||
tätig
|
||||
töten
|
||||
tötet
|
||||
unser
|
||||
unten
|
||||
unter
|
||||
vagem
|
||||
vagen
|
||||
vager
|
||||
vages
|
||||
viele
|
||||
volle
|
||||
vorab
|
||||
voran
|
||||
vorne
|
||||
wagen
|
||||
wahre
|
||||
waren
|
||||
warnt
|
||||
warst
|
||||
warte
|
||||
warum
|
||||
wecke
|
||||
weckt
|
||||
weder
|
||||
wegen
|
||||
wehre
|
||||
wehrt
|
||||
weich
|
||||
weist
|
||||
weite
|
||||
weiße
|
||||
welch
|
||||
wende
|
||||
wenig
|
||||
werbe
|
||||
werde
|
||||
werte
|
||||
wider
|
||||
widme
|
||||
wiegt
|
||||
wilde
|
||||
wirbt
|
||||
wirft
|
||||
wirke
|
||||
wirkt
|
||||
wisse
|
||||
wobei
|
||||
wofür
|
||||
woher
|
||||
wohin
|
||||
wohne
|
||||
wohnt
|
||||
wolle
|
||||
womit
|
||||
wovon
|
||||
wuchs
|
||||
wunde
|
||||
wurde
|
||||
wähle
|
||||
wählt
|
||||
wärme
|
||||
zahle
|
||||
zeige
|
||||
zeigt
|
||||
zeuge
|
||||
zieht
|
||||
ziele
|
||||
zielt
|
||||
zivil
|
||||
zogen
|
||||
zudem
|
||||
zumal
|
||||
zuvor
|
||||
zwang
|
||||
zwölf
|
||||
zählt
|
||||
zügig
|
||||
Ämter
|
||||
Ärger
|
||||
Ärzte
|
||||
Übung
|
||||
älter
|
||||
öffne
|
||||
öfter
|
||||
übrig
|
||||
übten
|
|
Loading…
Reference in New Issue