Chris@28: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@28: Chris@28: #ifndef _CLASSICAL_DATA_MATCHER_H_ Chris@28: #define _CLASSICAL_DATA_MATCHER_H_ Chris@28: Chris@34: #include "Objects.h" Chris@34: Chris@28: #include Chris@28: Chris@30: #include Chris@34: #include Chris@30: Chris@28: namespace ClassicalData { Chris@28: Chris@30: class Guess Chris@30: { Chris@30: public: Chris@30: Guess(float c, NamedEntity *e) : m_confidence(c), m_entity(e) { } Chris@30: Chris@30: float confidence() const { return m_confidence; } Chris@30: void setConfidence(float c) { m_confidence = c; } Chris@30: Chris@34: NamedEntity *entity() const { return m_entity; } Chris@30: void setEntity(NamedEntity *e) { m_entity = e; } Chris@30: Chris@30: bool operator<(const Guess &g) const { Chris@34: if (confidence() == g.confidence()) { Chris@34: return entity()->uri() < g.entity()->uri(); Chris@34: } Chris@34: return (confidence() > g.confidence()); // n.b. most confident first Chris@30: } Chris@30: Chris@30: private: Chris@30: float m_confidence; Chris@30: NamedEntity *m_entity; Chris@30: }; Chris@30: Chris@30: typedef QList GuessList; Chris@34: typedef std::set GuessSet; Chris@28: Chris@28: class Matcher Chris@28: { Chris@28: public: Chris@30: // Results are guaranteed to be returned in order from most to Chris@30: // least confident Chris@33: virtual GuessList match(QString text, int maxResults, Chris@33: float threshold = 0.f) const = 0; Chris@28: }; Chris@28: Chris@28: class ComposerTypingQuickMatcher : public Matcher Chris@28: { Chris@28: public: Chris@30: ComposerTypingQuickMatcher(QList cl); Chris@33: virtual GuessList match(QString text, int maxResults, Chris@33: float threshold = 0.f) const; Chris@28: Chris@28: private: Chris@33: QList m_composers; Chris@28: }; Chris@28: Chris@28: class ComposerTypingThoroughMatcher : public Matcher Chris@28: { Chris@28: public: Chris@30: ComposerTypingThoroughMatcher(QList cl); Chris@33: virtual GuessList match(QString text, int maxResults, Chris@33: float threshold = 0.f) const; Chris@28: Chris@28: private: Chris@33: QList m_composers; Chris@33: }; Chris@33: Chris@33: class ComposerFullTextMatcher : public Matcher Chris@33: { Chris@33: public: Chris@33: ComposerFullTextMatcher(QList cl); Chris@33: virtual GuessList match(QString text, int maxResults, Chris@33: float threshold = 0.f) const; Chris@33: Chris@33: private: Chris@33: QList m_composers; Chris@28: }; Chris@28: Chris@34: class WorkCatalogueMatcher : public Matcher Chris@34: { Chris@34: public: Chris@34: WorkCatalogueMatcher(QList wl); Chris@34: virtual GuessList match(QString text, int maxResults, Chris@34: float threshold = 0.f) const; Chris@34: Chris@34: private: Chris@34: QList m_works; Chris@34: }; Chris@34: Chris@34: class WorkTitleMatcher : public Matcher Chris@34: { Chris@34: public: Chris@34: WorkTitleMatcher(QList wl); Chris@34: virtual GuessList match(QString text, int maxResults, Chris@34: float threshold = 0.f) const; Chris@34: Chris@34: private: Chris@34: QList m_works; Chris@34: }; Chris@34: Chris@28: } Chris@28: Chris@30: Q_DECLARE_METATYPE(ClassicalData::Guess*); Chris@30: Chris@28: #endif Chris@28: