From 874f7df31528b2d551b65f378ca180dbbb2a8a15 Mon Sep 17 00:00:00 2001 From: Eric Ihli Date: Fri, 16 Jul 2021 00:12:35 -0500 Subject: [PATCH] Add lyric suggestion code --- .../com/darklimericks/linguistics/core.clj | 22 +++++++++++++++++++ web/src/com/darklimericks/server/handlers.clj | 19 ++++++++++++++++ web/src/com/darklimericks/server/router.clj | 2 +- web/src/com/darklimericks/server/views.clj | 7 ++++++ web/wgu-app/shadow-cljs.edn | 3 ++- 5 files changed, 51 insertions(+), 2 deletions(-) diff --git a/web/src/com/darklimericks/linguistics/core.clj b/web/src/com/darklimericks/linguistics/core.clj index d1f870f..b0cafd2 100644 --- a/web/src/com/darklimericks/linguistics/core.clj +++ b/web/src/com/darklimericks/linguistics/core.clj @@ -309,6 +309,7 @@ ["IH2" "N" "V" "IH2" "Z" "AH0" "B" "IH1" "L" "AH0" "T" "IY0"])) ) + (comment (markov/rhymes models/rhyme-trie-unstressed-trailing-consonants (phonetics/get-phones "food")) (rhymes "food") @@ -317,3 +318,24 @@ (rhymes-with-frequencies "technology" models/markov-trie models/database) ) + + +(defn lyric-suggestions [seed-phrase trie database] + (let [realize-seed (fn [seed] + (string/join " " (-> (map database (reverse seed)) + butlast + rest)))] + (loop [seed (vec (reverse (map #(get database % 0) (string/split seed-phrase #" "))))] + (cond + (< 20 (count seed)) (realize-seed seed) + (= (database prhyme/BOS) (peek seed)) (realize-seed seed) + :else (recur (conj seed (markov/get-next-markov + trie + seed + (partial remove (fn [child] + (= (.key child) (database prhyme/EOS))))))))))) + +(comment + (lyric-suggestions "bother me " models/markov-trie models/database) + + ) diff --git a/web/src/com/darklimericks/server/handlers.clj b/web/src/com/darklimericks/server/handlers.clj index f50b290..d3d7593 100644 --- a/web/src/com/darklimericks/server/handlers.clj +++ b/web/src/com/darklimericks/server/handlers.clj @@ -264,6 +264,25 @@ :opts {}} (views/wgu request))})) +(defn lyric-suggestions [db cache] + (fn [request] + (let [suggestions + (repeatedly + 5 + #(linguistics/lyric-suggestions + (-> request :params :rhyme-target) + models/markov-trie + models/database))] + {:status 201 + :headers {"Content-Type" "text/html; charset=utf-8"} + :body (views/wrap-with-js + {:db db + :request request + :opts {}} + (views/lyric-suggestions + request + suggestions))}))) + (defn show-rhyme-suggestion [db cache] (fn [request] (let [suggestions (linguistics/rhymes-with-frequencies-and-rhyme-quality diff --git a/web/src/com/darklimericks/server/router.clj b/web/src/com/darklimericks/server/router.clj index 1ee3d2c..1f4ef89 100644 --- a/web/src/com/darklimericks/server/router.clj +++ b/web/src/com/darklimericks/server/router.clj @@ -37,7 +37,7 @@ ["/wgu" {:name ::wgu :get {:handler (handlers/wgu db cache)} - :post {:handler (handlers/show-rhyme-suggestion db cache)}}] + :post {:handler (handlers/lyric-suggestions db cache)}}] ["/.well-known/*" (ring/create-file-handler {:root "resources/public/.well-known"})]]] (timbre/info "Starting router.") diff --git a/web/src/com/darklimericks/server/views.clj b/web/src/com/darklimericks/server/views.clj index 0d14fcb..54d02a5 100644 --- a/web/src/com/darklimericks/server/views.clj +++ b/web/src/com/darklimericks/server/views.clj @@ -298,6 +298,13 @@ [:iframe {:src "/assets/README_WGU.htm" :style "background-color: white; width: 100%; height: 760px;"}]]) +(defn lyric-suggestions + [request suggestions] + [:div + (wgu request) + (for [suggestion suggestions] + [:div suggestion])]) + (defn show-rhyme-suggestion [request suggestions] [:div diff --git a/web/wgu-app/shadow-cljs.edn b/web/wgu-app/shadow-cljs.edn index f422b27..7c514e9 100644 --- a/web/wgu-app/shadow-cljs.edn +++ b/web/wgu-app/shadow-cljs.edn @@ -5,7 +5,8 @@ "src/test"] :dependencies - [[metasoarous/oz "1.6.0-alpha34"]] + [[metasoarous/oz "1.6.0-alpha34"] + [cljs-ajax/cljs-ajax "0.8.3"]] :builds {:frontend