Warning: session_start(): open(/var/lib/php/sessions/sess_hsj9alio116u49cv1vsfv1kmcm, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!759
sS guessProgram = #1008669; //#1008653;
static SingleComponentPanel scp;
static int startIndex;
sO guessModule;
static ReliableSingleThread relearnThread = new(f relearn);
concept Sentence {
S text;
S action;
}
p-substance {
unswing {
useDBOf(#1008607);
db();
indexConceptField(Sentence, "text");
L sentences = toLinesFullTrim(loadSnippet(#1008606));
sentences = notStartingWith("\"", sentences);
time { makeUniqueConcepts(Sentence, "text", sentences); }
pcall { guessModule = runDependent(guessProgram); }
}
showFrame(centerAndSouth(scp = new SingleComponentPanel,
withTopMargin(20, jcenteredline(
jbutton("Prev", r { makePanel(max(startIndex-10, 0)) }),
jbutton("Next", f nextPage),
jbutton("Random", r { makePanel(random(countConcepts(Sentence))/10*10) }),
jbutton("All OK", r { clickButtons(findButtons(scp, "OK")); nextPage(); }),
jbutton("Re-learn", r { relearnThread.trigger() })))));
setFrameWidth(scp, 1000);
centerFrame(scp);
makePanel(0);
}
svoid makePanel(int startIndex) {
main.startIndex = startIndex;
JPanel panel = gridLayoutPanel_trackWidth_evenlySpacedCols(2);
panel.add(jlabel("Sentence"));
panel.add(jcombobox("Subject", "Verb"));
for (final Sentence s : takeFirst(10, dropFirst(startIndex, list(Sentence)))) {
final JTextField tfText = jtextfield_caretLeft(s.text);
panel.add(tfText);
IntRange r = ai_parseSubjectAction(s.action);
if (r != null)
tfText.select(r.start, r.end);
bool hasAction = nempty(s.action);
final JTextField tf = jtextfield(hasAction ? s.action : guessAction(s.text));
final new Var reviseBtn, okBtn;
okBtn.set(jbutton("OK", r {
cset(s, action := getTextTrim(tf));
disableTextField(tf);
replaceComponent(okBtn!, reviseBtn!);
relearnThread.trigger();
}));
reviseBtn.set(jbutton("Revise", r {
cset(s, action := null);
enableTextField(tf);
replaceComponent(reviseBtn!, okBtn!);
}));
if (hasAction) disableTextField(tf);
panel.add(centerAndEast(tf, hasAction ? reviseBtn! : okBtn!));
onCaret(tfText, r {
if (s.action == null) {
S a = ai_makeSubjectAction(s.text, new IntRange(tfText.getSelectionStart(), tfText.getSelectionEnd()));
if (a != null) tf.setText(a);
}
});
}
scp.setComponent(jscroll(panel));
}
static IntRange guess(S sentence) {
if (guessModule == null) null;
ret (IntRange) quickImport(call(guessModule, "callGuesser", get(guessModule, "best"), sentence));
}
static S guessAction(S sentence) {
IntRange r = guess(sentence);
ret or2(ai_makeSubjectAction(sentence, r), "?");
}
static L> learningMaterial() {
L> out = new L;
for (Sentence s) {
if (s.action == null) continue;
IntRange r = ai_parseSubjectAction(s.action);
if (r != null)
out.add(pair(s.text, r));
}
ret out;
}
svoid relearn {
callMain(guessModule);
swing { makePanel(startIndex); }
}
svoid nextPage {
if (startIndex+10 < countConcepts(Sentence)) makePanel(startIndex+10);
}