@ -25,7 +25,6 @@ It's probably not necessary for you to replicate my development environment in o
- [[https://www.docker.com/][Docker]]
- [[https://www.docker.com/][Docker]]
- [[https://clojure.org/releases/downloads][Clojure Version 1.10+]]
- [[https://clojure.org/releases/downloads][Clojure Version 1.10+]]
- [[https://nodejs.org/en/download/][NodeJS]]
- [[https://github.com/clojure-emacs/cider][Emacs and CIDER]]
- [[https://github.com/clojure-emacs/cider][Emacs and CIDER]]
*** Steps
*** Steps
@ -33,7 +32,8 @@ It's probably not necessary for you to replicate my development environment in o
1. Run ~./db/run.sh && ./kv/run.sh~ to start the docker containers for the database and key-value store.
1. Run ~./db/run.sh && ./kv/run.sh~ to start the docker containers for the database and key-value store.
a. The ~run.sh~ scripts only need to run once. They initialize development data containers. Subsequent development can continue with ~docker start db && docker start kv~.
a. The ~run.sh~ scripts only need to run once. They initialize development data containers. Subsequent development can continue with ~docker start db && docker start kv~.
2. Start a Clojure REPL in Emacs, evaluate the ~dev/user.clj~ namespace, and run ~(init)~
2. Start a Clojure REPL in Emacs, evaluate the ~dev/user.clj~ namespace, and run ~(init)~
3. Run ~npx shadow-cljs watch :frontend~ in the ~web/wgu-app~ directory to build the web interface.
3. Visit ~http://localhost:8000/wgu~
** How To Run Software Locally
** How To Run Software Locally
@ -46,7 +46,7 @@ It's probably not necessary for you to replicate my development environment in o
1. Run ~./db/run.sh && ./kv/run.sh~ to start the docker containers for the database and key-value store.
1. Run ~./db/run.sh && ./kv/run.sh~ to start the docker containers for the database and key-value store.
a. The ~run.sh~ scripts only need to run once. They initialize development data containers. Subsequent development can continue with ~docker start db && docker start kv~.
a. The ~run.sh~ scripts only need to run once. They initialize development data containers. Subsequent development can continue with ~docker start db && docker start kv~.
2. The application's ~jar~ builds with a ~make~ run from the root directory. (See [[file:../Makefile][Makefile]]).
2. The application's ~jar~ builds with a ~make~ run from the root directory. (See [[file:../Makefile][Makefile]]).
3. Navigate to the root directory of this git repo and run ~java -jar darklimericks-dev.jar~
3. Navigate to the root directory of this git repo and run ~java -jar darklimericks.jar~
4. Visit http://localhost:8000/wgu
4. Visit http://localhost:8000/wgu
* A. Letter Of Transmittal
* A. Letter Of Transmittal
@ -94,9 +94,9 @@ This software will accomplish its primary objective if it makes its way into the
Several secondary objectives are also desirable and reasonably expected. The architecture of the software lends itself to existing as several independently useful modules.
Several secondary objectives are also desirable and reasonably expected. The architecture of the software lends itself to existing as several independently useful modules.
For example, the Markov Model can be conveniently backed by a Trie data structure. This Trie data structure can be released as its own software package and used any application that benefits from prefix matching.
For example, the [[https://en.wikipedia.org/wiki/Hidden_Markov_model][Markov Model]] can be conveniently backed by a [[https://en.wikipedia.org/wiki/Trie][Trie data structure]]. This Trie data structure can be released as its own software package and used any application that benefits from prefix matching.
Another example is the package that turns phrases into phones. That package can find use for a number of natural language processing and natural language generation tasks, aside from the task required by this particular project.
Another example is the package that turns phrases into phones (symbols of pronunciation). That package can find use for a number of natural language processing and natural language generation tasks, aside from the task required by this particular project.
** Development Methodology - Agile
** Development Methodology - Agile
@ -126,9 +126,9 @@ These are my estimates for the time and cost of different aspects of initial dev
| Total | 330 | $3,300 |
| Total | 330 | $3,300 |
**NO the impact of the solution on stakeholders
**Stakeholder Impact
This seems redundant or irrelevant. The only stakeholders in the project I'm describing would be the record labels or songwriters and the impact on them is described in the [[Benefits]] section above.
The only stakeholders in the project will be the record labels or songwriters. I describe the only impact to them in the [[Benefits]] section above.
** Ethical And Legal Considerations
** Ethical And Legal Considerations
@ -199,7 +199,11 @@ Much of data science is exploratory and taking an iterative Agile approach can t
** Deliverables
** Deliverables
Three aspects of this project are available as open source repositories on Github.
- Supporting libraries source code
- Application source code
- Deployed application
The supporting libraries of this project are available as open source repositories on Github.
The interactive query for the above can be found at https://darklimericks.com/wgu/lyric-from-seed?seed=don%27t+bother+me. Note that, since these lyrics are randomly generated, your results will vary.
Interactive query capability at [[https://darklimericks.com/wgu]].
*** Complete Lyric Containing Suffix
This interactive query will return a list of lyrics completing the given suffix with randomly generated prefixes.
For example, let's say a songwriter liked the phrase ~rejected by society~ above, but they want to brainstorm different beginnings of that line.
| we have rejected by society | -0.6593112258099724 | -0.03878301328293955 |
| she rejected by society | -1.0992937688019973 | -0.07852098348585694 |
| i was despised and rejected by society | -3.5925278871864497 | -0.15619686466028043 |
| the exiled and rejected by society | -3.6944350673672144 | -0.21731970984513027 |
| to smell the death mutilation rejected by society | -5.899263654566813 | -0.2458026522736172 |
| time goes yearning again only to be rejected by society | -2.764028722852962 | -0.08375844614705946 |
| you won't survive the mutilation rejected by society | -2.5299544352623986 | -0.09035551554508567 |
| your rejected by society | -1.4840658880458661 | -0.10600470628899043 |
| dividing lands, rejected by society | -2.2975947244849793 | -0.12764415136027663 |
| a voice summons all angry exiled and rejected by society | -9.900290597751827 | -0.17679090353128263 |
| protect the rejected by society | -4.210741684291847 | -0.28071611228612314 |
The interactive query for the above can be found at https://darklimericks.com/wgu/rhyming-lyric?rhyming-lyric-target=rejected+by+society. Note again that your results will vary.
** Implementation Of Machine Learning Methods
** Implementation Of Machine Learning Methods
@ -749,12 +832,14 @@ Provide rhyming lyric suggestions optionally constrained by syllable count.
- [ ] Given a word or phrase, suggest rhymes (ranked by quality) (Trie)
- [ ] Given a word or phrase, suggest rhymes (ranked by quality) (Trie)
- [ ] Given a word or phrase, suggest lyric completion (Hidden Markov Model)
- [ ] Given a word or phrase, suggest lyric completion (Hidden Markov Model)
+ [ ] Restrict suggestion by syllable count
+ [ ](Future iteration) Restrict suggestion by syllable count
+ [ ] Restrict suggestion by rhyme quality
+ [ ] Restrict suggestion by rhyme quality
+ [ ] Show graph of suggestions with perplexity on one axis and rhyme quality on the other
+ [ ](Future iteration) Show graph of suggestions with perplexity on one axis and rhyme quality on the other
** Data Sets
** Data Sets
The dataset was obtained from http://darklyrics.com.