diff options
| author | Christine Dodrill <me@christine.website> | 2019-01-09 23:15:58 -0800 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2019-01-09 23:15:58 -0800 |
| commit | ed9f2668c45c177ae4aec61ab5b01793375cdf2d (patch) | |
| tree | 5d7d1e5c53eb3858cc53560489a72e3980697e5a | |
| parent | 7128a197e33d99024f0609a2bafa12fc5f3f53de (diff) | |
| download | x-ed9f2668c45c177ae4aec61ab5b01793375cdf2d.tar.xz x-ed9f2668c45c177ae4aec61ab5b01793375cdf2d.zip | |
unpack multiple subjects
| -rw-r--r-- | la-baujmi/fact.go | 31 | ||||
| -rw-r--r-- | la-baujmi/fact_test.go | 40 |
2 files changed, 58 insertions, 13 deletions
diff --git a/la-baujmi/fact.go b/la-baujmi/fact.go index 4199e26..8d63052 100644 --- a/la-baujmi/fact.go +++ b/la-baujmi/fact.go @@ -59,6 +59,11 @@ func SentenceToSelbris(s tokiponatokens.Sentence) ([]Selbri, error) { for _, pt := range s { switch pt.Type { case tokiponatokens.PartSubject: + if strings.Contains(pt.Braces(), " en ") { + subjects = append(subjects, strings.Split(strings.Join(pt.Tokens, " "), " en ")...) + continue + } + subjects = append(subjects, strings.Join(pt.Tokens, "_")) case tokiponatokens.PartVerbMarker: @@ -68,8 +73,8 @@ func SentenceToSelbris(s tokiponatokens.Sentence) ([]Selbri, error) { objects = append(objects, strings.Join(pt.Tokens, "_")) case tokiponatokens.PartPunctuation: - if pt.Sep != nil { - switch *pt.Sep { + if len(pt.Tokens) == 1 { + switch pt.Tokens[0] { case "la": context = append(context, subjects[len(subjects)-1]) subjects = subjects[:len(subjects)-1] @@ -87,18 +92,20 @@ func SentenceToSelbris(s tokiponatokens.Sentence) ([]Selbri, error) { var result []Selbri - for _, v := range verbs { - // sumti: x1 is a/the argument of predicate function x2 filling place x3 (kind/number) - sumti := append([]string{}, context...) - sumti = append(sumti, subjects...) - sumti = append(sumti, objects...) + for _, s := range subjects { + for _, v := range verbs { + // sumti: x1 is a/the argument of predicate function x2 filling place x3 (kind/number) + sumti := append([]string{}, context...) + sumti = append(sumti, s) + sumti = append(sumti, objects...) - r := Selbri{ - Predicate: v, - Arguments: sumti, - } + r := Selbri{ + Predicate: v, + Arguments: sumti, + } - result = append(result, r) + result = append(result, r) + } } return result, nil diff --git a/la-baujmi/fact_test.go b/la-baujmi/fact_test.go index 955c800..9d5cc93 100644 --- a/la-baujmi/fact_test.go +++ b/la-baujmi/fact_test.go @@ -79,7 +79,7 @@ func TestSentenceToSelbris(t *testing.T) { wantFacts: []string{"ala(tenpo_ni, A)."}, }, { - name: "multiple_verbs", + name: "multiple verbs", json: []byte(`[{"part":"subject","tokens":["ona"]},{"part":"verbMarker","sep":"li","tokens":["sona"]},{"part":"verbMarker","sep":"li","tokens":["pona"]},{"part":"objectMarker","sep":"e","tokens":["mute"]},{"part":"punctuation","tokens":["period"]}]`), want: []Selbri{ { @@ -93,6 +93,44 @@ func TestSentenceToSelbris(t *testing.T) { }, wantFacts: []string{"sona(ona, mute).", "pona(ona, mute)."}, }, + { + name: "multiple subjects and verbs", + json: []byte(`[{"part":"subject","tokens":["ona","en","sina","en","mi"]},{"part":"verbMarker","sep":"li","tokens":["sona"]},{"part":"verbMarker","sep":"li","tokens":["pona"]},{"part":"objectMarker","sep":"e","tokens":["mute"]},{"part":"punctuation","tokens":["period"]}]`), + want: []Selbri{ + { + Predicate: "sona", + Arguments: []string{"ona", "mute"}, + }, + { + Predicate: "pona", + Arguments: []string{"ona", "mute"}, + }, + { + Predicate: "sona", + Arguments: []string{"sina", "mute"}, + }, + { + Predicate: "pona", + Arguments: []string{"sina", "mute"}, + }, + { + Predicate: "sona", + Arguments: []string{"mi", "mute"}, + }, + { + Predicate: "pona", + Arguments: []string{"mi", "mute"}, + }, + }, + wantFacts: []string{ + "sona(ona, mute).", + "pona(ona, mute).", + "sona(sina, mute).", + "pona(sina, mute).", + "sona(mi, mute).", + "pona(mi, mute).", + }, + }, } for _, cs := range cases { |
