From 368766974edbe423259c77c11994413a5232f29f Mon Sep 17 00:00:00 2001 From: emeric Date: Thu, 21 Mar 2019 13:06:25 +0100 Subject: [PATCH] Similarity: fallback on tags if the artist or release has no track containing features --- src/similarity/SimilaritySearcher.cpp | 8 ++++++-- .../features/SimilarityFeaturesSearcher.cpp | 12 ++++++++++++ .../features/SimilarityFeaturesSearcher.hpp | 3 +++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/similarity/SimilaritySearcher.cpp b/src/similarity/SimilaritySearcher.cpp index 42fcf98b..190fc89a 100644 --- a/src/similarity/SimilaritySearcher.cpp +++ b/src/similarity/SimilaritySearcher.cpp @@ -60,7 +60,9 @@ Searcher::getSimilarReleases(Wt::Dbo::Session& session, Database::IdType release auto somSearcher = _somAddon.getSearcher(); if (method == Database::SimilaritySettings::PreferredMethod::Features - || (method == Database::SimilaritySettings::PreferredMethod::Auto && somSearcher)) + || (method == Database::SimilaritySettings::PreferredMethod::Auto + && somSearcher + && somSearcher->isReleaseClassified(releaseId))) { return somSearcher->getSimilarReleases(releaseId, maxCount); } @@ -75,7 +77,9 @@ Searcher::getSimilarArtists(Wt::Dbo::Session& session, Database::IdType artistId auto somSearcher = _somAddon.getSearcher(); if (method == Database::SimilaritySettings::PreferredMethod::Features - || (method == Database::SimilaritySettings::PreferredMethod::Auto && somSearcher)) + || (method == Database::SimilaritySettings::PreferredMethod::Auto + && somSearcher + && somSearcher->isArtistClassified(artistId))) { return somSearcher->getSimilarArtists(artistId, maxCount); } diff --git a/src/similarity/features/SimilarityFeaturesSearcher.cpp b/src/similarity/features/SimilarityFeaturesSearcher.cpp index 3f086e06..02479a5a 100644 --- a/src/similarity/features/SimilarityFeaturesSearcher.cpp +++ b/src/similarity/features/SimilarityFeaturesSearcher.cpp @@ -221,6 +221,18 @@ FeaturesSearcher::isValid() const return _network.get() != nullptr; } +bool +FeaturesSearcher::isReleaseClassified(Database::IdType releaseId) const +{ + return (_releasePositions.find(releaseId) != _releasePositions.end()); +} + +bool +FeaturesSearcher::isArtistClassified(Database::IdType artistId) const +{ + return (_artistPositions.find(artistId) != _artistPositions.end()); +} + std::vector FeaturesSearcher::getSimilarTracks(const std::set& tracksIds, std::size_t maxCount) const { diff --git a/src/similarity/features/SimilarityFeaturesSearcher.hpp b/src/similarity/features/SimilarityFeaturesSearcher.hpp index 6b97fa8b..b311cf98 100644 --- a/src/similarity/features/SimilarityFeaturesSearcher.hpp +++ b/src/similarity/features/SimilarityFeaturesSearcher.hpp @@ -43,6 +43,9 @@ class FeaturesSearcher bool isValid() const; + bool isReleaseClassified(Database::IdType releaseId) const; + bool isArtistClassified(Database::IdType releaseId) const; + std::vector getSimilarTracks(const std::set& tracksId, std::size_t maxCount) const; std::vector getSimilarReleases(Database::IdType releaseId, std::size_t maxCount) const; std::vector getSimilarArtists(Database::IdType artistId, std::size_t maxCount) const;