diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index 4fcdba31..e5877a5b 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -1,5 +1,5 @@ add_subdirectory(metadata) -add_subdirectory(recommendation-features) +add_subdirectory(recommendation) diff --git a/src/tools/recommendation-features/CMakeLists.txt b/src/tools/recommendation-features/CMakeLists.txt deleted file mode 100644 index 25508174..00000000 --- a/src/tools/recommendation-features/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ - -add_executable(lms-recommendation-features - LmsRecommendationFeatures.cpp - ) - -target_link_libraries(lms-recommendation-features PRIVATE - lmsdatabase - lmsrecommendation - ) - diff --git a/src/tools/recommendation/CMakeLists.txt b/src/tools/recommendation/CMakeLists.txt new file mode 100644 index 00000000..75b3e5d0 --- /dev/null +++ b/src/tools/recommendation/CMakeLists.txt @@ -0,0 +1,11 @@ + +add_executable(lms-recommendation + LmsRecommendation.cpp + ) + +target_link_libraries(lms-recommendation PRIVATE + lmsdatabase + lmsrecommendation + ) + +install(TARGETS lms-recommendation DESTINATION bin) diff --git a/src/tools/recommendation-features/LmsRecommendationFeatures.cpp b/src/tools/recommendation/LmsRecommendation.cpp similarity index 83% rename from src/tools/recommendation-features/LmsRecommendationFeatures.cpp rename to src/tools/recommendation/LmsRecommendation.cpp index a8c591be..2ff53459 100644 --- a/src/tools/recommendation-features/LmsRecommendationFeatures.cpp +++ b/src/tools/recommendation/LmsRecommendation.cpp @@ -32,8 +32,6 @@ #include "utils/Service.hpp" #include "utils/StreamLogger.hpp" #include "recommendation/IEngine.hpp" -#include "recommendation/IClassifier.hpp" -#include "recommendation/FeaturesClassifierCreator.hpp" int main(int argc, char *argv[]) { @@ -51,16 +49,15 @@ int main(int argc, char *argv[]) Database::Db db {ServiceProvider::get()->getPath("working-dir") / "lms.db"}; Database::Session session {db}; - // may be long... - std::cout << "Classifying tracks..." << std::endl; - auto classifier {Recommendation::createFeaturesClassifier()}; - std::cout << "Classifying tracks DONE" << std::endl; + std::cout << "Creating recommendation engine..." << std::endl; + const auto engine {Recommendation::createEngine(session)}; + std::cout << "DONE!" << std::endl; - const std::vector trackIds = std::invoke([&]() - { - auto transaction {session.createSharedTransaction()}; - return Database::Track::getAllIdsWithFeatures(session); - }); + const std::vector trackIds {[&]() + { + auto transaction {session.createSharedTransaction()}; + return Database::Track::getAllIds(session); + }()}; std::cout << "*** Tracks (" << trackIds.size() << ") ***" << std::endl; for (Database::IdType trackId : trackIds) @@ -83,7 +80,7 @@ int main(int argc, char *argv[]) }; std::cout << "Processing track '" << trackToString(trackId) << std::endl; - for (Database::IdType similarTrackId : classifier->getSimilarTracks(session, {trackId}, 3)) + for (Database::IdType similarTrackId : engine->getSimilarTracks(session, {trackId}, 3)) std::cout << "\t- Similar track '" << trackToString(similarTrackId) << std::endl; } @@ -105,7 +102,7 @@ int main(int argc, char *argv[]) }; std::cout << "Processing release '" << releaseToString(releaseId) << "'" << std::endl; - for (Database::IdType similarReleaseId : classifier->getSimilarReleases(session, {releaseId}, 3)) + for (Database::IdType similarReleaseId : engine->getSimilarReleases(session, {releaseId}, 3)) std::cout << "\t- Similar release '" << releaseToString(similarReleaseId) << "'" << std::endl; } @@ -127,7 +124,7 @@ int main(int argc, char *argv[]) }; std::cout << "Processing artist '" << artistToString(artistId) << "'" << std::endl; - for (Database::IdType similarArtistId : classifier->getSimilarArtists(session, {artistId}, 3)) + for (Database::IdType similarArtistId : engine->getSimilarArtists(session, {artistId}, 3)) std::cout << "\t- Similar artist '" << artistToString(similarArtistId) << "'" << std::endl; }