in src/main.cc [135:187]
void test(const std::vector<std::string>& args) {
bool perLabel = args[1] == "test-label";
if (args.size() < 4 || args.size() > 6) {
perLabel ? printTestLabelUsage() : printTestUsage();
exit(EXIT_FAILURE);
}
const auto& model = args[2];
const auto& input = args[3];
int32_t k = args.size() > 4 ? std::stoi(args[4]) : 1;
real threshold = args.size() > 5 ? std::stof(args[5]) : 0.0;
FastText fasttext;
fasttext.loadModel(model);
Meter meter(false);
if (input == "-") {
fasttext.test(std::cin, k, threshold, meter);
} else {
std::ifstream ifs(input);
if (!ifs.is_open()) {
std::cerr << "Test file cannot be opened!" << std::endl;
exit(EXIT_FAILURE);
}
fasttext.test(ifs, k, threshold, meter);
}
if (perLabel) {
std::cout << std::fixed << std::setprecision(6);
auto writeMetric = [](const std::string& name, double value) {
std::cout << name << " : ";
if (std::isfinite(value)) {
std::cout << value;
} else {
std::cout << "--------";
}
std::cout << " ";
};
std::shared_ptr<const Dictionary> dict = fasttext.getDictionary();
for (int32_t labelId = 0; labelId < dict->nlabels(); labelId++) {
writeMetric("F1-Score", meter.f1Score(labelId));
writeMetric("Precision", meter.precision(labelId));
writeMetric("Recall", meter.recall(labelId));
std::cout << " " << dict->getLabel(labelId) << std::endl;
}
}
meter.writeGeneralMetrics(std::cout, k);
exit(0);
}