Mercurial > hg > classical
view testapp/Loader.cpp @ 53:bcea875d8d2f tip
More build fixes
author | Chris Cannam |
---|---|
date | Thu, 16 Oct 2014 19:03:51 +0100 |
parents | c83cc68483ea |
children |
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ #include "Objects.h" #include "EditDistance.h" #include "TypeRegistrar.h" #include <dataquay/BasicStore.h> #include <dataquay/objectmapper/ObjectLoader.h> #include <dataquay/objectmapper/TypeMapping.h> #include <dataquay/Debug.h> #include <QTemporaryFile> #include <QMultiMap> #include <iostream> #ifdef TURBOT_PROFILER #include <base/Profiler.h> #endif using namespace Dataquay; using namespace ClassicalData; bool load(BasicStore *store, QString resourceName) { QTemporaryFile tf; if (!tf.open()) return false; tf.setAutoRemove(true); QFile f(resourceName); if (!f.open(QFile::ReadOnly)) return false; QByteArray buffer; int bufsiz = 10240; while (!f.atEnd()) { buffer = f.read(bufsiz); tf.write(buffer); } tf.close(); std::cerr << "unpacked, importing..." << std::endl; store->import("file://" + tf.fileName(), BasicStore::ImportPermitDuplicates, // fastest mode "ntriples"); return true; } int main(int argc, char **argv) { BasicStore *store = new BasicStore(); store->setBaseUri(Uri("http://dbtune.org/classical/resource/")); ObjectLoader *loader = new ObjectLoader(store); TypeMapping tm; TypeRegistrar::registerTypes(); TypeRegistrar::addMappings(store, &tm); loader->setTypeMapping(tm); if (!load(store, ":data.ntriples")) { std::cerr << "Failed to unpack and load resource" << std::endl; return 1; } std::cerr << "imported, mapping..." << std::endl; // QObject *root = loader->loadAllObjects(0); QObjectList objects; try { objects = loader->loadAll(); // std::cerr << "Loaded " << objects.size() << " objects" << std::endl; } catch (const std::exception &e) { std::cerr << "mapping failed: " << e.what() << std::endl; return 1; } delete loader; delete store; QObjectList composers; // std::cerr << "Known composers:" << std::endl; foreach (QObject *o, objects) { Composer *c = qobject_cast<Composer *>(o); if (c) { QString sn = c->getSortName(true); if (sn == "") { std::cerr << "WARNING: Composer " << c->name().toStdString() << " (URI " << c->property("uri").toString().toStdString() << ") has no sort-name" << std::endl; } else { // std::cerr << sn.toStdString() << std::endl; } composers.push_back(c); } } /* for (int i = 1; i < argc; ++i) { QString name = argv[i]; std::cerr << "Name: " << name.toStdString() << std::endl; QMultiMap<int, QString> matches; foreach (QObject *o, composers) { Composer *c = qobject_cast<Composer *>(o); if (!c) continue; int value = c->matchFuzzyName(name); matches.insert(value, c->getSortName(false)); } for (QMultiMap<int, QString>::const_iterator i = matches.begin(); i != matches.end(); ++i) { if (i.key() < 0) continue; std::cerr << "Score: " << i.key() << " for name: " << i.value().toStdString() << std::endl; } } */ while (!std::cin.eof()) { std::cerr << std::endl << "Enter composer name: "; std::string s; getline(std::cin, s); std::cerr << "[" << s << "]" << std::endl; QMultiMap<float, QString> matches; QRegExp sre("[\\., -]+"); QStringList elements = QString::fromStdString(s) .toLower().split(sre, QString::SkipEmptyParts); foreach (QObject *o, composers) { Composer *c = qobject_cast<Composer *>(o); if (!c) continue; // float value = c->matchFuzzyName(elements); float value = c->matchTyping(QString::fromStdString(s)); matches.insert(value, c->getSortName(false)); } int n = 0; for (QMultiMap<float, QString>::const_iterator i = matches.end(); i != matches.begin(); ) { --i; if (i.key() <= 0) continue; if (n == 0) { std::cerr << "Best match:" << std::endl << " * "; } else if (n == 1) { std::cerr << "Other candidate(s):" << std::endl << " - "; } else { std::cerr << " - "; } std::cerr << i.value().toStdString(); for (int c = i.value().length(); c < 40; ++c) std::cerr << " "; std::cerr << "[" << i.key() << "]" << std::endl; if (++n > 5) break; } if (n == 0) std::cerr << "No matches" << std::endl; } #ifdef TURBOT_PROFILER Turbot::Profiler::dump(); #endif /* std::cerr << "mapped, storing again..." << std::endl; // let's try just writing out the composers BasicStore *outstore = new BasicStore(); outstore->setBaseUri("http://dbtune.org/classical/resource/"); ObjectMapper *outmapper = new ObjectMapper(outstore); TypeRegistrar::addMappings(outstore, outmapper); // outmapper->storeObjectTree(root); outmapper->storeAllObjects(composers); delete outmapper; std::cerr << "stored, saving..." << std::endl; outstore->save("test-output.ttl"); delete outstore; */ }