annotate testapp/Loader.cpp @ 13:a1d67e136c30 classical-rdf

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