Warning: session_start(): open(/var/lib/php/sessions/sess_md063ggkjg69aalidd1tc01j1i, 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
!7
static int perPage = 8;
static L guessPrograms = ll(#1008696, #1008704);
static SingleComponentPanel scp;
static int startIndex;
static new L guessModules;
static ReliableSingleThread relearnThread = new(f relearn);
concept Sentence {
S text;
new SS data;
}
p-substance {
unswing {
db();
indexConceptField(Sentence, "text");
L sentences = toLinesFullTrim(loadSnippet(#1008606));
sentences = notStartingWith("\"", sentences);
time { makeUniqueConcepts(Sentence, "text", sentences); }
for (S id : guessPrograms)
pcall { guessModules.add(runDependent(id)); }
}
showFrame(centerAndSouth(scp = new SingleComponentPanel,
withTopMargin(20, jcenteredline(
textActionButton("Mark as...", f mark),
jbutton("Prev", r { makePanel(max(startIndex-perPage, 0)) }),
jbutton("Next", f nextPage),
jbutton("Random", r { makePanel(random(countConcepts(Sentence))/perPage*perPage) }),
jbutton("All OK", r { clickButtons(findButtons(scp, "OK")); nextPage(); }),
jbutton("Add sentence...", f addSentence),
//jbutton("Re-learn", r { relearnThread.trigger() })
))));
addMenu(scp, "Actions",
"Rename key", f renameKey);
setFrameSize(scp, 1000, 600);
centerFrame(scp);
makePanel(0);
}
svoid makePanel(int startIndex) {
main.startIndex = startIndex;
makePanel();
}
svoid makePanel() {
JPanel panel = gridLayoutPanel_trackWidth_evenlySpacedCols(2);
panel.add(jlabel("Sentence"));
panel.add(jlabel("Analysis"));
for (final Sentence s : takeFirst(perPage, dropFirst(startIndex, orderByFieldDesc("created", list(Sentence))))) {
final JTextField tfText = jtextfield_caretLeft(s.text);
tfText.setCaret(new DefaultCaret {
@Override
public void setSelectionVisible(boolean visible) {
super.setSelectionVisible(true);
}
});
panel.add(tfText);
final JTextField tf = jtextfield_caretLeft(dataMapToString(s.data));
final JTextField tfGuess = jtextfield_caretLeft(dataMapToString(makeGuess(s.text)));
final new Var reviseBtn, okBtn;
okBtn.set(jbutton("OK", r {
pcall-messagebox {
cset(s, data := dataMapFromString(getTextTrim(tf)));
disableTextField(tf);
replaceComponent(okBtn!, reviseBtn!);
relearnThread.trigger();
}
}));
reviseBtn.set(jbutton("Revise", r {
cset(s, data := new HashMap);
enableTextField(tf);
replaceComponent(reviseBtn!, okBtn!);
}));
onUpdateAndNow(tf, r { okBtn->setEnabled(nempty(getTextTrim(tf))) });
bool hasData = nempty(s.data);
if (hasData) disableTextField(tf);
panel.add(vstack(
centerAndEast(withLabel("Saved:", tf), hasData ? reviseBtn! : okBtn!),
centerAndEast(withLabel("Guess:", tfGuess), jbutton("OK", r {
pcall-messagebox {
cset(s, data := dataMapFromString(getTextTrim(tfGuess)));
disableTextField(tf);
replaceComponent(okBtn!, reviseBtn!);
relearnThread.trigger();
}
})),
));
}
scp.setComponent(jscroll(panel));
}
svoid relearn {
for (O guessModule : guessModules) pcall { callMain(guessModule); }
swing { makePanel(); }
}
svoid nextPage {
if (startIndex+perPage < countConcepts(Sentence)) makePanel(startIndex+perPage);
}
static S dataMapToString(SS data) {
ret join(". ", mapMapToList(data, func(S a, S b) {
a + "=" + b }));
}
static SS dataMapFromString(S input) {
new SS data;
for (S s : trimAll(splitByJavaToken(input, "."))) {
L tok = javaTok(s);
int i = tok.indexOf("=");
if (i < 0) continue;
data.put(trimJoinSubList(tok, 0, i), trimJoinSubList(tok, i+1));
}
ret data;
}
static SS makeGuess(S sentence) {
new SS data;
for (O guessModule : guessModules)
pcall(guessModule, "callGuesser", get(guessModule, "best"), sentence, data);
ret data;
}
svoid mark(JTextComponent c) {
final IntRange r = textComponentSelection(c);
fS selection = c.getSelectedText();
fS text = c.getText();
final JTextField tf = jtextfield("verb");
showFormTitled("Mark sentence part",
"Text", selection + " (" + r.start + "/" + r.length() + ")",
"Mark as", tf,
func {
pcall-infobox {
S as = getTextTrim(tf);
Sentence s = findConcept(Sentence, +text);
s.data.put(as, ai_renderAction(text, r));
s.change();
relearnThread.trigger();
null;
}
false;
});
}
svoid addSentence {
final JTextField tf = jtextfield();
showFormTitled("Add sentence", "Sentence", tf, r {
uniq(Sentence, text := getTextTrim(tf));
makePanel(0);
});
}
svoid renameKey {
final JTextField tf1 = jtextfield();
final JTextField tf2 = jtextfield();
showFormTitled("Rename key",
"Old key name", tf1,
"New key name", tf2,
r {
S oldKey = getTextTrim(tf1);
S newKey = getTextTrim(tf2);
int n = 0;
for (Sentence s) {
S value = s.data.get(oldKey);
if (value != null) {
s.data.remove(oldKey);
s.data.put(newKey, value);
s.change();
++n;
}
}
infoBox(n(n, "changes") + " made");
makePanel();
});
}