Verben im Glossarium-System
Überblick
Verben bilden eine der zentralen Wortarten im Glossarium-System von Hermeneus. Das Verb-Model (App\Models\Verb) erweitert die abstrakte Basisklasse Vocab und implementiert die vollständige lateinische Verbmorphologie mit allen Tempora, Modi, Genera (Aktiv/Passiv) sowie Partizipien, Gerundium, Gerundiv und Supin.
Das Verb-System unterstützt:
- Alle fünf Konjugationsklassen (a, e, i, k, ki)
- Deponentien und Semideponentien
- Perfektopräsentia
- Anomalia (unregelmäßige Verben wie esse, posse, ferre, velle, ire)
- Defectiva und Impersonalia
- Automatische und manuelle Morphologisierung
- PPP (Partizip Perfekt Passiv) und PFA (Partizip Futur Aktiv)
Model: app\Models\Verb.phpMorpher: app\Morpher\VerbMorpher.phpTabelle: glossarium_verbenRoute-Name: verben
Datenbankfelder
Basisfelder (von Vocab geerbt)
| Feld | Typ | Beschreibung |
|---|---|---|
id | int | Primärschlüssel |
created_at | timestamp | Erstellungszeitpunkt |
updated_at | timestamp | Letzter Änderungszeitpunkt |
deleted_at | timestamp | Soft-Delete-Zeitpunkt (nullable) |
created_by_id | int | Foreign Key zu users.id (nullable) |
updated_by_id | int | Foreign Key zu users.id (nullable) |
Verbspezifische Felder
Grundlegende Identifikation
| Feld | Typ | Beschreibung | Beispielwert |
|---|---|---|---|
lemma | varchar | Grundform (Infinitiv Präsens Aktiv) | accipere |
info | varchar | Zusatzinformation zum Lemma | (mit acc. und inf.) |
bedeutung | varchar | Hauptbedeutung (erforderlich) | annehmen, empfangen |
bedeutungen_alle | text | Alle Bedeutungen als Text | annehmen; empfangen; erhalten; vernehmen |
status | int | Verifikationsstatus (0-2) | 2 (verifiziert) |
Formbildungsfelder (fb_*)
| Feld | Typ | Beschreibung | Beispielwert (accipere) |
|---|---|---|---|
fb_stamm | varchar | Präsensstamm mit Stammauslaut | accipi |
fb_kklasse | enum | Konjugationsklasse | ki |
fb_1pssgpr | varchar | 1. Person Singular Präsens Aktiv | accipio |
fb_1pssgpf | varchar | 1. Person Singular Perfekt Aktiv | accepi |
fb_hat_ppp | int (boolean) | Hat Partizip Perfekt Passiv | 1 |
fb_ppp | varchar | Partizip Perfekt Passiv (Nominativ Singular Neutrum) | acceptum |
fb_hat_pfa | int (boolean) | Hat Partizip Futur Aktiv | 1 |
fb_pfa | varchar | Partizip Futur Aktiv (Nominativ Singular Maskulinum) | accepturus |
fb_ist_deponens | int (boolean) | Ist ein Deponens | 0 |
fb_ist_perfektopraesens | int (boolean) | Ist ein Perfektopräsens | 0 |
Morphologie-Daten
| Feld | Typ | Beschreibung |
|---|---|---|
morph | json | Vollständige Morphologie aller Formen |
morph_mode | int | Morphologisierungsmodus (0 = automatisch, 1 = manuell) |
Erforderliche Felder
Die RequiredFields-Property im Verb-Model definiert folgende Pflichtfelder:
public array $RequiredFields = [
'lemma', // Grundform (Infinitiv)
'fb_stamm', // Präsensstamm
'fb_kklasse', // Konjugationsklasse
'fb_1pssgpr', // 1. Ps. Sg. Präsens
'fb_1pssgpf', // 1. Ps. Sg. Perfekt
'fb_ist_deponens', // Deponens-Flag
'bedeutung' // Hauptbedeutung
];Hinweis: Die Felder fb_hat_ppp und fb_hat_pfa sind nicht zwingend erforderlich, sollten aber bei der Morphologisierung gesetzt werden. Bei Deponentien wird kein PPP benötigt.
Typische Fehler und Hinweise zum Ausfüllen
Beim Anlegen und Pflegen von Verben im Glossarium treten häufig Fehler auf, die zu fehlerhaften morphologischen Formen führen. Die folgende Tabelle zeigt typische Fehlerquellen und wie sie vermieden werden können.
| Feld | Typischer Fehler | Auswirkung | Richtig | Hinweis |
|---|---|---|---|---|
lemma | Großschreibung: "Convocare" | Falsche Sortierung im Wörterbuch, Suchprobleme | convocare | Lemma immer kleinschreiben, außer bei Eigennamen (z.B. "Romanus") |
lemma | Doppelte Einträge: "adquirere" und "acquirere" separat angelegt | Datenredundanz, verschiedene Morphologien für gleiche Bedeutung | Hauptlemma: acquirere, zweiter Eintrag mit Verweis oder als Schreibvariante markieren | Bei Schreibvarianten sollte ein Haupteintrag definiert werden |
lemma | Inkonsistente Schreibweise bei Variantenschreibung | Suchfunktion findet nicht alle Treffer | Hauptform bevorzugen (z.B. "quaerere" statt "querere") | In info-Feld kann auf Varianten hingewiesen werden |
fb_stamm | Falscher Stamm bei i-Konjugation: "cap" statt "capi" bei capere | Falsche Formen: "capo", "capis" statt "capio", "capis" | capi | Bei ki-Konjugation den Stamm MIT i-Erweiterung angeben |
fb_stamm | Stamm mit Personalendung: "capi-o" | Parser-Fehler, doppelte Endungen: "capio-mus" | capi (ohne -o) | Der Stamm darf KEINE Personalendung enthalten |
fb_stamm | Perfektstamm statt Präsensstamm: "cep" bei capere | Alle Präsensformen falsch | capi | Immer den Präsensstamm verwenden, nicht den Perfektstamm |
fb_stamm | Fehlendes -i bei konsonantischen Stämmen (ki-Klasse): "accip" statt "accipi" | Fehlende i-Erweiterung in Formen, z.B. "accipmus" statt "accipimus" | accipi | Bei ki-Konjugation immer das stammerweiternde -i angeben |
fb_kklasse | Falsche Konjugationsklasse: capere als "a" statt "ki" | Völlig falsche Konjugation (capo, capas, capat) | ki | Bei Verben auf -ere (kurz) meist ki-Konjugation prüfen |
fb_kklasse | Verwechslung e-/ki-Konjugation: delere als "ki" statt "e" | Falsche Formen im Präsens | e (bei delere) | e-Konjugation: langer Stammvokal (-ēre), ki-Konjugation: kurzer Stammvokal (-ĕre) |
fb_kklasse | i-Konjugation statt ki: capere als "i" | Falsche Stammbildung, fehlende Besonderheiten | ki | i-Konjugation: Verben auf -ire, ki-Konjugation: Verben auf -ere mit i-Erweiterung |
fb_1pssgpr | Falsche Form: "capeo" statt "capio" | Inkorrekte Ableitung aller Präsensformen | capio | Die 1. Person Präsens muss exakt der korrekten lateinischen Form entsprechen |
fb_1pssgpr | Infinitiv statt 1. Person: "capere" | Alle finiten Formen falsch | capio | Nicht den Infinitiv, sondern die 1. Person Singular Indikativ Präsens Aktiv eintragen |
fb_1pssgpf | Perfektstamm statt Perfektform: "cep" statt "cepi" | Keine Perfektmorphologie generierbar | cepi | Die vollständige 1. Person Singular Perfekt Aktiv eintragen, nicht nur den Stamm |
fb_1pssgpf | Präsensform statt Perfekt: "capio" | Perfekt identisch mit Präsens | cepi | Perfekt und Präsens unterscheiden sich fast immer |
fb_1pssgpf | PPP statt Perfekt: "captum" | Falsche Perfektmorphologie | cepi | fb_1pssgpf erwartet die finite 1. Person ("cepi"), nicht das Partizip |
fb_hat_ppp | Auf 1 gesetzt, aber fb_ppp ist leer | Passiv-Perfekt-Formen können nicht generiert werden, System erwartet PPP | fb_hat_ppp = 0 oder PPP eintragen | Wenn kein PPP existiert, fb_hat_ppp auf 0 setzen |
fb_hat_ppp | Auf 0 gesetzt, obwohl PPP existiert | Keine Passiv-Perfekt-Formen, keine esse-Periphrase | fb_hat_ppp = 1 und PPP eintragen | Die meisten Verben haben ein PPP |
fb_ppp | Supinum statt PPP: "captum" (aber als Supinum dekliniert) | PPP muss deklinierbar sein (o/a-Deklination) | captum (als Neutrum der o/a-Dekl.) | PPP = Partizip Perfekt Passiv, Supinum = Verbalsubstantiv |
fb_ppp | Nominativ Maskulinum statt Neutrum: "captus" statt "captum" | Falsche PPP-Deklination | captum (Nom. Sg. Neutrum) | Immer Nom. Sg. Neutrum angeben (Endung -um) |
fb_ppp | Genitiv statt Nominativ: "capti" | Falsche Grundform | captum | Nominativ Singular Neutrum ist die Grundform |
fb_ppp | Infinitiv Perfekt Passiv: "captum esse" | Parser-Fehler | captum | Nur das Partizip, nicht die Periphrase |
fb_ist_deponens | Deponens-Flag falsch bei normalem Verb: amare als Deponens markiert | Nur Passivformen generiert, obwohl Verb aktiv | 0 | Nur echte Deponentien (loqui, sequi, etc.) als Deponens markieren |
fb_ist_deponens | Deponens nicht als Deponens markiert: loqui mit fb_ist_deponens = 0 | Aktiv- und Passivformen generiert, aber Deponens hat nur Passiv | 1 | Deponentien konsequent als solche markieren |
fb_ist_deponens | Semideponens als vollständiges Deponens: audere als fb_ist_deponens = 1 | Falsche Morphologie | 0 (mit spezieller Behandlung) | Semideponentien erfordern differenzierte Behandlung |
fb_pfa | Nominativ Neutrum statt Maskulinum: "capturum" | Falsche PFA-Deklination | capturus (Nom. Sg. Mask.) | PFA = Partizip Futur Aktiv: Nominativ Singular Maskulinum (Endung -urus) |
fb_pfa | Supinum II statt PFA: "captu" | Völlig falsche Form | capturus | PFA ist ein Partizip (-urus), Supinum II ist ein Verbalsubstantiv (-u) |
bedeutung | Inkonsistente Angaben: "lieben, mögen" vs. "lieben; mögen" | Suchprobleme, uneinheitliche Darstellung | Trennzeichen konsistent verwenden (Komma oder Semikolon) | Konvention: Komma für enge Synonyme, Semikolon für verschiedene Bedeutungsfelder |
bedeutung | Zu viele Bedeutungen in Hauptfeld | Unübersichtlichkeit | Hauptbedeutung(en) in bedeutung, alle in bedeutungen_alle | Im bedeutung-Feld maximal 2-3 Kernbedeutungen angeben |
bedeutung | Leer gelassen | Verb nicht nutzbar, Pflichtfeld-Fehler | Mindestens eine Bedeutung eintragen | bedeutung ist ein erforderliches Feld |
| Allgemein | Doppelte Einträge desselben Verbs mit verschiedenen Bedeutungen | Dateninkonsistenz, verwirrende Suchergebnisse | Ein Eintrag mit allen Bedeutungen | Verschiedene Bedeutungen in bedeutungen_alle zusammenfassen |
| Allgemein | Unvollständige Formbildungsfelder | Morphologisierung schlägt fehl | Alle Pflichtfelder ausfüllen | Vor dem Morphologisieren Checkliste durchgehen |
Checkliste vor der Morphologisierung
Vor dem Speichern und Morphologisieren eines Verbs sollten folgende Punkte geprüft werden:
- Lemma klein schreiben (außer bei Eigennamen wie "Romanus")
- Stamm ohne Personalendung (z.B. "capi", nicht "capio")
- Korrekte Konjugationsklasse bestimmen:
- a-Konjugation: -are (laudare)
- e-Konjugation: -ēre lang (monere)
- i-Konjugation: -ire (audire)
- k-Konjugation (konsonantische Konjugation): -ĕre kurz ohne i-Erweiterung (legere → leg)
- ki-Konjugation (konsonantische Konjugation mit i-Erweiterung): -ĕre kurz mit i-Erweiterung (capere → capi) oder -uere (statuere → statu)
- fb_stamm mit Stammauslaut (bei ki-Konjugation immer mit -i: "accipi", nicht "accip")
- fb_1pssgpr: Vollständige 1. Person Sg. Präsens Aktiv (z.B. "capio")
- fb_1pssgpf: Vollständige 1. Person Sg. Perfekt Aktiv (z.B. "cepi", nicht "cep")
- fb_ppp: Nominativ Singular Neutrum (Endung -um, z.B. "captum")
- fb_pfa: Nominativ Singular Maskulinum (Endung -urus, z.B. "capturus")
- fb_hat_ppp und fb_hat_pfa konsistent mit tatsächlich vorhandenen Formen setzen
- fb_ist_deponens nur bei echten Deponentien auf 1 setzen (loqui, sequi, pati, etc.)
- Bedeutung vorhanden und konsistent formatiert
- Keine Duplikate im Glossarium (vor dem Anlegen suchen)
- Schreibvarianten als Verweise oder im info-Feld vermerken
Hinweis: Das Morphologisierungssystem ist darauf angewiesen, dass die Formbildungsfelder präzise und vollständig ausgefüllt sind. Fehler in diesen Feldern führen zu systematisch falschen Formen in allen abgeleiteten Tempora und Modi.
Konjugationsklassen
Der VerbMorpher unterscheidet fünf Konjugationsklassen:
Übersicht
| Klasse | Wert | Stammauslaut | Beispiel | Beschreibung |
|---|---|---|---|---|
| A-Konjugation | a | -a | laudare (lauda-) | Verben auf -are |
| E-Konjugation | e | -e | monere (mone-) | Verben auf -ere (lang) |
| I-Konjugation | i | -i | audire (audi-) | Verben auf -ire |
| Konsonantische Konjugation | k | kons. | legere (leg-) | Verben auf -ere (kurz) ohne i-Erweiterung |
| Konsonantische Konjugation mit i-Erweiterung | ki | -i / -u | accipere (accipi-), statuere (statu-) | Verben auf -ere (kurz) mit i-Erweiterung oder Verben auf -uere |
Besonderheiten
k-Konjugation (Konsonantische Konjugation ohne i-Erweiterung):
- Ursprünglich konsonantischer Stamm ohne feste i-Erweiterung
- Stammerweiterungsvokale werden je nach Form dynamisch hinzugefügt (z.B.
-e-,-i-,-u-) - Beispiele:
legere→ Stammleg→lego,legis,legit,legimus,legitis,legunt
ki-Konjugation (Konsonantische Konjugation mit i-Erweiterung):
- Ursprünglich konsonantischer Stamm mit fester i-Erweiterung im Präsensstamm
- Der Stamm endet immer auf
-i(z.B.accipere→ Stammaccipi→accipio,accipis,accipit) - Oder Verben auf
-ueremit Stammauslaut-u-(z.B.statuere→ Stammstatu→statuo,statuis,statuit) - Beispiele:
accipere,capere,statuere,minuere,tribuere
Unterschied zwischen k und ki:
k: Der Stamm endet auf einen Konsonanten, Stammerweiterungsvokale werden je nach Form variabel hinzugefügtki: Der Stamm endet bereits auf-i(oder-ubei Verben auf -uere), die i-Erweiterung ist fest im Stamm enthalten
Morphologie-Struktur
Das morph-Feld enthält die vollständige Verbmorphologie als JSON. Die Struktur ist hierarchisch aufgebaut:
Hierarchie-Ebenen
morph (JSON-Root)
├── 1_aktiv
│ ├── 1_praesens
│ │ ├── 0_infinitiv
│ │ ├── 1_indikativ
│ │ ├── 2_konjunktiv
│ │ ├── 3_imperativ
│ │ └── 4_partizip (PPA)
│ ├── 2_imperfekt
│ ├── 3_perfekt
│ ├── 4_plusquamperfekt
│ ├── 5_futur
│ └── 6_futur2
├── 2_passiv
│ ├── 1_praesens
│ ├── 2_imperfekt
│ ├── 3_perfekt (mit esse-Periphrase)
│ ├── 4_plusquamperfekt
│ ├── 5_futur
│ └── 6_futur2
├── 3_gerundium
├── 4_gerundiv
└── 5_supinDetaillierte Schlüsselstruktur
Genus (Oberste Ebene)
| Schlüssel | Beschreibung |
|---|---|
1_aktiv | Alle Aktivformen |
2_passiv | Alle Passivformen |
3_gerundium | Gerundium (nur Aktiv, Neutrum Singular) |
4_gerundiv | Gerundiv (Passiv, adjektivische Deklination) |
5_supin | Supin I und II |
Tempora (zweite Ebene)
Aktiv:
1_praesens- Präsens2_imperfekt- Imperfekt3_perfekt- Perfekt4_plusquamperfekt- Plusquamperfekt5_futur- Futur I6_futur2- Futur II
Passiv:
- Gleiche Struktur wie Aktiv
- Bei Perfekt/Plusquamperfekt/Futur II: Periphrase mit esse + PPP
Modi (dritte Ebene)
| Schlüssel | Beschreibung |
|---|---|
0_infinitiv | Infinitiv |
1_indikativ | Indikativ |
2_konjunktiv | Konjunktiv |
3_imperativ | Imperativ |
4_partizip | Partizip |
Personae (vierte Ebene - bei finiten Verben)
| Schlüssel | Beschreibung |
|---|---|
1_sg1 | 1. Person Singular |
2_sg2 | 2. Person Singular |
3_sg3 | 3. Person Singular |
4_pl1 | 1. Person Plural |
5_pl2 | 2. Person Plural |
6_pl3 | 3. Person Plural |
Hinweis: Bei Imperativ nur 2_sg2 und 5_pl2 (bzw. im Futur zusätzlich 3_sg3 und 6_pl3)
Partizipien (zusätzliche Ebenen)
Partizipien werden dekliniert nach Numerus, Genus, Kasus:
4_partizip
├── 1_sg (Singular)
│ ├── 1_mask (Maskulinum)
│ │ ├── 1_nom, 2_gen, 3_dat, 4_akk, 5_vok, 6_abl
│ ├── 2_fem (Femininum)
│ │ └── ...
│ └── 3_neutr (Neutrum)
│ └── ...
└── 2_pl (Plural)
└── ...Gerundium
3_gerundium
├── 2_gen - Genitiv (z.B. "accipiendi")
├── 3_dat - Dativ (z.B. "accipiendo")
├── 4_akk - Akkusativ (z.B. "accipiendum")
└── 6_abl - Ablativ (z.B. "accipiendo")Hinweis: Gerundium hat keinen Nominativ und Vokativ.
Gerundiv
Gleiche Struktur wie Partizipien (alle Genera, Numeri, Kasus).
Supin
5_supin
├── 1_supin1 - Supin I (Akkusativ, z.B. "acceptum")
└── 2_supin2 - Supin II (Ablativ, z.B. "acceptu")Beispiel: Vollständige morph-JSON-Struktur (Auszug)
{
"1_aktiv": {
"1_praesens": {
"0_infinitiv": "accipere",
"1_indikativ": {
"1_sg1": "accipio",
"2_sg2": "accipis",
"3_sg3": "accipit",
"4_pl1": "accipimus",
"5_pl2": "accipitis",
"6_pl3": "accipiunt"
},
"2_konjunktiv": {
"1_sg1": "accipiam",
"2_sg2": "accipias",
"3_sg3": "accipiat",
"4_pl1": "accipiamus",
"5_pl2": "accipiatis",
"6_pl3": "accipiant"
},
"3_imperativ": {
"2_sg2": "accipe",
"5_pl2": "accipite"
},
"4_partizip": {
"1_sg": {
"1_mask": {
"1_nom": "accipiens",
"2_gen": "accipientis",
"3_dat": "accipienti",
"4_akk": "accipientem",
"5_vok": "accipiens",
"6_abl": "accipiente / accipienti"
}
}
}
},
"3_perfekt": {
"0_infinitiv": "accepisse",
"1_indikativ": {
"1_sg1": "accepi",
"2_sg2": "accepisti",
"3_sg3": "accepit",
"4_pl1": "accepimus",
"5_pl2": "accepistis",
"6_pl3": "acceperunt"
}
}
},
"2_passiv": {
"1_praesens": {
"0_infinitiv": "accipi",
"1_indikativ": {
"1_sg1": "accipior",
"2_sg2": "acciperis",
"3_sg3": "accipitur",
"4_pl1": "accipimur",
"5_pl2": "accipimini",
"6_pl3": "accipiuntur"
}
},
"3_perfekt": {
"0_infinitiv": "acceptum esse",
"1_indikativ": {
"1_sg1": "acceptus sum / accepta sum / acceptum sum",
"2_sg2": "acceptus es / accepta es / acceptum es",
"3_sg3": "acceptus est / accepta est / acceptum est",
"4_pl1": "accepti sumus/ acceptae sumus/ accepta sumus",
"5_pl2": "accepti estis / acceptae estis / accepta estis",
"6_pl3": "accepti sunt / acceptae sunt / accepta sunt"
},
"4_partizip": {
"1_sg": {
"1_mask": {
"1_nom": "acceptus",
"2_gen": "accepti",
"3_dat": "accepto",
"4_akk": "acceptum",
"5_vok": "accepte",
"6_abl": "accepto"
}
}
}
}
},
"3_gerundium": {
"2_gen": "accipiendi",
"3_dat": "accipiendo",
"4_akk": "accipiendum",
"6_abl": "accipiendo"
},
"4_gerundiv": {
"1_sg": {
"1_mask": {
"1_nom": "accipiendus",
"2_gen": "accipiendi",
"3_dat": "accipiendo",
"4_akk": "accipiendum",
"5_vok": "accipiende",
"6_abl": "accipiendo"
}
}
},
"5_supin": {
"1_supin1": "acceptum",
"2_supin2": "acceptu"
}
}Besonderheiten
Deponentien
Deponentien sind Verben, die nur Passivformen besitzen, aber aktive Bedeutung haben.
Identifikation: fb_ist_deponens = 1
Beispiele: conari, loqui, sequi, pati, uti
Morphologische Besonderheiten:
- Nur Passivformen werden generiert
- PPP hat passive Bedeutung
- PFA existiert (z.B.
locuturus) - Gerundium und Gerundiv vorhanden
Code-Beispiel:
$verb = Verb::where('lemma', 'loqui')->first();
echo $verb->fb_ist_deponens; // 1
echo $verb->morph['2_passiv']['1_praesens']['1_indikativ']['1_sg1']; // "loquor"Semideponentien
Verben, die teilweise aktiv, teilweise passiv konjugiert werden.
Zwei Typen:
Mit Passiv im Perfekt (
fb_ist_deponens = 0, aber Perfektstamm passiv)- Beispiele:
fidere,confidere,diffidere - Präsens/Imperfekt/Futur I: aktiv
- Perfekt/Plusquamperfekt/Futur II: passiv
- Beispiele:
Mit Passiv im Präsens
- Beispiele:
reverti,deverti - Präsens: passiv
- Perfekt: aktiv
- Beispiele:
Behandlung im VerbMorpher: Spezielle Arrays $semideponentia definieren diese Verben.
Perfektopräsentia
Verben, deren Perfektformen präsentische Bedeutung haben.
Identifikation: fb_ist_perfektopraesens = 1
Beispiele: memini (ich erinnere mich), odi (ich hasse), novi (ich kenne)
Morphologische Besonderheiten:
- Perfektformen haben Präsensbedeutung
- Plusquamperfektformen haben Imperfektbedeutung
- Futur II hat Futurbedeutung
- Kein echtes Präsens vorhanden
Verben ohne PPP/PFA
Manche Verben bilden kein PPP oder PFA.
Steuerung:
$verb->fb_hat_ppp = 0; // Kein PPP
$verb->fb_hat_pfa = 0; // Kein PFABeispiele:
- Verben ohne PPP:
fugere(nur poetischfugitus) - Verben ohne PFA: viele Deponentien
Auswirkung:
- Keine Passivformen im Perfektstamm (wenn kein PPP)
- Kein Partizip Futur Aktiv (wenn kein PFA)
- Keine esse-Periphrase im Passiv Perfekt
Verwendungsbeispiele
Erstellen eines neuen Verbs
use App\Models\Verb;
$verb = Verb::create([
'lemma' => 'reperire',
'bedeutung' => 'finden, wiederfinden',
'fb_stamm' => 'reperi',
'fb_kklasse' => 'ki',
'fb_1pssgpr' => 'reperio',
'fb_1pssgpf' => 'repperi',
'fb_hat_ppp' => 1,
'fb_ppp' => 'repertum',
'fb_hat_pfa' => 1,
'fb_pfa' => 'reperturus',
'fb_ist_deponens' => 0,
'fb_ist_perfektopraesens' => 0,
'status' => 0, // Unverifiziert
'morph_mode' => 0, // Automatische Morphologisierung
]);
// Morphologisierung durchführen
$verb->morphologisieren();
$verb->save();Morphologisierung eines Verbs
use App\Models\Verb;
use App\Morpher\VerbMorpher;
$verb = Verb::find(11); // accipere
// Automatische Morphologisierung
$morpher = new VerbMorpher($verb);
$morpher->autoMorph();
// Morphologie in das Model übernehmen
$verb->morph = $morpher->getFormen();
$verb->morph_mode = 0; // Automatisch
$verb->save();Alternative: Über das Morphable-Trait
$verb = Verb::find(11);
$verb->morphologisieren(); // Ruft intern den VerbMorpher aufZugriff auf spezifische Formen
$verb = Verb::where('lemma', 'accipere')->first();
// JSON dekodieren (falls nicht automatisch)
$morph = is_string($verb->morph) ? json_decode($verb->morph, true) : $verb->morph;
// Infinitiv Präsens Aktiv
$infPraes = $morph['1_aktiv']['1_praesens']['0_infinitiv'];
echo $infPraes; // "accipere"
// 1. Person Singular Präsens Indikativ Aktiv
$praesSg1 = $morph['1_aktiv']['1_praesens']['1_indikativ']['1_sg1'];
echo $praesSg1; // "accipio"
// 3. Person Plural Perfekt Indikativ Aktiv
$perfPl3 = $morph['1_aktiv']['3_perfekt']['1_indikativ']['6_pl3'];
echo $perfPl3; // "acceperunt"
// Infinitiv Perfekt Passiv
$infPerfPass = $morph['2_passiv']['3_perfekt']['0_infinitiv'];
echo $infPerfPass; // "acceptum esse"
// PPP Nominativ Singular Maskulinum
$pppNomSgMask = $morph['2_passiv']['3_perfekt']['4_partizip']['1_sg']['1_mask']['1_nom'];
echo $pppNomSgMask; // "acceptus"
// PPA Akkusativ Plural Neutrum
$ppaAkkPlNeutr = $morph['1_aktiv']['1_praesens']['4_partizip']['2_pl']['3_neutr']['4_akk'];
echo $ppaAkkPlNeutr; // "accipientia"
// Gerundium Genitiv
$gerGen = $morph['3_gerundium']['2_gen'];
echo $gerGen; // "accipiendi"
// Gerundiv Nominativ Singular Femininum
$gndNomSgFem = $morph['4_gerundiv']['1_sg']['2_fem']['1_nom'];
echo $gndNomSgFem; // "accipienda"
// Supin I
$supin1 = $morph['5_supin']['1_supin1'];
echo $supin1; // "acceptum"Alle Formen eines Verbs abrufen
$verb = Verb::find(11);
// Über das HasAlleFormenAttribute-Trait
$alleFormen = $verb->alle_formen;
// $alleFormen ist eine Collection mit allen Formen
foreach ($alleFormen as $form) {
echo $form . "\n";
}Abfrage nach Konjugationsklasse
// Alle Verben der a-Konjugation
$aVerben = Verb::where('fb_kklasse', 'a')->get();
// Alle Verben der konsonantischen Konjugation ohne i-Erweiterung
$kVerben = Verb::where('fb_kklasse', 'k')->get();
// Alle Verben der konsonantischen Konjugation mit i-Erweiterung
$kiVerben = Verb::where('fb_kklasse', 'ki')->get();
// Deponentien der e-Konjugation
$eDeponentien = Verb::where('fb_kklasse', 'e')
->where('fb_ist_deponens', 1)
->get();Verben ohne PPP finden
$verbenOhnePPP = Verb::where('fb_hat_ppp', 0)->get();
foreach ($verbenOhnePPP as $verb) {
echo $verb->lemma . " hat kein PPP\n";
}Verifizierte Verben abrufen
// Status: 0 = unverifiziert, 1 = in Prüfung, 2 = verifiziert
$verifiziert = Verb::where('status', 2)->get();Dictionary Headword (getLemmaInfo)
Die Methode getLemmaInfo() generiert die lexikographische Kopfzeile für ein Verb, wie sie in Wörterbüchern üblich ist.
Format
, [1. Ps. Sg. Präsens], [1. Ps. Sg. Perfekt], [PPP oder PFA]Beispiele:
accipere, accipio, accepi, acceptum(nicht-Deponens)loqui, loquor, locutus sum(Deponens, ohne drittes Stammform-Element)
Implementierung
public function getLemmaInfo(): string
{
$FirstForm = !empty($this->fb_1pssgpr) ? $this->fb_1pssgpr : '-';
$SecondForm = !empty($this->fb_1pssgpf) ? $this->fb_1pssgpf : '-';
$ThirdForm = !$this->fb_ist_deponens
? !empty($this->fb_ppp)
? $this->fb_ppp
: (!empty($this->pfa) ? $this->pfa : '-')
: '';
if ($FirstForm === '-' && $SecondForm === '-' && $ThirdForm === '-') {
return '';
} else {
$ThirdDivider = !empty($ThirdForm) ? ', ' : '';
return ', ' . $FirstForm . ', ' . $SecondForm . $ThirdDivider . $ThirdForm . $this->getInfoColumn();
}
}Verwendung
$verb = Verb::where('lemma', 'accipere')->first();
echo $verb->lemma . $verb->getLemmaInfo();
// Ausgabe: "accipere, accipio, accepi, acceptum"
$deponens = Verb::where('lemma', 'loqui')->first();
echo $deponens->lemma . $deponens->getLemmaInfo();
// Ausgabe: "loqui, loquor, locutus sum"Hinweise:
- Bei Deponentien wird keine dritte Form (PPP) in der Kopfzeile angezeigt
- Fehlende Formen werden mit
-dargestellt - Die Methode
getInfoColumn()fügt zusätzliche Info aus deminfo-Feld hinzu
Beispieldaten
Beispiel 1: accipere (ki-Konjugation)
[
'id' => 11,
'lemma' => 'accipere',
'info' => '',
'fb_stamm' => 'accipi',
'fb_kklasse' => 'ki',
'fb_1pssgpr' => 'accipio',
'fb_1pssgpf' => 'accepi',
'fb_hat_ppp' => 1,
'fb_ppp' => 'acceptum',
'fb_hat_pfa' => 1,
'fb_pfa' => 'accepturus',
'fb_ist_deponens' => 0,
'fb_ist_perfektopraesens' => 0,
'bedeutung' => 'annehmen, empfangen, erhalten',
'status' => 2,
]Morphologische Merkmale:
- Konsonantische Konjugation mit i-Erweiterung
- Vollständiges Paradigma (Aktiv und Passiv)
- PPP:
acceptum→ Passiv Perfekt:acceptus sum - PFA:
accepturus→ Futur-Periphrase:accepturus sum
Beispiel 2: reperire (ki-Konjugation)
[
'id' => 21,
'lemma' => 'reperire',
'info' => '',
'fb_stamm' => 'reperi',
'fb_kklasse' => 'ki',
'fb_1pssgpr' => 'reperio',
'fb_1pssgpf' => 'repperi',
'fb_hat_ppp' => 1,
'fb_ppp' => 'repertum',
'fb_hat_pfa' => 1,
'fb_pfa' => 'reperturus',
'fb_ist_deponens' => 0,
'fb_ist_perfektopraesens' => 0,
'bedeutung' => 'finden, wiederfinden',
'status' => 2,
]Morphologische Merkmale:
- Konsonantische Konjugation mit i-Erweiterung
- Reduplikation im Perfekt:
repperi(nichtreperi) - Vollständiges Paradigma
Weitere typische Verben nach Konjugationsklasse
a-Konjugation:
[
'lemma' => 'laudare',
'fb_stamm' => 'lauda',
'fb_kklasse' => 'a',
'fb_1pssgpr' => 'laudo',
'fb_1pssgpf' => 'laudavi',
'fb_ppp' => 'laudatum',
]e-Konjugation:
[
'lemma' => 'monere',
'fb_stamm' => 'mone',
'fb_kklasse' => 'e',
'fb_1pssgpr' => 'moneo',
'fb_1pssgpf' => 'monui',
'fb_ppp' => 'monitum',
]i-Konjugation:
[
'lemma' => 'audire',
'fb_stamm' => 'audi',
'fb_kklasse' => 'i',
'fb_1pssgpr' => 'audio',
'fb_1pssgpf' => 'audivi',
'fb_ppp' => 'auditum',
]ki-Konjugation (Verben auf -uere):
[
'lemma' => 'statuere',
'fb_stamm' => 'statu',
'fb_kklasse' => 'ki',
'fb_1pssgpr' => 'statuo',
'fb_1pssgpf' => 'statui',
'fb_ppp' => 'statutum',
]Traits und Funktionalität
Das Verb-Model verwendet folgende Traits:
| Trait | Zweck |
|---|---|
HasAlleFormenAttribute | Stellt Accessor alle_formen bereit |
Morphable | Methoden zur Morphologisierung |
Verifiable | Verifikations-Workflow |
hasStatus | Status-Management (0-2) |
SoftDeletes | Soft-Delete-Funktionalität |
Reportable | Fehlerberichterstattung |
belongsToLerneinheiten | Relation zu Lerneinheiten |
hasVerweise | Querverweise zu anderen Vokabeln |
Searchable | Laravel Scout Integration |
Morphable-Trait
// Morphologisierung durchführen
$verb->morphologisieren();
// Prüfen ob morphologisierbar
if ($verb->IsMorphologisierbar) {
// ...
}
// Manuell morphologisieren
if ($verb->IsManuellMorphologisierbar) {
// Manuelle Eingabe erlaubt
}Verifiable-Trait
// Status setzen
$verb->status = 2; // Verifiziert
$verb->save();
// Unverifizierte Verben
$unverifiziert = Verb::where('status', 0)->get();Relationen
Sachfelder
$verb = Verb::find(11);
// Alle zugeordneten Sachfelder
$sachfelder = $verb->sachfelder;
// IDs der Sachfelder
$sachfeldIds = $verb->sachfeld_list;Lerneinheiten
$verb = Verb::find(11);
// Zugeordnete Lerneinheiten
$lerneinheiten = $verb->lerneinheiten;Performance-Optimierung
Exclude-Scope
Das morph-Feld kann sehr groß werden. Für Performance-Abfragen:
// Ohne morph-Feld laden
$verben = Verb::exclude(['morph'])->get();
// Nur Basis-Spalten
$verben = Verb::select(Verb::BASICCOLUMNS)->get();Searchable Array
public function toSearchableArray(): array
{
return parent::toSearchableArray();
}Das Verb-Model ist durchsuchbar via Laravel Scout (TNTSearch/Meilisearch).
Weiterführende Ressourcen
- VerbMorpher: Detaillierte Morphologisierungslogik in
app/Morpher/VerbMorpher.php - VerbMorphInfoHandler: Zusätzliche Morphologie-Informationen
- Vocab-Basisklasse: Gemeinsame Funktionalität in
app/Models/Vocab.php - Migrations: Datenbankstruktur in
database/migrations/ - Tests: Unit-Tests für Verben in
tests/Unit/Models/VerbTest.php