annotate testapp/Loader.cpp @ 53:bcea875d8d2f tip

More build fixes
author Chris Cannam
date Thu, 16 Oct 2014 19:03:51 +0100
parents c83cc68483ea
children
rev   line source
Chris@10 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@7 2
Chris@7 3 #include "Objects.h"
Chris@11 4 #include "EditDistance.h"
Chris@7 5 #include "TypeRegistrar.h"
Chris@7 6
Chris@7 7 #include <dataquay/BasicStore.h>
Chris@28 8 #include <dataquay/objectmapper/ObjectLoader.h>
Chris@28 9 #include <dataquay/objectmapper/TypeMapping.h>
Chris@10 10 #include <dataquay/Debug.h>
Chris@7 11
Chris@7 12 #include <QTemporaryFile>
Chris@10 13 #include <QMultiMap>
Chris@7 14
Chris@7 15 #include <iostream>
Chris@7 16
Chris@11 17 #ifdef TURBOT_PROFILER
Chris@11 18 #include <base/Profiler.h>
Chris@11 19 #endif
Chris@11 20
Chris@7 21 using namespace Dataquay;
Chris@7 22 using namespace ClassicalData;
Chris@7 23
Chris@7 24 bool
Chris@7 25 load(BasicStore *store, QString resourceName)
Chris@7 26 {
Chris@7 27 QTemporaryFile tf;
Chris@7 28 if (!tf.open()) return false;
Chris@7 29 tf.setAutoRemove(true);
Chris@7 30 QFile f(resourceName);
Chris@7 31 if (!f.open(QFile::ReadOnly)) return false;
Chris@7 32 QByteArray buffer;
Chris@7 33 int bufsiz = 10240;
Chris@7 34 while (!f.atEnd()) {
Chris@7 35 buffer = f.read(bufsiz);
Chris@7 36 tf.write(buffer);
Chris@7 37 }
Chris@51 38 tf.close();
Chris@7 39 std::cerr << "unpacked, importing..." << std::endl;
Chris@7 40 store->import("file://" + tf.fileName(),
Chris@7 41 BasicStore::ImportPermitDuplicates, // fastest mode
Chris@7 42 "ntriples");
Chris@7 43 return true;
Chris@7 44 }
Chris@7 45
Chris@7 46 int main(int argc, char **argv)
Chris@7 47 {
Chris@7 48 BasicStore *store = new BasicStore();
Chris@20 49 store->setBaseUri(Uri("http://dbtune.org/classical/resource/"));
Chris@28 50 ObjectLoader *loader = new ObjectLoader(store);
Chris@28 51 TypeMapping tm;
Chris@7 52
Chris@22 53 TypeRegistrar::registerTypes();
Chris@28 54 TypeRegistrar::addMappings(store, &tm);
Chris@28 55
Chris@28 56 loader->setTypeMapping(tm);
Chris@7 57
Chris@7 58 if (!load(store, ":data.ntriples")) {
Chris@7 59 std::cerr << "Failed to unpack and load resource" << std::endl;
Chris@7 60 return 1;
Chris@7 61 }
Chris@7 62
Chris@7 63 std::cerr << "imported, mapping..." << std::endl;
Chris@7 64
Chris@31 65 // QObject *root = loader->loadAllObjects(0);
Chris@31 66
Chris@31 67 QObjectList objects;
Chris@31 68 try {
Chris@31 69 objects = loader->loadAll();
Chris@49 70 // std::cerr << "Loaded " << objects.size() << " objects" << std::endl;
Chris@31 71 } catch (const std::exception &e) {
Chris@31 72 std::cerr << "mapping failed: " << e.what() << std::endl;
Chris@31 73 return 1;
Chris@31 74 }
Chris@8 75
Chris@28 76 delete loader;
Chris@7 77 delete store;
Chris@11 78
Chris@9 79 QObjectList composers;
Chris@11 80 // std::cerr << "Known composers:" << std::endl;
Chris@31 81 foreach (QObject *o, objects) {
Chris@10 82 Composer *c = qobject_cast<Composer *>(o);
Chris@10 83 if (c) {
Chris@10 84 QString sn = c->getSortName(true);
Chris@10 85 if (sn == "") {
Chris@10 86 std::cerr << "WARNING: Composer " << c->name().toStdString() << " (URI " << c->property("uri").toString().toStdString() << ") has no sort-name" << std::endl;
Chris@10 87 } else {
Chris@11 88 // std::cerr << sn.toStdString() << std::endl;
Chris@10 89 }
Chris@10 90 composers.push_back(c);
Chris@10 91 }
Chris@9 92 }
Chris@11 93 /*
Chris@10 94 for (int i = 1; i < argc; ++i) {
Chris@10 95 QString name = argv[i];
Chris@9 96 std::cerr << "Name: " << name.toStdString() << std::endl;
Chris@10 97 QMultiMap<int, QString> matches;
Chris@9 98 foreach (QObject *o, composers) {
Chris@9 99 Composer *c = qobject_cast<Composer *>(o);
Chris@9 100 if (!c) continue;
Chris@10 101 int value = c->matchFuzzyName(name);
Chris@10 102 matches.insert(value, c->getSortName(false));
Chris@9 103 }
Chris@10 104 for (QMultiMap<int, QString>::const_iterator i = matches.begin();
Chris@10 105 i != matches.end(); ++i) {
Chris@10 106 if (i.key() < 0) continue;
Chris@10 107 std::cerr << "Score: " << i.key() << " for name: " << i.value().toStdString() << std::endl;
Chris@10 108 }
Chris@9 109 }
Chris@11 110 */
Chris@11 111 while (!std::cin.eof()) {
Chris@14 112 std::cerr << std::endl << "Enter composer name: ";
Chris@11 113 std::string s;
Chris@11 114 getline(std::cin, s);
Chris@15 115 std::cerr << "[" << s << "]" << std::endl;
Chris@14 116 QMultiMap<float, QString> matches;
Chris@13 117 QRegExp sre("[\\., -]+");
Chris@13 118 QStringList elements = QString::fromStdString(s)
Chris@13 119 .toLower().split(sre, QString::SkipEmptyParts);
Chris@11 120 foreach (QObject *o, composers) {
Chris@11 121 Composer *c = qobject_cast<Composer *>(o);
Chris@11 122 if (!c) continue;
Chris@16 123 // float value = c->matchFuzzyName(elements);
Chris@16 124 float value = c->matchTyping(QString::fromStdString(s));
Chris@11 125 matches.insert(value, c->getSortName(false));
Chris@11 126 }
Chris@11 127 int n = 0;
Chris@14 128 for (QMultiMap<float, QString>::const_iterator i = matches.end();
Chris@11 129 i != matches.begin(); ) {
Chris@11 130 --i;
Chris@15 131 if (i.key() <= 0) continue;
Chris@11 132 if (n == 0) {
Chris@11 133 std::cerr << "Best match:" << std::endl << " * ";
Chris@11 134 } else if (n == 1) {
Chris@11 135 std::cerr << "Other candidate(s):" << std::endl << " - ";
Chris@11 136 } else {
Chris@11 137 std::cerr << " - ";
Chris@11 138 }
Chris@14 139 std::cerr << i.value().toStdString();
Chris@14 140 for (int c = i.value().length(); c < 40; ++c) std::cerr << " ";
Chris@14 141 std::cerr << "[" << i.key() << "]" << std::endl;
Chris@15 142 if (++n > 5) break;
Chris@11 143 }
Chris@11 144 if (n == 0) std::cerr << "No matches" << std::endl;
Chris@11 145 }
Chris@11 146
Chris@11 147 #ifdef TURBOT_PROFILER
Chris@11 148 Turbot::Profiler::dump();
Chris@11 149 #endif
Chris@8 150
Chris@9 151 /*
Chris@8 152 std::cerr << "mapped, storing again..." << std::endl;
Chris@8 153
Chris@9 154 // let's try just writing out the composers
Chris@9 155
Chris@8 156 BasicStore *outstore = new BasicStore();
Chris@8 157 outstore->setBaseUri("http://dbtune.org/classical/resource/");
Chris@8 158 ObjectMapper *outmapper = new ObjectMapper(outstore);
Chris@8 159
Chris@8 160 TypeRegistrar::addMappings(outstore, outmapper);
Chris@8 161
Chris@9 162 // outmapper->storeObjectTree(root);
Chris@9 163 outmapper->storeAllObjects(composers);
Chris@8 164 delete outmapper;
Chris@8 165
Chris@8 166 std::cerr << "stored, saving..." << std::endl;
Chris@8 167
Chris@8 168 outstore->save("test-output.ttl");
Chris@8 169
Chris@8 170 delete outstore;
Chris@9 171 */
Chris@7 172 }
Chris@7 173