Feature-Konzept: Grammatik-API / Progressionsanalyse
Anwendungsfall
Texte in Lehrbüchern, z.B. prima, wo bestimmte grammatikalische Begriffe (Aktiv, Indikativ, andere Tempora) noch unbekannt sind. S der 5. Jgst. klickt "laudat" an und soll nur die "3. Ps. Sg." sehen. Im Moment werden alle grammatikalischen Kategorien angezeigt (Akt. Ind. 3. Ps. Sg. Präs.).
Funktionsprinzip
- Grammatik kann einer Lerneinheit zugeordnet werden.
- Aus den Grammatiken mehrerer Lerneinheiten kann eine kumulative Liste erstellt werden. ( = Grammatik BIS Lerneinheit X)
- Die Resultate der FormAnalysator-API werden mittels einer weiterer Methode (
applyGrammarScope()) erweitert. - In dieser Methode werden die Resultate der FormAnalysator-API mit der kumulativen Grammatikliste verglichen und nicht bekannte Grammatikalische Kategorien herausgefiltert.
- Die Methode verweist auf eine Service-Klasse, die die Grammatik-Regeln verwaltet.
Wissenswertes für die Entwicklung
Formanalyse-Endpoint, der die die FormAnalysator-API aufruft:
/analyze/{form}Dieser gibt folgende mit
/analyze/{amor}folgenden JSON-String zurück:java// = FormAnalysis { "Form": "amor", // Die Config-Optionen die dem Konstruktor übergeben werden. Hier ist ggf. die Eigenschaft `scope_grammar` möglich, um die Grammatik-Regeln zu definieren. "config": { "show_pos": true, "show_morpho": true, "show_bedeutungen": true, "show_accepted_reading": true }, "Lemmata": [ // = LemmaAnalysis { "id": "460", "lemma": "amare", "info": ", amo, amavi, amatum", "pos": "verb", "morpho": "[\"v1spip---\"]", "bedeutung": "lieben, mögen", "is_accepted_reading": false }, { "id": "173", "lemma": "amor", "info": ", amoris", "pos": "nomen", "morpho": "[\"n-s---mn-\", \"n-s---mv-\"]", "bedeutung": "die Liebe", "is_accepted_reading": false } ], "Format": "hermeneusv3"Feature-Test für die FormAnalysator-API:
test_an_analysis_is_requested_on_a_scope_of_vocab(Kann mit PHPUnit für einen bequemen Entwicklugnsworkflow verwendet werden.)Der JSON-String der Eigenschaft
morphowird im Frontend von einer Vue-Componente interpretiert.
Naming-Conventions (Vorschlag für eine Refaktorierung 💩, gerne weitere Vorschläge ergänzen)
FormAnalysis: Resultat, das vomFormAnalysator(get()-Methode) zurückgegeben wird und alle Informationen zur Analyse enthält.LemmaAnalysis: Einzelnes JSON-Objekt, das die Analyse eines einzelnen Lemma enthält.GrammarScope: Klasse, die ein Regelset für erlaubte Grammatikalische Kategorien enthält, die aus einer kumulativen ListeLerneinheitGrammatikerstellt wurde.MorphoAnalysis: Grammatikalische Kategorien, die in der EigenschaftmorphoeinesLemmaAnalysis-Objekts enthalten sind.MorphoString: String, der die Grammatikalischen Kategorien eines Lemmas enthält. (z.B."v1spip---")MorphoTag: Einzelne Grammatikalische Kategorie eines Lemmas. (z.B.v,1,s,p), die dann alsVerb,1. Person,Singular,Präsensinterpretiert werden können.
Aufgabenverteilung
- Blumenfelder
- Feature: Grammatik kann Lerneinheit zugeordnet werden.
Grammatik-Klasse erweitern: Wie wird Grammatik grundsätzlich erfasst? Ggd.known_morphoals Tabellenspalte- Vermutlich
GrammarScope-Klasse/Model erstellen, die die Grammatik-Regeln enthält.- In dieser soll festgelegt sein, ob
- Unbekannte Tags herausgefiltert werden sollen
- Das Analyseergebnis der unbekannten Form wieder gelöscht werden soll (=> Unbekannte Grammatik => Kein Ergebnis)
- In dieser soll festgelegt sein, ob
GrammarScope-Methodecompose()erstellen, die die kumulative Grammatik-Regeln aus verschiedenerLerneinheitGrammatikerstellt.
- Hotz:
FormAnalysator-Klasse erweitern:applyGrammarScope($GrammarScope)-Methode erstellen, die die Grammatik-Regeln anwendet und die MorphoStrings filtert.
Testszenario:
Codierung der bekannten Grammatik:
- a-Konjugation
Ruleset, das in der Datenbankspalte known_morpho gespeichert ist:java[ { "v": { "1": [ "1", "2", "3" ], "2": [ "s", "p" ], "7": [ "1" ] } } ]
Erklärung: An Stringposition 1 sind die Werte 1, 2 und 3 erlaubt, an Stringposition 2 sind s und p erlaubt, an Position 7 ist 1 erlaubt. Alles andere wird entfernt.
- e-Konjugationjava
[ { "v": { "1": [ "1", "2", "3" ], "2": [ "s", "p" ], "7": [ "2" ] } } ] - i-Konjugationjava
[ { "v": { "1": [ "1", "2", "3" ], "2": [ "s", "p" ], "7": [ "4" ] } } ]
Die Rulesets funktionieren additiv, müssen also nach Wortart und Stringposition gruppiert werden, sodass ein gemeinsames additives Ruleset entsteht:
[
{
"v": {
"1": [
"1",
"2",
"3"
],
"2": [
"s",
"p"
],
"7": [
"1",
"2",
"4"
]
}
}
]Mit diesem Ruleset kann nun der MorphoString modifiziert werden.
Für laudamus wird zunächst v1ppia---- zurückgegeben (bei LatinWordnet v1ppia--1-
=> Übrigbleiben soll v1p------- bzw. v1p-----1-