Download Jar. Uses 3874K of libraries. Click here for Pure Java version (9885L/71K).
1 | !7 |
2 | |
3 | static Map<S, Set<S>> theSet; |
4 | static new LinkedHashSet<Updatable> allObjects; |
5 | static long changes; |
6 | |
7 | sclass Updatable {
|
8 | void update {}
|
9 | |
10 | void setField(S field, O value) {
|
11 | if (eq(get(this, field), value)) ret; |
12 | set(this, field, value); |
13 | change(); |
14 | } |
15 | } |
16 | |
17 | sclass Expectation {
|
18 | S ifClass; |
19 | Runnable action; |
20 | |
21 | *() {}
|
22 | *(S *ifClass, Runnable *action) {}
|
23 | } |
24 | |
25 | sclass Word extends Updatable {
|
26 | S text; // or null if unknown |
27 | Word prev, next; |
28 | L<Word> constituents; // if group |
29 | new L<Expectation> expectations; |
30 | new L<Expectation> fulfilledExpectations; |
31 | new TreeSet<S> classes; |
32 | new LinkedHashSet<Word> groups; // I am part of |
33 | |
34 | void update {
|
35 | // Add direct word classes |
36 | if (text != null) |
37 | if (classes.addAll(reverseLookupInMapToSets(theSet, text))) change(); |
38 | |
39 | // Make text for group |
40 | if (isGroup() && text == null) {
|
41 | L<S> l = collect(constituents, 'text); |
42 | if (!anyNull(l)) setField(text := joinWithSpace(l)); |
43 | } |
44 | |
45 | // Process expectations |
46 | for (Expectation e : cloneList(expectations)) {
|
47 | print("Checking expected class " + e.ifClass);
|
48 | if (classes.contains(e.ifClass)) {
|
49 | moveElementFromCollectionToCollection(e, expectations, fulfilledExpectations); |
50 | change(); |
51 | callF(e.action); |
52 | } |
53 | } |
54 | } |
55 | |
56 | bool isGroup() { ret constituents != null; }
|
57 | |
58 | void addExpectation(Expectation e) {
|
59 | print("addExpectation " + e);
|
60 | expectations.add(e); |
61 | change(); |
62 | } |
63 | } |
64 | |
65 | static Word makeGroup(Word a, Word b) {
|
66 | print("makeGroup " + a.text + " / " + b.text);
|
67 | L<Word> list = ll(a, b); |
68 | |
69 | // look for existing group |
70 | for (Word g : a.groups) |
71 | if (eq(g.constituents, list)) |
72 | ret g; |
73 | |
74 | // new group |
75 | new Word g; |
76 | allObjects.add(g); |
77 | change(); |
78 | g.constituents = list; |
79 | for (Word w : list) |
80 | w.groups.add(g); |
81 | ret g; |
82 | } |
83 | |
84 | sclass The extends Word {
|
85 | bool expectationSentToNext; |
86 | |
87 | void update {
|
88 | super.update(); |
89 | if (next != null && !expectationSentToNext) {
|
90 | final Word _next = next; |
91 | _next.addExpectation(Expectation("<noun>", r {
|
92 | makeGroup(The.this, _next).classes.add("<noun>");
|
93 | })); |
94 | set expectationSentToNext; |
95 | } |
96 | } |
97 | } |
98 | |
99 | p-exp {
|
100 | S sentence = "In the movies Dracula always wears a cape"; |
101 | L<S> rawWords = printStruct(words(sentence)); |
102 | |
103 | theSet = ai_englishWordCategoriesWithElements(); |
104 | |
105 | new L<Word> words; |
106 | for (S w : rawWords) |
107 | words.add(nu(eqic(w, "the") ? The : Word, text := w)); |
108 | for (int i = 0; i < l(words)-1; i++) |
109 | linkWords(words.get(i), words.get(i+1)); |
110 | //printStruct(first(words)); |
111 | |
112 | addAll(allObjects, words); |
113 | long lastChanges; |
114 | do {
|
115 | lastChanges = changes; |
116 | print(n2(changes, "change")); |
117 | for (Updatable w : cloneList(allObjects)) |
118 | w.update(); |
119 | } while (lastChanges != changes); |
120 | |
121 | //for (Word w : words) printStruct(cloneForPrinting(w)); |
122 | |
123 | L<Word> groups = [Word w : instancesOf(Word, allObjects) | w.constituents != null]; |
124 | print(n2(groups, "group")); |
125 | for (Word g : groups) |
126 | print("Group: " + sfu(cloneForPrinting(g)));
|
127 | } |
128 | |
129 | svoid linkWords(Word a, Word b) {
|
130 | a.next = b; |
131 | b.prev = a; |
132 | } |
133 | |
134 | static O cloneForPrinting(Word w) {
|
135 | ret cloneWithoutFields(w, 'prev, 'next, 'constituents); |
136 | } |
137 | |
138 | svoid change() { ++changes; } |
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1017342 |
| Snippet name: | Intelligent Words v1 [OK] |
| Eternal ID of this version: | #1017342/30 |
| Text MD5: | 0d9a6fb6045ab1a4cf572c53fad6970d |
| Transpilation MD5: | 23e08e68818ed6be567900e82ced4bbb |
| Author: | stefan |
| Category: | javax / gui |
| Type: | JavaX source code (desktop) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2018-07-17 22:05:55 |
| Source code size: | 3390 bytes / 138 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 669 / 1715 |
| Version history: | 29 change(s) |
| Referenced in: | [show references] |