To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Revision:

root / testapp / Loader.cpp @ 49:a6a71d1c7eb7

History | View | Annotate | Download (5.09 KB)

1
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
2

    
3
#include "Objects.h"
4
#include "EditDistance.h"
5
#include "TypeRegistrar.h"
6

    
7
#include <dataquay/BasicStore.h>
8
#include <dataquay/objectmapper/ObjectLoader.h>
9
#include <dataquay/objectmapper/TypeMapping.h>
10
#include <dataquay/Debug.h>
11

    
12
#include <QTemporaryFile>
13
#include <QMultiMap>
14

    
15
#include <iostream>
16

    
17
#ifdef TURBOT_PROFILER
18
#include <base/Profiler.h>
19
#endif
20

    
21
using namespace Dataquay;
22
using namespace ClassicalData;
23

    
24
bool
25
load(BasicStore *store, QString resourceName)
26
{
27
    QTemporaryFile tf;
28
    if (!tf.open()) return false;
29
    tf.setAutoRemove(true);
30
    QFile f(resourceName);
31
    if (!f.open(QFile::ReadOnly)) return false;
32
    QByteArray buffer;
33
    int bufsiz = 10240;
34
    while (!f.atEnd()) {
35
        buffer = f.read(bufsiz);
36
        tf.write(buffer);
37
    }
38
    std::cerr << "unpacked, importing..." << std::endl;
39
    store->import("file://" + tf.fileName(),
40
                  BasicStore::ImportPermitDuplicates, // fastest mode
41
                  "ntriples");
42
    return true;
43
}
44

    
45
int main(int argc, char **argv)
46
{
47
    BasicStore *store = new BasicStore();
48
    store->setBaseUri(Uri("http://dbtune.org/classical/resource/"));
49
    ObjectLoader *loader = new ObjectLoader(store);
50
    TypeMapping tm;
51

    
52
    TypeRegistrar::registerTypes();
53
    TypeRegistrar::addMappings(store, &tm);
54

    
55
    loader->setTypeMapping(tm);
56

    
57
    if (!load(store, ":data.ntriples")) {
58
        std::cerr << "Failed to unpack and load resource" << std::endl;
59
        return 1;
60
    }
61

    
62
    std::cerr << "imported, mapping..." << std::endl;
63

    
64
//    QObject *root = loader->loadAllObjects(0);
65

    
66
    QObjectList objects;
67
    try {
68
        objects = loader->loadAll();
69
//        std::cerr << "Loaded " << objects.size() << " objects" << std::endl;
70
    } catch (const std::exception &e) {
71
        std::cerr << "mapping failed: " << e.what() << std::endl;
72
        return 1;
73
    }
74

    
75
    delete loader;
76
    delete store;
77

    
78
    QObjectList composers;
79
//    std::cerr << "Known composers:" << std::endl;
80
    foreach (QObject *o, objects) {
81
        Composer *c = qobject_cast<Composer *>(o);
82
        if (c) {
83
            QString sn = c->getSortName(true);
84
            if (sn == "") {
85
                std::cerr << "WARNING: Composer " << c->name().toStdString() << " (URI " << c->property("uri").toString().toStdString() << ") has no sort-name" << std::endl;
86
            } else {
87
//                std::cerr << sn.toStdString() << std::endl;
88
            }
89
            composers.push_back(c);
90
        }
91
    }
92
/*
93
    for (int i = 1; i < argc; ++i) {
94
        QString name = argv[i];
95
        std::cerr << "Name: " << name.toStdString() << std::endl;
96
        QMultiMap<int, QString> matches;
97
        foreach (QObject *o, composers) {
98
            Composer *c = qobject_cast<Composer *>(o);
99
            if (!c) continue;
100
            int value = c->matchFuzzyName(name);
101
            matches.insert(value, c->getSortName(false));
102
        }
103
        for (QMultiMap<int, QString>::const_iterator i = matches.begin();
104
             i != matches.end(); ++i) {
105
            if (i.key() < 0) continue;
106
            std::cerr << "Score: " << i.key() << " for name: " << i.value().toStdString() << std::endl;
107
        }
108
    }
109
*/
110
    while (!std::cin.eof()) {
111
        std::cerr << std::endl << "Enter composer name: ";
112
        std::string s;
113
        getline(std::cin, s);
114
        std::cerr << "[" << s << "]" << std::endl;
115
        QMultiMap<float, QString> matches;
116
        QRegExp sre("[\\., -]+");
117
        QStringList elements = QString::fromStdString(s)
118
            .toLower().split(sre, QString::SkipEmptyParts);
119
        foreach (QObject *o, composers) {
120
            Composer *c = qobject_cast<Composer *>(o);
121
            if (!c) continue;
122
//            float value = c->matchFuzzyName(elements);
123
            float value = c->matchTyping(QString::fromStdString(s));
124
            matches.insert(value, c->getSortName(false));
125
        }
126
        int n = 0;
127
        for (QMultiMap<float, QString>::const_iterator i = matches.end();
128
             i != matches.begin(); ) {
129
            --i;
130
            if (i.key() <= 0) continue;
131
            if (n == 0) {
132
                std::cerr << "Best match:" << std::endl << " * ";
133
            } else if (n == 1) {
134
                std::cerr << "Other candidate(s):" << std::endl << " - ";
135
            } else {
136
                std::cerr << " - ";
137
            }
138
            std::cerr << i.value().toStdString();
139
            for (int c = i.value().length(); c < 40; ++c) std::cerr << " ";
140
            std::cerr << "[" << i.key() << "]" << std::endl;
141
            if (++n > 5) break;
142
        }
143
        if (n == 0) std::cerr << "No matches" << std::endl;
144
    }        
145

    
146
#ifdef TURBOT_PROFILER
147
    Turbot::Profiler::dump();
148
#endif
149

    
150
/*
151
    std::cerr << "mapped, storing again..." << std::endl;
152

153
    // let's try just writing out the composers
154

155
    BasicStore *outstore = new BasicStore();
156
    outstore->setBaseUri("http://dbtune.org/classical/resource/");
157
    ObjectMapper *outmapper = new ObjectMapper(outstore);
158

159
    TypeRegistrar::addMappings(outstore, outmapper);
160

161
//    outmapper->storeObjectTree(root);
162
    outmapper->storeAllObjects(composers);
163
    delete outmapper;
164

165
    std::cerr << "stored, saving..." << std::endl;
166

167
    outstore->save("test-output.ttl");
168

169
    delete outstore;
170
*/
171
}
172