Chris@28
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@28
|
2
|
Chris@28
|
3 #ifndef _CLASSICAL_DATA_MATCHER_H_
|
Chris@28
|
4 #define _CLASSICAL_DATA_MATCHER_H_
|
Chris@28
|
5
|
Chris@34
|
6 #include "Objects.h"
|
Chris@34
|
7
|
Chris@28
|
8 #include <dataquay/Uri.h>
|
Chris@28
|
9
|
Chris@30
|
10 #include <QHash>
|
Chris@34
|
11 #include <set>
|
Chris@30
|
12
|
Chris@28
|
13 namespace ClassicalData {
|
Chris@28
|
14
|
Chris@30
|
15 class Guess
|
Chris@30
|
16 {
|
Chris@30
|
17 public:
|
Chris@30
|
18 Guess(float c, NamedEntity *e) : m_confidence(c), m_entity(e) { }
|
Chris@30
|
19
|
Chris@30
|
20 float confidence() const { return m_confidence; }
|
Chris@30
|
21 void setConfidence(float c) { m_confidence = c; }
|
Chris@30
|
22
|
Chris@34
|
23 NamedEntity *entity() const { return m_entity; }
|
Chris@30
|
24 void setEntity(NamedEntity *e) { m_entity = e; }
|
Chris@30
|
25
|
Chris@30
|
26 bool operator<(const Guess &g) const {
|
Chris@34
|
27 if (confidence() == g.confidence()) {
|
Chris@34
|
28 return entity()->uri() < g.entity()->uri();
|
Chris@34
|
29 }
|
Chris@34
|
30 return (confidence() > g.confidence()); // n.b. most confident first
|
Chris@30
|
31 }
|
Chris@30
|
32
|
Chris@30
|
33 private:
|
Chris@30
|
34 float m_confidence;
|
Chris@30
|
35 NamedEntity *m_entity;
|
Chris@30
|
36 };
|
Chris@30
|
37
|
Chris@30
|
38 typedef QList<Guess> GuessList;
|
Chris@34
|
39 typedef std::set<Guess> GuessSet;
|
Chris@28
|
40
|
Chris@28
|
41 class Matcher
|
Chris@28
|
42 {
|
Chris@28
|
43 public:
|
Chris@30
|
44 // Results are guaranteed to be returned in order from most to
|
Chris@30
|
45 // least confident
|
Chris@33
|
46 virtual GuessList match(QString text, int maxResults,
|
Chris@33
|
47 float threshold = 0.f) const = 0;
|
Chris@28
|
48 };
|
Chris@28
|
49
|
Chris@28
|
50 class ComposerTypingQuickMatcher : public Matcher
|
Chris@28
|
51 {
|
Chris@28
|
52 public:
|
Chris@30
|
53 ComposerTypingQuickMatcher(QList<Composer *> cl);
|
Chris@33
|
54 virtual GuessList match(QString text, int maxResults,
|
Chris@33
|
55 float threshold = 0.f) const;
|
Chris@28
|
56
|
Chris@28
|
57 private:
|
Chris@33
|
58 QList<Composer *> m_composers;
|
Chris@28
|
59 };
|
Chris@28
|
60
|
Chris@28
|
61 class ComposerTypingThoroughMatcher : public Matcher
|
Chris@28
|
62 {
|
Chris@28
|
63 public:
|
Chris@30
|
64 ComposerTypingThoroughMatcher(QList<Composer *> cl);
|
Chris@33
|
65 virtual GuessList match(QString text, int maxResults,
|
Chris@33
|
66 float threshold = 0.f) const;
|
Chris@28
|
67
|
Chris@28
|
68 private:
|
Chris@33
|
69 QList<Composer *> m_composers;
|
Chris@33
|
70 };
|
Chris@33
|
71
|
Chris@33
|
72 class ComposerFullTextMatcher : public Matcher
|
Chris@33
|
73 {
|
Chris@33
|
74 public:
|
Chris@33
|
75 ComposerFullTextMatcher(QList<Composer *> cl);
|
Chris@33
|
76 virtual GuessList match(QString text, int maxResults,
|
Chris@33
|
77 float threshold = 0.f) const;
|
Chris@33
|
78
|
Chris@33
|
79 private:
|
Chris@33
|
80 QList<Composer *> m_composers;
|
Chris@28
|
81 };
|
Chris@28
|
82
|
Chris@34
|
83 class WorkCatalogueMatcher : public Matcher
|
Chris@34
|
84 {
|
Chris@34
|
85 public:
|
Chris@34
|
86 WorkCatalogueMatcher(QList<Work *> wl);
|
Chris@34
|
87 virtual GuessList match(QString text, int maxResults,
|
Chris@34
|
88 float threshold = 0.f) const;
|
Chris@34
|
89
|
Chris@34
|
90 private:
|
Chris@34
|
91 QList<Work *> m_works;
|
Chris@34
|
92 };
|
Chris@34
|
93
|
Chris@34
|
94 class WorkTitleMatcher : public Matcher
|
Chris@34
|
95 {
|
Chris@34
|
96 public:
|
Chris@34
|
97 WorkTitleMatcher(QList<Work *> wl);
|
Chris@34
|
98 virtual GuessList match(QString text, int maxResults,
|
Chris@34
|
99 float threshold = 0.f) const;
|
Chris@34
|
100
|
Chris@34
|
101 private:
|
Chris@34
|
102 QList<Work *> m_works;
|
Chris@34
|
103 };
|
Chris@34
|
104
|
Chris@28
|
105 }
|
Chris@28
|
106
|
Chris@30
|
107 Q_DECLARE_METATYPE(ClassicalData::Guess*);
|
Chris@30
|
108
|
Chris@28
|
109 #endif
|
Chris@28
|
110
|