This repository has been archived on 2026-05-05. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2026-05-02 22:15:25 -05:00

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())