Libraryless. Click here for Pure Java version (5809L/37K/126K).
!752 concepts. concept WithTime { new Ref sentence; new Ref time; } concept Possession { new Ref x; // e.g. "your" new Ref y; // e.g. "car" } // e.g. someone's girl concept Possession2 { new Ref x; // e.g. "someone" new Ref y; // e.g. "girl" } concept Sentence {} Sentence > SPO { new Ref s; // subject new Ref p; // predicate new Ref o; // object static S _fieldOrder = "s p o"; *() {} *(Concept s, Concept p, Concept o) { this.s.set(s); this.p.set(p); this.o.set(o); } } p { testParse("I've been here today"); testParse("I've been your friend today"); testParse("I've been his bimbo today"); testParse("I've been this dude's girl today"); } svoid testParse(S s) { print("** \* s */ **"); print(); new L<Concept> l; parse(s, listCollector(l)); for i over l: print((i+1) + ". " + structureConcept(l.get(i))); for (Concept c : iterateOptions(l)) { if (properSentence(c)) { print("First proper sentence: " + structureConcept(c)); break; } } print(); } static Concept parseToOptions(S s) { new L<Concept> l; parse(s, listCollector(l)); ret options(l); } static L<S> poss = splitAtSpace("my your his her their our"); static void parse(S s, Collector<Concept> out) { new Matches m; if (flexMatchIC("* today", s, m)) ret if out.add(cnew(WithTime, sentence := parseToOptions($1), time := concept("today"))); if (flexMatchStartIC(poss, s, m)) ret if out.add(cnew(Possession, x := cstr($1), y := parseToOptions($2))); L<S> tok = javaTok(s); int i = indexOfEndsWith(tok, "'s"); if (i >= 0) { S left = join(subList(tok, 0, i)) + dropSuffix("'s", tok.get(i)); S right = join(subList(tok, i+2)); ret if out.add(cnew(Possession2, x := parseToOptions(left), y := parseToOptions(right))); } if (flexMatchIC("I've been *", s, m)) ret if out.add( new SPO(cstr("I"), cstr("have been"), parseToOptions($1))); out.add(cstr(s)); // default } static Concept firstOfFirst(Concept c) { ret conceptGraphMap_aggressive(c, func(Concept c) { c << Options ? first(c/Options) : c }); } sbool properSentence(Concept c) { ret c << Sentence || c << WithTime && properSentence(c/WithTime.sentence!); } static Iterable<Concept> iterateOptions(L<Concept> l) { ret mapI(l, func(Concept c) { firstOfFirst(c) }); }
Began life as a copy of #1005474
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1005476 |
Snippet name: | Parse Sentence Multi [works] |
Eternal ID of this version: | #1005476/1 |
Text MD5: | 9cbaee1a74d8b36d7ef925e325633dd1 |
Transpilation MD5: | 5307e4bb7cb2cb0b55a307cf849d6ffe |
Author: | stefan |
Category: | javax |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2016-11-21 16:32:16 |
Source code size: | 2517 bytes / 114 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 640 / 690 |
Referenced in: | [show references] |