aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-01-09 23:15:58 -0800
committerChristine Dodrill <me@christine.website>2019-01-09 23:15:58 -0800
commited9f2668c45c177ae4aec61ab5b01793375cdf2d (patch)
tree5d7d1e5c53eb3858cc53560489a72e3980697e5a
parent7128a197e33d99024f0609a2bafa12fc5f3f53de (diff)
downloadx-ed9f2668c45c177ae4aec61ab5b01793375cdf2d.tar.xz
x-ed9f2668c45c177ae4aec61ab5b01793375cdf2d.zip
unpack multiple subjects
-rw-r--r--la-baujmi/fact.go31
-rw-r--r--la-baujmi/fact_test.go40
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 {