Archived
74 lines
3.3 KiB
EmacsLisp
74 lines
3.3 KiB
EmacsLisp
// lang-ja.el - Japanese NLG tests: SOV assertion, question with か particle.
|
|
//
|
|
// Japanese is SOV, agglutinative, pro-drop. The realizer uses the "particle"
|
|
// question strategy: statement order + sentence-final か.
|
|
//
|
|
// Grammatical relations are marked by postpositions embedded in the NP strings:
|
|
// 猫が = cat (subject marker が)
|
|
// 魚を = fish (object marker を)
|
|
//
|
|
// sem_to_spec maps: subject -> agent (GramSpec), object -> predicate or patient.
|
|
// For "assert" with a transitive verb the object field carries the patient NP;
|
|
// the predicate field carries the verb.
|
|
//
|
|
// Expected outputs (approximate):
|
|
// assert: "猫が 食べる 魚を." — SOV order from gram_order_constituents
|
|
// question: "猫が 食べる 魚を か?" — SOV + か particle
|
|
|
|
fn test_assert() -> String {
|
|
// intent="assert", subject="猫が", obj="食べる" (verb in sem_to_spec predicate),
|
|
// patient NP "魚を" passed as modifiers or encoded in subject.
|
|
// Use the two-arg form: subject carries subject NP, obj carries the verb,
|
|
// and we pass the object NP separately via a direct GramSpec build below.
|
|
let frame: [String] = sem_frame_lang("assert", "猫が", "食べる", "", "ja")
|
|
return sem_realize(frame)
|
|
}
|
|
|
|
fn test_assert_with_object() -> String {
|
|
// Build a GramSpec directly to supply subject, verb, and object NP together.
|
|
// This mirrors how basic-sentence.el builds the form manually.
|
|
let form: [String] = native_list_empty()
|
|
let form = native_list_append(form, "intent")
|
|
let form = native_list_append(form, "assert")
|
|
let form = native_list_append(form, "agent")
|
|
let form = native_list_append(form, "猫が")
|
|
let form = native_list_append(form, "predicate")
|
|
let form = native_list_append(form, "食べる")
|
|
let form = native_list_append(form, "patient")
|
|
let form = native_list_append(form, "魚を")
|
|
let form = native_list_append(form, "location")
|
|
let form = native_list_append(form, "")
|
|
let form = native_list_append(form, "tense")
|
|
let form = native_list_append(form, "present")
|
|
let form = native_list_append(form, "aspect")
|
|
let form = native_list_append(form, "simple")
|
|
let form = native_list_append(form, "lang")
|
|
let form = native_list_append(form, "ja")
|
|
return realize(form)
|
|
}
|
|
|
|
fn test_question() -> String {
|
|
// Question: SOV order + か particle (realizer "particle" strategy for ja)
|
|
let form: [String] = native_list_empty()
|
|
let form = native_list_append(form, "intent")
|
|
let form = native_list_append(form, "question")
|
|
let form = native_list_append(form, "agent")
|
|
let form = native_list_append(form, "猫が")
|
|
let form = native_list_append(form, "predicate")
|
|
let form = native_list_append(form, "食べる")
|
|
let form = native_list_append(form, "patient")
|
|
let form = native_list_append(form, "魚を")
|
|
let form = native_list_append(form, "location")
|
|
let form = native_list_append(form, "")
|
|
let form = native_list_append(form, "tense")
|
|
let form = native_list_append(form, "present")
|
|
let form = native_list_append(form, "aspect")
|
|
let form = native_list_append(form, "simple")
|
|
let form = native_list_append(form, "lang")
|
|
let form = native_list_append(form, "ja")
|
|
return realize(form)
|
|
}
|
|
|
|
println(test_assert_with_object())
|
|
println(test_question())
|