Warning: session_start(): open(/var/lib/php/sessions/sess_g8r7r85h9kgqiggavt2440nsvd, 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
concept Example {
S input;
Triple triple;
transient Triple guessed;
}
static F1> guesser;
static JLabel lblStatus;
static Map> examples, errors;
p-subst {
dbIndexing(Example, 'input);
autoRestart();
for (S s : keys(gac36k()))
uniq(Example, input := s);
print("Making CRUD");
sexyTable_drag = false;
final SimpleCRUD crud = new(Example) {
void saveComponent(Example c, S field, JComponent comp) {
if (eqOneOf(field, 'triple, 'guessed))
cset(c, field, unstructureOrNull(getTextTrim(comp)));
else
super.saveComponent(c, field, comp);
}
};
crud.renderer = func(Example e) {
litorderedmap(Input := e.input, Triple := ai_tripleToString(e.triple), Guessed := ai_tripleToString(e.guessed))
};
crud.show();
swing {
tablePopupMenuItemFirst(crud.table, "Accept", voidfunc(int row) {
for (Example e : crud.selectedConcepts())
cset(e, triple := e.guessed);
});
/*containerAddFirst(crud.buttons, jbutton("Set multi...", r {
final L l = crud.selectedConcepts();
showTextFieldForm("Set multi (" + l(l) + ")", "Verb", first(l).verb_guessed, voidfunc(S s) {
for (Example e : l) cset(e, verb := s);
});
}), jbutton("Show errors", f showErrors));*/
}
addToFrame(crud.panel, lblStatus = jlabel());
thread { guessLoop(); }
}
static Map> examples() {
ret mapFromKeyAndValueField([Example e : list(Example) | e.triple != null], 'input, 'triple);
}
svoid guessLoop {
repeat with sleep 5 {
int changes = 0;
new HashMap> guessedMap;
Window anim = miniLoadingAnim();
try {
examples = examples();
int nTrain = l(examples)/2;
Map> trainExamples = keysToMap(examples, selectRandom_fast(keysList(examples), nTrain));
guesser = new F1>() {
Triple get(S s) {
ret ai_tripelize(unquoteIfNotContainingOtherQuotes(s));
}
};
for (Example e) {
Triple t = (Triple) pcallF(guesser, e.input);
changes += cset(e, guessed := t);
guessedMap.put(e.input, t);
}
if (changes > 0) change();
Pair>> p = scoreTripelizer(mapGetter(guessedMap), examples);
double score = p.a;
errors = p.b;
setText(lblStatus, n(examples, "example") + ", trained with " + l(trainExamples) + ", score: " + formatDouble(score*100, 1) + "% ("
+ iround((1-score)*l(examples)) + " missing)");
} finally {
disposeWindow(anim);
}
}
}
svoid showErrors {
showTable(map(keys(errors), func(S input) {
litorderedmap(Input := input, Real := ai_tripleToString(examples.get(input)), Guessed := ai_tripleToString(errors.get(input)))
}), "Errors");
}