1  | sconcept Line {
 | 
2  | S text;  | 
3  | new Ref<Interpretation> interpretation;  | 
4  | new Ref<Guess> guess;  | 
5  | new Ref<Guess> acceptedGuess;  | 
6  | |
7  |   *() {}
 | 
8  |   *(S *text) {}
 | 
9  | |
10  |   Guess guessAs(Line l, S guessedBy) {
 | 
11  | new Guess g;  | 
12  | g.guessedAs.set(l);  | 
13  | g.interpretation.set(l.interpretation);  | 
14  | g.guessedBy = guessedBy;  | 
15  | guess.set(g);  | 
16  | ret g;  | 
17  | }  | 
18  | }  | 
19  | |
20  | sconcept Guess {
 | 
21  | new Ref<Interpretation> interpretation;  | 
22  | new Ref<Line> guessedAs;  | 
23  | O guessedBy;  | 
24  | }  | 
25  | |
26  | sconcept Interpretation {}
 | 
27  | |
28  | // generic stuff  | 
29  | |
30  | sconcept Praise extends Interpretation {}
 | 
31  | sconcept NotForMe extends Interpretation {}
 | 
32  | sconcept Hello extends Interpretation {}
 | 
33  | sconcept ByeBye extends Interpretation {}
 | 
34  | sconcept Unclear extends Interpretation {}
 | 
35  | |
36  | // variables  | 
37  | |
38  | static JComponent controls;  | 
39  | static Guess guessShowing;  | 
40  | static Line lineShowing;  | 
41  | static JList listShowing;  | 
42  | |
43  | svoid initConsole {
 | 
44  |   consoleFont(loadFont("#1004970", 20f));
 | 
45  | setConsoleHeight(500);  | 
46  | centerBigConsole();  | 
47  | renameConsole(programTitle());  | 
48  | consoleMargin(10);  | 
49  | defaultControls();  | 
50  | clearConsole();  | 
51  | }  | 
52  | |
53  | synchronized static S answer(S s) {
 | 
54  | Line line = findLine(s);  | 
55  | if (line == null)  | 
56  | line = new Line(s);  | 
57  | Interpretation ip = line.interpretation.get();  | 
58  |   if (ip == null) {
 | 
59  | Guess guess = guess(line);  | 
60  | if (guess == null)  | 
61  | ret "No interpretation - or guess - for " + quote(s);  | 
62  | lineShowing = line;  | 
63  | guessShowing = guess;  | 
64  | final S q = "I'm guessing you mean " + quote(guess.guessedAs.get().text) + "?";  | 
65  |     awt {
 | 
66  | setControls(centerAndSouth(  | 
67  | withBottomMargin(jboldLabel(q)),  | 
68  | centerAndEast(jCenteredLine(  | 
69  |         jbutton("Yes", "guessYes"),
 | 
70  |         jbutton("No", "guessNo")),
 | 
71  |         jCenteredLine(jbutton("Admin", "admin"), jbutton("Contribute", "contribute")))));
 | 
72  | }  | 
73  | ret q;  | 
74  | }  | 
75  | |
76  | ret answerInterpretedWithStandards(s, ip);  | 
77  | }  | 
78  | |
79  | static S answerInterpretedWithStandards(S s, Interpretation ip) {
 | 
80  |   if (ip instanceof Praise) ret kevin("Thank you :)");
 | 
81  |   if (ip instanceof Hello) ret kevin("Hello! :)");
 | 
82  |   if (ip instanceof ByeBye) {
 | 
83  |     kevin("Bye user! :)");
 | 
84  | sleepSeconds(1);  | 
85  | cleanKillVM();  | 
86  | }  | 
87  |   if (ip instanceof NotForMe) ret kevin("Talk to the hand");
 | 
88  | if (ip instanceof Unclear) ret "[Unclear statement]";  | 
89  | |
90  | ret answerInterpreted(s, ip);  | 
91  | }  | 
92  | |
93  | static Line findLine(S text) {
 | 
94  | ret findWhere(list(Line.class), "text", text);  | 
95  | }  | 
96  | |
97  | static RC xfindLine(S text) {
 | 
98  | ret toPassRef(findLine(text));  | 
99  | }  | 
100  | |
101  | static Guess guess(Line line) {
 | 
102  | line.guess.clear(); // guess every time  | 
103  | //if (line.guess.has()) ret line.guess.get();  | 
104  | |
105  | // "match" method  | 
106  | /*for (Line l : list(Line.class))  | 
107  | if (l.interpretation.has() && match(l.text, line.text))  | 
108  | ret line.guessAs(l, "match");*/  | 
109  | |
110  | // levenshtein method  | 
111  | new Map<Line, Int> scores;  | 
112  | for (Line l : list(Line.class))  | 
113  |     if (l.interpretation.has()) {
 | 
114  | int dist = leven(toLower(l.text), toLower(line.text));  | 
115  | //print(line.text + " vs " + l.text + " => " + dist);  | 
116  | scores.put(l, -dist);  | 
117  | }  | 
118  | if (nempty(scores))  | 
119  | ret line.guessAs(highest(scores), "leven");  | 
120  | |
121  | null;  | 
122  | }  | 
123  | |
124  | svoid setControls(final JComponent controls) {
 | 
125  |   awtIfNecessary {
 | 
126  | hideControls();  | 
127  | JComponent _controls = withMargin(controls);  | 
128  | main.controls = _controls;  | 
129  | addToConsole2(_controls);  | 
130  | }  | 
131  | }  | 
132  | |
133  | svoid hideControls() {
 | 
134  | removeFromConsole2(controls);  | 
135  | controls = null;  | 
136  | }  | 
137  | |
138  | svoid guessYes {
 | 
139  |   print("Yes");
 | 
140  | Line line = lineShowing;  | 
141  | line.acceptedGuess.set(guessShowing);  | 
142  | line.interpretation.set(guessShowing.interpretation);  | 
143  | line.guess.clear();  | 
144  | guessShowing = null;  | 
145  | lineShowing = null;  | 
146  | defaultControls();  | 
147  | execLine(line);  | 
148  | }  | 
149  | |
150  | svoid execLine(Line line) {
 | 
151  |   print("> " + callStaticAnswerMethod(mc(), line.text));
 | 
152  | }  | 
153  | |
154  | svoid guessNo {
 | 
155  |   print("No");
 | 
156  | new L<S> texts;  | 
157  | for (Line line : reversedList(sortedByField(list(Line.class), "created")))  | 
158  | if (line.interpretation.has())  | 
159  | texts.add(line.text);  | 
160  | //texts = sortedIgnoreCase(texts);  | 
161  | S q = "What does " + quote(lineShowing.text) + " mean then?";  | 
162  |   print("> " + q);
 | 
163  | setControls(northCenterAndSouth(  | 
164  | withBottomMargin(jboldLabel(q)),  | 
165  | listShowing = jlist(texts),  | 
166  | centerAndEast(jCenteredLine(  | 
167  |         jbutton("Accept", "accept"),
 | 
168  |         jbutton("Cancel", "cancel")),
 | 
169  |         jCenteredLine(jbutton("Admin", "admin"),
 | 
170  |         jbutton("Contribute", "contribute")))));
 | 
171  |   onDoubleClick(listShowing, r { accept() });
 | 
172  | }  | 
173  | |
174  | svoid defaultControls {
 | 
175  | setControls(centerAndEast(new JPanel,  | 
176  |     jCenteredLine(jbutton("Admin", "admin"),
 | 
177  |     jbutton("Contribute", "contribute"))));
 | 
178  | focusConsole();  | 
179  | }  | 
180  | |
181  | svoid accept {
 | 
182  | S text = cast getSelectedItem(listShowing);  | 
183  | if (text == null) ret;  | 
184  | Line l = findLine(text);  | 
185  | if (l == null) ret;  | 
186  |   print("It means " + quote(text) + " (" + shortClassName(l.interpretation.get()) + ")");
 | 
187  | lineShowing.interpretation.set(l.interpretation);  | 
188  | execLine(lineShowing);  | 
189  | cancel();  | 
190  | }  | 
191  | |
192  | svoid cancel {
 | 
193  | guessShowing = null;  | 
194  | lineShowing = null;  | 
195  | listShowing = null;  | 
196  | defaultControls();  | 
197  | }  | 
198  | |
199  | svoid contribute {
 | 
200  |   kevin("Do you want to contribute?");
 | 
201  |   if (confirmYesNo(consoleFrame(), "Do you want to contribute your language database to the project?")) {
 | 
202  | S id = ntUpload(programID(),  | 
203  | "Language Database from " + computerID(),  | 
204  |      loadTextFile(getProgramFile("concepts.structure")));
 | 
205  |      print("Thanks! Uploaded to " + shortSnippetLink(id));
 | 
206  | }  | 
207  | }  | 
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1004972 | 
| Snippet name: | Text AI [Include] | 
| Eternal ID of this version: | #1004972/3 | 
| Text MD5: | cc2cd542dbc7ff285b95b595365ddc2b | 
| Author: | stefan | 
| Category: | javax | 
| Type: | JavaX fragment (include) | 
| Public (visible to everyone): | Yes | 
| Archived (hidden from active list): | No | 
| Created/modified: | 2017-03-15 14:18:59 | 
| Source code size: | 5508 bytes / 207 lines | 
| Pitched / IR pitched: | No / No | 
| Views / Downloads: | 868 / 1353 | 
| Version history: | 2 change(s) | 
| Referenced in: | [show references] |