elp(comprehend): el-native comprehension parser + SACRED polarity end-to-end
PIECE 1 — greenfield el-native parser (comprehend.el), spaCy-free: - text -> meaning-spec via invertible English morphology (the realizer's own irregular table run BACKWARD) + a deterministic clause grammar (subject/verb boundary, roles, ditransitive iobj, PP adjuncts, subordination, coordination). - NEGATION IS SACRED: explicit polarity field, always present, cross-lingual lexeme set; standalone neg adverbs (never) captured separately. - WSD by deterministic syntactic position over a fixed sense inventory (flies->fly, like->comparison, saw->see); engram nearest-region is the documented runtime upgrade hook (no external model). Polarity threaded through the whole el contract (was previously dropped at the boundary): realizer.el realize_lang honors polarity (English do-support / adverbial / copular negation; generic preverbal negator for es/pt/ca/it/fr/de/ro) and places iobj; elp.el build_form_from_json carries polarity/neg_word/iobj across JSON; morphology.el gains 'fight'. Acceptance (native el telephone test, comprehend_gate.el): on the 5 gate sentences polarity PRESERVED 5/5 and EXTRACTED 5/5 through parse->realize-> re-parse; 4/5 byte-identical. Built bounded (elc rc=0, cc rc=0).
This commit is contained in:
@@ -63,6 +63,9 @@ import "morphology-cop.el"
|
||||
import "grammar.el"
|
||||
import "realizer.el"
|
||||
import "semantics.el"
|
||||
|
||||
// ── Comprehension front-end (input half: text → meaning-spec) ─────────────────
|
||||
import "comprehend.el"
|
||||
//
|
||||
// Entry points:
|
||||
//
|
||||
@@ -117,6 +120,9 @@ fn build_form_from_json(semantic_form_json: String, lang_code: String) -> [Strin
|
||||
let location: String = sem_get(semantic_form_json, "location")
|
||||
let tense: String = sem_get(semantic_form_json, "tense")
|
||||
let aspect: String = sem_get(semantic_form_json, "aspect")
|
||||
let polarity: String = sem_get(semantic_form_json, "polarity")
|
||||
let neg_word: String = sem_get(semantic_form_json, "neg_word")
|
||||
let iobj: String = sem_get(semantic_form_json, "iobj")
|
||||
|
||||
let form: [String] = native_list_empty()
|
||||
let form = native_list_append(form, "intent")
|
||||
@@ -127,12 +133,19 @@ fn build_form_from_json(semantic_form_json: String, lang_code: String) -> [Strin
|
||||
let form = native_list_append(form, predicate)
|
||||
let form = native_list_append(form, "patient")
|
||||
let form = native_list_append(form, patient)
|
||||
let form = native_list_append(form, "iobj")
|
||||
let form = native_list_append(form, iobj)
|
||||
let form = native_list_append(form, "location")
|
||||
let form = native_list_append(form, location)
|
||||
let form = native_list_append(form, "tense")
|
||||
let form = native_list_append(form, tense)
|
||||
let form = native_list_append(form, "aspect")
|
||||
let form = native_list_append(form, aspect)
|
||||
// SACRED: polarity crosses the JSON boundary and is never inferred away.
|
||||
let form = native_list_append(form, "polarity")
|
||||
let form = native_list_append(form, polarity)
|
||||
let form = native_list_append(form, "neg_word")
|
||||
let form = native_list_append(form, neg_word)
|
||||
let form = native_list_append(form, "lang")
|
||||
let form = native_list_append(form, lang_code)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user