Gitignore unneeded files

main
Eric Ihli 3 years ago
parent 4689e93242
commit 3ad6976661

4
.gitignore vendored

@ -4,3 +4,7 @@
/kv/data
/web/resources/public/wgu/cljs-runtime/
/web/resources/public/cljs-runtime/
cert.pem
key.pem
darklimericks.jar
.well-known

@ -10,5 +10,12 @@ frontend http-in
redirect scheme https if !{ ssl_fc }
default_backend app
frontend stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:admin
backend app
server darklimericks darklimericks:8000

@ -5,7 +5,7 @@ FULLCHAIN_PEM="${FULLCHAIN_PEM:-/etc/letsencrypt/live/darklimericks.com/fullchai
docker run \
--add-host darklimericks:$HOST_IP \
-p 80:80 -p 443:443 \
-p 80:80 -p 443:443 -p 8404:8404 \
--sysctl net.ipv4.ip_unprivileged_port_start=0 \
--mount type=bind,source=$FULLCHAIN_PEM,target=/etc/ssl/cert.pem \
--mount type=bind,source=$(pwd)/haproxy.cfg,target=/usr/local/etc/haproxy/haproxy.cfg \

@ -0,0 +1,7 @@
#+TITLE: Ssl
#+begin_src sh
certbot certonly -d darklimericks.com --webroot=/root/darklimericks/web/resources/public
#+end_src

@ -536,22 +536,22 @@ This interactive query will return a list of rhyming phrases to any word or phra
For example, the phrase ~don't bother me~ returns the following results.
| Rhyme | Quality | Lyric | Perplexity |
| forsee | 5 | i'm not one of us forsee | -0.150812027039802 |
| wholeheartedly | 5 | purification has replaced wholeheartedly | -0.23227389702753784 |
| merci | 5 | domine, non merci | -0.2567394520839273 |
| oversea | 5 | i let's torch oversea | -0.3940312599117676 |
| me | 4 | that is found in me | -0.12708613143793374 |
| thee | 4 | you ask thee | -0.20919974848757947 |
| free | 4 | direct from me free | -0.29056603191271085 |
| harmony | 3 | it's time to go, this harmony | -0.06634608923365708 |
| society | 3 | mutilation rejected by society | -0.10624747249791901 |
| prophecy | 3 | take us to the brink of disaster dreamer just a savage prophecy | -0.13097443386137644 |
| honesty | 3 | for you my threw all that can be the power not honesty | -0.2423380760939454 |
| constantly | 3 | i thrust my sword into the dragon's annihilation that constantly | -0.2474276676860057 |
| reality | 2 | smack of reality | -0.14811632033013192 |
| eternity | 2 | with trust in loneliness in eternity | -0.1507561510378151 |
| misery | 2 | reminiscing over misery | -0.29506597978960253 |
| Rhyme | Quality | Lyric | Perplexity |
| forsee | 5 | i'm not one of us forsee | -0.150812027039802 |
| wholeheartedly | 5 | purification has replaced wholeheartedly | -0.23227389702753784 |
| merci | 5 | domine, non merci | -0.2567394520839273 |
| oversea | 5 | i let's torch oversea | -0.3940312599117676 |
| me | 4 | that is found in me | -0.12708613143793374 |
| thee | 4 | you ask thee | -0.20919974848757947 |
| free | 4 | direct from me free | -0.29056603191271085 |
| harmony | 3 | it's time to go, this harmony | -0.06634608923365708 |
| society | 3 | mutilation rejected by society | -0.10624747249791901 |
| prophecy | 3 | take us to the brink of disaster dreamer just a savage prophecy | -0.13097443386137644 |
| honesty | 3 | for you my threw all that can be the power not honesty | -0.2423380760939454 |
| constantly | 3 | i thrust my sword into the dragon's annihilation that constantly | -0.2474276676860057 |
| reality | 2 | smack of reality | -0.14811632033013192 |
| eternity | 2 | with trust in loneliness in eternity | -0.1507561510378151 |
| misery | 2 | reminiscing over misery | -0.29506597978960253 |
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.
@ -805,9 +805,17 @@ Security certificates are generated using Let's Encrypt and an Nginx web server
With this precaution in place, attackers will not be able to snoop the content that songwriters are sending to or receiving from the servers.
** TODO Tools To Monitor And Maintain The Product
** Tools To Monitor And Maintain The Product
- Script to auto-update SSL cert
By having the application server behind an HAProxy load balancer, we can take advantage of the built-in HAProxy stats page for monitoring amount of traffic and health of the application servers.
[[file:resources/public/images/stats.png]]
http://darklimericks.com:8404/stats
That page is behind basic authentication with username: admin and password: admin.
The server also includes the ~certbot~ script for updating and maintaining the SSL certificates issued by Let's Encrypt.
** A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types
@ -819,15 +827,15 @@ The first input field is for a word or phrase for which you wish to find a rhyme
The first visualization is a scatter plot of rhyming words with the "quality" of the rhyme on the Y axis and the number of times that rhyming word/phrase occurrs in the training corpus on the X axis.
[[file:resources/images/wgu-vis.png]]
[[file:resources/public/images/wgu-vis.png]]
The second visualization is a word cloud where the size of each word is based on the frequency with which the word appears in the training corpus.
[[file:resources/images/wgu-vis-cloud.png]]
[[file:resources/public/images/wgu-vis-cloud.png]]
The third visualization is a table that lists all of the rhymes, their pronunciations, the rhyme quality, and the frequency. The table is sorted first by the rhyme quality then by the frequency.
[[file:resources/images/wgu-vis-table.png]]
[[file:resources/public/images/wgu-vis-table.png]]
* D. Documentation
:PROPERTIES:
@ -872,11 +880,11 @@ For example, there is natural language processing code at [[https://github.com/e
** Visualizations
[[file:resources/images/rhyme-scatterplot.png]]
[[file:resources/public/images/rhyme-scatterplot.png]]
[[file:resources/images/wordcloud.png]]
[[file:resources/public/images/wordcloud.png]]
[[file:resources/images/rhyme-table.png]]
[[file:resources/public/images/rhyme-table.png]]
** Accuracy

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2021-07-22 Thu 16:36 -->
<!-- 2021-07-22 Thu 19:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>RhymeStorm™ - WGU CSCI Capstone Project</title>
@ -223,111 +223,111 @@
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org5454e30">1. WGU Evaluator Notes</a></li>
<li><a href="#org332d6a9">2. Evaluation Technical Documentation</a>
<li><a href="#org4cefaa0">1. WGU Evaluator Notes</a></li>
<li><a href="#orgffbe1aa">2. Evaluation Technical Documentation</a>
<ul>
<li><a href="#org9e35eac">2.1. How To Initialize Development Environment</a>
<li><a href="#orgc01d9f6">2.1. How To Initialize Development Environment</a>
<ul>
<li><a href="#org53ed308">2.1.1. Required Software</a></li>
<li><a href="#org627686b">2.1.2. Steps</a></li>
<li><a href="#org9efabbc">2.1.1. Required Software</a></li>
<li><a href="#orge60abcc">2.1.2. Steps</a></li>
</ul>
</li>
<li><a href="#orgacd2fed">2.2. How To Run Software Locally</a>
<li><a href="#org6025354">2.2. How To Run Software Locally</a>
<ul>
<li><a href="#org890f3e0">2.2.1. Requirements</a></li>
<li><a href="#orgd128e2c">2.2.2. Steps</a></li>
<li><a href="#orga6816b1">2.2.1. Requirements</a></li>
<li><a href="#org9c9ea6c">2.2.2. Steps</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#letter-of-transmittal">3. A. Letter Of Transmittal</a>
<ul>
<li><a href="#org2546578">3.1. Problem Summary</a></li>
<li><a href="#orgc64cb1d">3.2. Benefits</a></li>
<li><a href="#org97c20cc">3.3. Product - RhymeStorm™</a></li>
<li><a href="#orgf01dccb">3.4. Data</a></li>
<li><a href="#orgb8810d2">3.5. Objectives</a></li>
<li><a href="#orgb5f5726">3.6. Development Methodology - Agile</a></li>
<li><a href="#org8da81df">3.7. Costs</a></li>
<li><a href="#org1d1a06b">3.8. Stakeholder Impact</a></li>
<li><a href="#orga1e0dee">3.9. Ethical And Legal Considerations</a></li>
<li><a href="#orga24c062">3.10. Expertise</a></li>
<li><a href="#orgf81095f">3.1. Problem Summary</a></li>
<li><a href="#org64e00b0">3.2. Benefits</a></li>
<li><a href="#orgb14b33c">3.3. Product - RhymeStorm™</a></li>
<li><a href="#orgda19e86">3.4. Data</a></li>
<li><a href="#org3178691">3.5. Objectives</a></li>
<li><a href="#org92d15a8">3.6. Development Methodology - Agile</a></li>
<li><a href="#orgc85e2ec">3.7. Costs</a></li>
<li><a href="#org5063cda">3.8. Stakeholder Impact</a></li>
<li><a href="#orge21cff8">3.9. Ethical And Legal Considerations</a></li>
<li><a href="#org9a96ebe">3.10. Expertise</a></li>
</ul>
</li>
<li><a href="#executive-summary">4. B. Executive Summary - RhymeStorm™ Technical Notes And Requirements</a>
<ul>
<li><a href="#org6ab0560">4.1. Decision Support Opportunity</a></li>
<li><a href="#org5ef6ba6">4.2. Customer Needs And Product Description</a></li>
<li><a href="#orgae684c2">4.3. Existing Products</a></li>
<li><a href="#org94a5d09">4.4. Available Data And Future Data Lifecycle</a></li>
<li><a href="#orgc05b02d">4.5. Methodology - Agile</a></li>
<li><a href="#org499d289">4.6. Deliverables</a></li>
<li><a href="#org92291d7">4.7. Implementation Plan And Anticipations</a></li>
<li><a href="#org5bba161">4.8. Requirements Validation And Verification</a></li>
<li><a href="#orgd654669">4.9. Programming Environments And Costs</a></li>
<li><a href="#orgda86344">4.10. Timeline And Milestones</a></li>
<li><a href="#orgcf6e440">4.1. Decision Support Opportunity</a></li>
<li><a href="#org2e4989f">4.2. Customer Needs And Product Description</a></li>
<li><a href="#org15e313a">4.3. Existing Products</a></li>
<li><a href="#org73f5d11">4.4. Available Data And Future Data Lifecycle</a></li>
<li><a href="#orgade9e98">4.5. Methodology - Agile</a></li>
<li><a href="#org4d586db">4.6. Deliverables</a></li>
<li><a href="#org66d0062">4.7. Implementation Plan And Anticipations</a></li>
<li><a href="#org0fb5e33">4.8. Requirements Validation And Verification</a></li>
<li><a href="#org6c5045d">4.9. Programming Environments And Costs</a></li>
<li><a href="#orge2ea722">4.10. Timeline And Milestones</a></li>
</ul>
</li>
<li><a href="#requirements-documentation">5. C. RhymeStormg™ Capstone Requirements Documentation</a>
<ul>
<li><a href="#org452ae99">5.1. Descriptive And Predictive Methods</a>
<li><a href="#org3913955">5.1. Descriptive And Predictive Methods</a>
<ul>
<li><a href="#org232ee74">5.1.1. Descriptive Method</a></li>
<li><a href="#orgb60d387">5.1.2. Prescriptive Method</a></li>
<li><a href="#org4755822">5.1.1. Descriptive Method</a></li>
<li><a href="#orgb5dbfc9">5.1.2. Prescriptive Method</a></li>
</ul>
</li>
<li><a href="#orgd14f167">5.2. Datasets</a></li>
<li><a href="#org668aec5">5.3. Decision Support Functionality</a>
<li><a href="#org70c1d6d">5.2. Datasets</a></li>
<li><a href="#org8866e86">5.3. Decision Support Functionality</a>
<ul>
<li><a href="#org29ab43e">5.3.1. Choosing Words For A Lyric Based On Markov Likelihood</a></li>
<li><a href="#org05c55f9">5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality</a></li>
<li><a href="#org808b388">5.3.1. Choosing Words For A Lyric Based On Markov Likelihood</a></li>
<li><a href="#org1cf73a2">5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality</a></li>
</ul>
</li>
<li><a href="#org20049ec">5.4. Featurizing, Parsing, Cleaning, And Wrangling Data</a></li>
<li><a href="#org2b9f4c2">5.5. Data Exploration And Preparation</a></li>
<li><a href="#org93e6329">5.6. Data Visualization Functionalities For Data Exploration And Inspection</a></li>
<li><a href="#orged17a7d">5.7. Implementation Of Interactive Queries</a>
<li><a href="#org0826033">5.4. Featurizing, Parsing, Cleaning, And Wrangling Data</a></li>
<li><a href="#orgb68a8db">5.5. Data Exploration And Preparation</a></li>
<li><a href="#orgc3d773c">5.6. Data Visualization Functionalities For Data Exploration And Inspection</a></li>
<li><a href="#org4dee712">5.7. Implementation Of Interactive Queries</a>
<ul>
<li><a href="#org56ef5e0">5.7.1. Generate Rhyming Lyrics</a></li>
<li><a href="#orgff14c85">5.7.2. Complete Lyric Containing Suffix</a></li>
<li><a href="#org0034b1f">5.7.1. Generate Rhyming Lyrics</a></li>
<li><a href="#orgb384533">5.7.2. Complete Lyric Containing Suffix</a></li>
</ul>
</li>
<li><a href="#org64c77ab">5.8. Implementation Of Machine Learning Methods</a></li>
<li><a href="#org8dd0d28">5.9. Functionalities To Evaluate The Accuracy Of The Data Product</a></li>
<li><a href="#orge7cbec6">5.10. Security Features</a></li>
<li><a href="#orgaf85ff8">5.11. <span class="todo TODO">TODO</span> Tools To Monitor And Maintain The Product</a></li>
<li><a href="#orgfa0ff15">5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types</a></li>
<li><a href="#org04d6baa">5.8. Implementation Of Machine Learning Methods</a></li>
<li><a href="#org915745c">5.9. Functionalities To Evaluate The Accuracy Of The Data Product</a></li>
<li><a href="#org620c631">5.10. Security Features</a></li>
<li><a href="#org4bf19f5">5.11. Tools To Monitor And Maintain The Product</a></li>
<li><a href="#org56f79e3">5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types</a></li>
</ul>
</li>
<li><a href="#remaining-documentation">6. D. Documentation</a>
<ul>
<li><a href="#orgb500abb">6.1. Business Vision</a>
<li><a href="#orga8a2b80">6.1. Business Vision</a>
<ul>
<li><a href="#orge3dab01">6.1.1. Requirements</a></li>
<li><a href="#org10db781">6.1.1. Requirements</a></li>
</ul>
</li>
<li><a href="#orgbf1af68">6.2. Data Sets</a></li>
<li><a href="#orgd13dfaf">6.3. Data Analysis</a></li>
<li><a href="#org3681223">6.4. Assessment</a></li>
<li><a href="#orgc532c50">6.5. Visualizations</a></li>
<li><a href="#orgbac9951">6.6. Accuracy</a>
<li><a href="#orgc562680">6.2. Data Sets</a></li>
<li><a href="#org90ce434">6.3. Data Analysis</a></li>
<li><a href="#org38e35cd">6.4. Assessment</a></li>
<li><a href="#org8282426">6.5. Visualizations</a></li>
<li><a href="#orgfc55be7">6.6. Accuracy</a>
<ul>
<li><a href="#org652cf82">6.6.1. Percentage Of Generated Lines That Are Valid English Sentences</a></li>
<li><a href="#org34c05ab">6.6.1. Percentage Of Generated Lines That Are Valid English Sentences</a></li>
</ul>
</li>
<li><a href="#org6ee5077">6.7. Testing</a></li>
<li><a href="#org3a978f5">6.8. Source Code</a>
<li><a href="#org85e75eb">6.7. Testing</a></li>
<li><a href="#orgbd2aaf7">6.8. Source Code</a>
<ul>
<li><a href="#orge2c7328">6.8.1. Tightly Packed Trie</a></li>
<li><a href="#orgcd18f6c">6.8.2. Phonetics</a></li>
<li><a href="#orgebe6ea7">6.8.3. Rhyming</a></li>
<li><a href="#org48f7c89">6.8.4. Web Server And User Interface</a></li>
<li><a href="#orgef379f2">6.8.1. Tightly Packed Trie</a></li>
<li><a href="#org5aff5d6">6.8.2. Phonetics</a></li>
<li><a href="#org0fca7e3">6.8.3. Rhyming</a></li>
<li><a href="#orgd2422e9">6.8.4. Web Server And User Interface</a></li>
</ul>
</li>
<li><a href="#org5b7bf1b">6.9. Quick Start</a>
<li><a href="#org08f848b">6.9. Quick Start</a>
<ul>
<li><a href="#org9fee706">6.9.1. How To Initialize Development Environment</a></li>
<li><a href="#orgfc1399f">6.9.2. How To Run Software Locally</a></li>
<li><a href="#org3923d45">6.9.1. How To Initialize Development Environment</a></li>
<li><a href="#orge987ec3">6.9.2. How To Run Software Locally</a></li>
</ul>
</li>
</ul>
@ -336,8 +336,8 @@
</div>
</div>
<div id="outline-container-org5454e30" class="outline-2">
<h2 id="org5454e30"><span class="section-number-2">1</span> WGU Evaluator Notes</h2>
<div id="outline-container-org4cefaa0" class="outline-2">
<h2 id="org4cefaa0"><span class="section-number-2">1</span> WGU Evaluator Notes</h2>
<div class="outline-text-2" id="text-1">
<p>
Hello! I hope you enjoy your time with this evaluation!
@ -361,20 +361,20 @@ After I describe the steps to initialize a development environment, you&rsquo;ll
</div>
</div>
<div id="outline-container-org332d6a9" class="outline-2">
<h2 id="org332d6a9"><span class="section-number-2">2</span> Evaluation Technical Documentation</h2>
<div id="outline-container-orgffbe1aa" class="outline-2">
<h2 id="orgffbe1aa"><span class="section-number-2">2</span> Evaluation Technical Documentation</h2>
<div class="outline-text-2" id="text-2">
<p>
It&rsquo;s probably not necessary for you to replicate my development environment in order to evaluate this project. You can access the deployed application at <a href="https://darklimericks.com/wgu">https://darklimericks.com/wgu</a> and the libraries and supporting code that I wrote for this project at <a href="https://github.com/eihli/clj-tightly-packed-trie">https://github.com/eihli/clj-tightly-packed-trie</a>, <a href="https://github.com/eihli/syllabify">https://github.com/eihli/syllabify</a>, and <a href="https://github.com/eihli/prhyme">https://github.com/eihli/prhyme</a>. The web server and web application is not hosted publicly but you will find it uploaded with my submission as a <code>.tar</code> archive.
</p>
</div>
<div id="outline-container-org9e35eac" class="outline-3">
<h3 id="org9e35eac"><span class="section-number-3">2.1</span> How To Initialize Development Environment</h3>
<div id="outline-container-orgc01d9f6" class="outline-3">
<h3 id="orgc01d9f6"><span class="section-number-3">2.1</span> How To Initialize Development Environment</h3>
<div class="outline-text-3" id="text-2-1">
</div>
<div id="outline-container-org53ed308" class="outline-4">
<h4 id="org53ed308"><span class="section-number-4">2.1.1</span> Required Software</h4>
<div id="outline-container-org9efabbc" class="outline-4">
<h4 id="org9efabbc"><span class="section-number-4">2.1.1</span> Required Software</h4>
<div class="outline-text-4" id="text-2-1-1">
<ul class="org-ul">
<li><a href="https://www.docker.com/">Docker</a></li>
@ -384,8 +384,8 @@ It&rsquo;s probably not necessary for you to replicate my development environmen
</div>
</div>
<div id="outline-container-org627686b" class="outline-4">
<h4 id="org627686b"><span class="section-number-4">2.1.2</span> Steps</h4>
<div id="outline-container-orge60abcc" class="outline-4">
<h4 id="orge60abcc"><span class="section-number-4">2.1.2</span> Steps</h4>
<div class="outline-text-4" id="text-2-1-2">
<ol class="org-ol">
<li>Run <code>./db/run.sh &amp;&amp; ./kv/run.sh</code> to start the docker containers for the database and key-value store.
@ -399,12 +399,12 @@ It&rsquo;s probably not necessary for you to replicate my development environmen
</div>
</div>
<div id="outline-container-orgacd2fed" class="outline-3">
<h3 id="orgacd2fed"><span class="section-number-3">2.2</span> How To Run Software Locally</h3>
<div id="outline-container-org6025354" class="outline-3">
<h3 id="org6025354"><span class="section-number-3">2.2</span> How To Run Software Locally</h3>
<div class="outline-text-3" id="text-2-2">
</div>
<div id="outline-container-org890f3e0" class="outline-4">
<h4 id="org890f3e0"><span class="section-number-4">2.2.1</span> Requirements</h4>
<div id="outline-container-orga6816b1" class="outline-4">
<h4 id="orga6816b1"><span class="section-number-4">2.2.1</span> Requirements</h4>
<div class="outline-text-4" id="text-2-2-1">
<ul class="org-ul">
<li><a href="https://www.java.com/download/ie_manual.jsp">Java</a></li>
@ -413,8 +413,8 @@ It&rsquo;s probably not necessary for you to replicate my development environmen
</div>
</div>
<div id="outline-container-orgd128e2c" class="outline-4">
<h4 id="orgd128e2c"><span class="section-number-4">2.2.2</span> Steps</h4>
<div id="outline-container-org9c9ea6c" class="outline-4">
<h4 id="org9c9ea6c"><span class="section-number-4">2.2.2</span> Steps</h4>
<div class="outline-text-4" id="text-2-2-2">
<ol class="org-ol">
<li>Run <code>./db/run.sh &amp;&amp; ./kv/run.sh</code> to start the docker containers for the database and key-value store.
@ -435,8 +435,8 @@ It&rsquo;s probably not necessary for you to replicate my development environmen
<div class="outline-text-2" id="text-letter-of-transmittal">
</div>
<div id="outline-container-org2546578" class="outline-3">
<h3 id="org2546578"><span class="section-number-3">3.1</span> Problem Summary</h3>
<div id="outline-container-orgf81095f" class="outline-3">
<h3 id="orgf81095f"><span class="section-number-3">3.1</span> Problem Summary</h3>
<div class="outline-text-3" id="text-3-1">
<p>
Songwriters, artists, and record labels can save time and discover better lyrics with the help of a machine learning tool that supports their creative endeavours.
@ -448,8 +448,8 @@ Songwriters have several old-fashioned tools at their disposal including diction
</div>
</div>
<div id="outline-container-orgc64cb1d" class="outline-3">
<h3 id="orgc64cb1d"><span class="section-number-3">3.2</span> Benefits</h3>
<div id="outline-container-org64e00b0" class="outline-3">
<h3 id="org64e00b0"><span class="section-number-3">3.2</span> Benefits</h3>
<div class="outline-text-3" id="text-3-2">
<p>
How many sensible phrases can you think of that rhyme with &ldquo;war on poverty&rdquo;? What if I say that there&rsquo;s a restriction to only come up with phrases that are exactly 14 syllables? That&rsquo;s a common restriction when a songwriter is trying to match the meter of a previous line. What if I add another restriction that there must be primary stress at certain spots in that 14 syllable phrase?
@ -465,8 +465,8 @@ And this is a process that is perfect for machine learning. Machine learning can
</div>
</div>
<div id="outline-container-org97c20cc" class="outline-3">
<h3 id="org97c20cc"><span class="section-number-3">3.3</span> Product - RhymeStorm™</h3>
<div id="outline-container-orgb14b33c" class="outline-3">
<h3 id="orgb14b33c"><span class="section-number-3">3.3</span> Product - RhymeStorm™</h3>
<div class="outline-text-3" id="text-3-3">
<p>
RhymeStorm™ is a tool to help songwriters brainstorm. It provides lyrics automatically generated based on training data from existing songs while adhering to restrictions based on rhyme scheme, meter, genre, and more.
@ -494,8 +494,8 @@ This auto-complete functionality will be similar to the auto-complete that is co
</div>
</div>
<div id="outline-container-orgf01dccb" class="outline-3">
<h3 id="orgf01dccb"><span class="section-number-3">3.4</span> Data</h3>
<div id="outline-container-orgda19e86" class="outline-3">
<h3 id="orgda19e86"><span class="section-number-3">3.4</span> Data</h3>
<div class="outline-text-3" id="text-3-4">
<p>
The initial model will be trained on the lyrics from <a href="http://darklyrics.com">http://darklyrics.com</a>. This is a publicly available data set with minimal meta-data. Record labels will have more valuable datasets that will include meta-data along with lyrics, such as the date the song was popular, the number of radio plays of the song, the profit of the song/artist, etc&#x2026;
@ -507,8 +507,8 @@ The software can be augmented with additional algorithms to account for the type
</div>
</div>
<div id="outline-container-orgb8810d2" class="outline-3">
<h3 id="orgb8810d2"><span class="section-number-3">3.5</span> Objectives</h3>
<div id="outline-container-org3178691" class="outline-3">
<h3 id="org3178691"><span class="section-number-3">3.5</span> Objectives</h3>
<div class="outline-text-3" id="text-3-5">
<p>
This software will accomplish its primary objective if it makes its way into the daily toolkit of a handful of singers/songwriters.
@ -528,8 +528,8 @@ Another example is the package that turns phrases into phones (symbols of pronun
</div>
</div>
<div id="outline-container-orgb5f5726" class="outline-3">
<h3 id="orgb5f5726"><span class="section-number-3">3.6</span> Development Methodology - Agile</h3>
<div id="outline-container-org92d15a8" class="outline-3">
<h3 id="org92d15a8"><span class="section-number-3">3.6</span> Development Methodology - Agile</h3>
<div class="outline-text-3" id="text-3-6">
<p>
This project will be developed with an iterative Agile methodology. Since a large part of data science and machine learning is exploration, this project will benefit from ongoing exploration in tandem with development.
@ -545,8 +545,8 @@ The prices quoted below are for an initial minimum-viable-product that will serv
</div>
</div>
<div id="outline-container-org8da81df" class="outline-3">
<h3 id="org8da81df"><span class="section-number-3">3.7</span> Costs</h3>
<div id="outline-container-orgc85e2ec" class="outline-3">
<h3 id="orgc85e2ec"><span class="section-number-3">3.7</span> Costs</h3>
<div class="outline-text-3" id="text-3-7">
<p>
Funding requirements are minimal. The initial dataset is public and freely available. On a typical consumer laptop, Hidden Markov Models can be trained on fairly large datasets in short time and the training doesn&rsquo;t require the use of expensive hardware like the GPUs used to train Deep Neural Networks.
@ -630,17 +630,17 @@ These are my estimates for the time and cost of different aspects of initial dev
</div>
</div>
<div id="outline-container-org1d1a06b" class="outline-3">
<h3 id="org1d1a06b"><span class="section-number-3">3.8</span> Stakeholder Impact</h3>
<div id="outline-container-org5063cda" class="outline-3">
<h3 id="org5063cda"><span class="section-number-3">3.8</span> Stakeholder Impact</h3>
<div class="outline-text-3" id="text-3-8">
<p>
The only stakeholders in the project will be the record labels or songwriters. I describe the only impact to them in the <a href="#orgc64cb1d">3.2</a> section above.
The only stakeholders in the project will be the record labels or songwriters. I describe the only impact to them in the <a href="#org64e00b0">3.2</a> section above.
</p>
</div>
</div>
<div id="outline-container-orga1e0dee" class="outline-3">
<h3 id="orga1e0dee"><span class="section-number-3">3.9</span> Ethical And Legal Considerations</h3>
<div id="outline-container-orge21cff8" class="outline-3">
<h3 id="orge21cff8"><span class="section-number-3">3.9</span> Ethical And Legal Considerations</h3>
<div class="outline-text-3" id="text-3-9">
<p>
Web scraping, the method used to obtain the initial dataset from <a href="http://darklyrics.com">http://darklyrics.com</a>, is protected given the ruling in <a href="https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn">https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn</a>.
@ -652,8 +652,8 @@ The use of publicly available data in generative works is less clear. But Micros
</div>
</div>
<div id="outline-container-orga24c062" class="outline-3">
<h3 id="orga24c062"><span class="section-number-3">3.10</span> Expertise</h3>
<div id="outline-container-org9a96ebe" class="outline-3">
<h3 id="org9a96ebe"><span class="section-number-3">3.10</span> Expertise</h3>
<div class="outline-text-3" id="text-3-10">
<p>
I have 10 years experience as a programmer and have worked extensively on both frontend technologies like HTML/JavaScript, backend technologies like Django, and building libraries/packages/frameworks.
@ -674,8 +674,8 @@ Write an executive summary directed to IT professionals that addresses each of t
</p>
</div>
<div id="outline-container-org6ab0560" class="outline-3">
<h3 id="org6ab0560"><span class="section-number-3">4.1</span> Decision Support Opportunity</h3>
<div id="outline-container-orgcf6e440" class="outline-3">
<h3 id="orgcf6e440"><span class="section-number-3">4.1</span> Decision Support Opportunity</h3>
<div class="outline-text-3" id="text-4-1">
<p>
Songwriters expend a lot of time and effort finding the perfect rhyming word or phrase. RhymeStorm™ is going to amplify user&rsquo;s creative abilities by searching its machine learning model for sensible and proven-successful words and phrases that meet the rhyme scheme and meter requirements requested by the user.
@ -687,8 +687,8 @@ When a songwriter needs to find likely phrases that rhyme with &ldquo;war on pov
</div>
</div>
<div id="outline-container-org5ef6ba6" class="outline-3">
<h3 id="org5ef6ba6"><span class="section-number-3">4.2</span> Customer Needs And Product Description</h3>
<div id="outline-container-org2e4989f" class="outline-3">
<h3 id="org2e4989f"><span class="section-number-3">4.2</span> Customer Needs And Product Description</h3>
<div class="outline-text-3" id="text-4-2">
<p>
Songwriters spend money on dictionaries, compilations of slang, thesauruses, and phrase dictionaries. They spend their time daydreaming, brainstorming, contemplating, and mixing and matching the knowledge they acquire through these traditional means.
@ -708,8 +708,8 @@ Computers can process and sort this information and sort the results by quality
</div>
</div>
<div id="outline-container-orgae684c2" class="outline-3">
<h3 id="orgae684c2"><span class="section-number-3">4.3</span> Existing Products</h3>
<div id="outline-container-org15e313a" class="outline-3">
<h3 id="org15e313a"><span class="section-number-3">4.3</span> Existing Products</h3>
<div class="outline-text-3" id="text-4-3">
<p>
We&rsquo;re all familiar with dictionaries, thesauruses, and their shortcomings.
@ -725,8 +725,8 @@ RhymeZone is limited in its capability. It doesn&rsquo;t do well finding rhymes
</div>
</div>
<div id="outline-container-org94a5d09" class="outline-3">
<h3 id="org94a5d09"><span class="section-number-3">4.4</span> Available Data And Future Data Lifecycle</h3>
<div id="outline-container-org73f5d11" class="outline-3">
<h3 id="org73f5d11"><span class="section-number-3">4.4</span> Available Data And Future Data Lifecycle</h3>
<div class="outline-text-3" id="text-4-4">
<p>
The initial dataset will be gathered by downloading lyrics from <a href="http://darklyrics.com">http://darklyrics.com</a> and future models can be generated by downloading lyrics from other websites. Alternatively, data can be provided by record labels and combined with meta-data that the record label may have, such as how many radio plays each song gets and how much profit they make from each song.
@ -750,8 +750,8 @@ Each new model can be uploaded to the web server and users can select which mode
</div>
</div>
<div id="outline-container-orgc05b02d" class="outline-3">
<h3 id="orgc05b02d"><span class="section-number-3">4.5</span> Methodology - Agile</h3>
<div id="outline-container-orgade9e98" class="outline-3">
<h3 id="orgade9e98"><span class="section-number-3">4.5</span> Methodology - Agile</h3>
<div class="outline-text-3" id="text-4-5">
<p>
RhymeStorm™ development will proceed with an iterative Agile methodology. It will be composed of several independent modules that can be worked on independently, in parallel, and iteratively.
@ -775,8 +775,8 @@ Much of data science is exploratory and taking an iterative Agile approach can t
</div>
</div>
<div id="outline-container-org499d289" class="outline-3">
<h3 id="org499d289"><span class="section-number-3">4.6</span> Deliverables</h3>
<div id="outline-container-org4d586db" class="outline-3">
<h3 id="org4d586db"><span class="section-number-3">4.6</span> Deliverables</h3>
<div class="outline-text-3" id="text-4-6">
<ul class="org-ul">
<li>Supporting libraries source code</li>
@ -810,8 +810,8 @@ The trained data model and web interface has been deployed at the following addr
</div>
</div>
<div id="outline-container-org92291d7" class="outline-3">
<h3 id="org92291d7"><span class="section-number-3">4.7</span> Implementation Plan And Anticipations</h3>
<div id="outline-container-org66d0062" class="outline-3">
<h3 id="org66d0062"><span class="section-number-3">4.7</span> Implementation Plan And Anticipations</h3>
<div class="outline-text-3" id="text-4-7">
<p>
I&rsquo;ll start by writing and releasing the supporting libraries and packages: Tries, Syllabification/Phonetics, Rhyming.
@ -831,8 +831,8 @@ In anticipation of user growth, I&rsquo;ll be deploying the final product on Dig
</div>
</div>
<div id="outline-container-org5bba161" class="outline-3">
<h3 id="org5bba161"><span class="section-number-3">4.8</span> Requirements Validation And Verification</h3>
<div id="outline-container-org0fb5e33" class="outline-3">
<h3 id="org0fb5e33"><span class="section-number-3">4.8</span> Requirements Validation And Verification</h3>
<div class="outline-text-3" id="text-4-8">
<p>
the methods for validating and verifying that the developed data product meets the requirements and subsequently the needs of the customers
@ -852,8 +852,8 @@ The final website will integrate multiple technologies and the integrations won&
</div>
</div>
<div id="outline-container-orgd654669" class="outline-3">
<h3 id="orgd654669"><span class="section-number-3">4.9</span> Programming Environments And Costs</h3>
<div id="outline-container-org6c5045d" class="outline-3">
<h3 id="org6c5045d"><span class="section-number-3">4.9</span> Programming Environments And Costs</h3>
<div class="outline-text-3" id="text-4-9">
<p>
the programming environments and any related costs, as well as the human resources that are necessary to execute each phase in the development of the data product
@ -877,8 +877,8 @@ All code was written and all models were trained on a Lenovo T15G with an Intel
</div>
</div>
<div id="outline-container-orgda86344" class="outline-3">
<h3 id="orgda86344"><span class="section-number-3">4.10</span> Timeline And Milestones</h3>
<div id="outline-container-orge2ea722" class="outline-3">
<h3 id="orge2ea722"><span class="section-number-3">4.10</span> Timeline And Milestones</h3>
<div class="outline-text-3" id="text-4-10">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -956,16 +956,16 @@ RhymeStorm™ is an application to help singers and songwriters brainstorm new l
</p>
</div>
<div id="outline-container-org452ae99" class="outline-3">
<h3 id="org452ae99"><span class="section-number-3">5.1</span> Descriptive And Predictive Methods</h3>
<div id="outline-container-org3913955" class="outline-3">
<h3 id="org3913955"><span class="section-number-3">5.1</span> Descriptive And Predictive Methods</h3>
<div class="outline-text-3" id="text-5-1">
</div>
<div id="outline-container-org232ee74" class="outline-4">
<h4 id="org232ee74"><span class="section-number-4">5.1.1</span> Descriptive Method</h4>
<div id="outline-container-org4755822" class="outline-4">
<h4 id="org4755822"><span class="section-number-4">5.1.1</span> Descriptive Method</h4>
<div class="outline-text-4" id="text-5-1-1">
</div>
<ol class="org-ol">
<li><a id="orga8f8f4c"></a>Most Common Grammatical Structures In A Set Of Lyrics<br />
<li><a id="orgcb020b6"></a>Most Common Grammatical Structures In A Set Of Lyrics<br />
<div class="outline-text-5" id="text-5-1-1-1">
<p>
By filtering songs by metrics such as popularity, number of awards, etc&#x2026; we can use this software package to determine the most common grammatical phrase structure for different filtered categories.
@ -1042,12 +1042,12 @@ In the example below, you&rsquo;ll see that a simple noun-phrase is the most pop
</ol>
</div>
<div id="outline-container-orgb60d387" class="outline-4">
<h4 id="orgb60d387"><span class="section-number-4">5.1.2</span> Prescriptive Method</h4>
<div id="outline-container-orgb5dbfc9" class="outline-4">
<h4 id="orgb5dbfc9"><span class="section-number-4">5.1.2</span> Prescriptive Method</h4>
<div class="outline-text-4" id="text-5-1-2">
</div>
<ol class="org-ol">
<li><a id="orgf0f31f1"></a>Most Likely Word To Follow A Given Phrase<br />
<li><a id="org86f0d88"></a>Most Likely Word To Follow A Given Phrase<br />
<div class="outline-text-5" id="text-5-1-2-1">
<p>
To help songwriters think of new lyrics, we provide an API to receive a list of words that commonly follow/precede a given phrase.
@ -1143,8 +1143,8 @@ In the example below, we provide a seed suffix of &ldquo;bother me&rdquo; and as
</div>
</div>
<div id="outline-container-orgd14f167" class="outline-3">
<h3 id="orgd14f167"><span class="section-number-3">5.2</span> Datasets</h3>
<div id="outline-container-org70c1d6d" class="outline-3">
<h3 id="org70c1d6d"><span class="section-number-3">5.2</span> Datasets</h3>
<div class="outline-text-3" id="text-5-2">
<p>
The dataset currently in use was generated from the publicly available lyrics at <a href="http://darklyrics.com">http://darklyrics.com</a>.
@ -1156,12 +1156,12 @@ Further datasets will need to be provided by the end-user.
</div>
</div>
<div id="outline-container-org668aec5" class="outline-3">
<h3 id="org668aec5"><span class="section-number-3">5.3</span> Decision Support Functionality</h3>
<div id="outline-container-org8866e86" class="outline-3">
<h3 id="org8866e86"><span class="section-number-3">5.3</span> Decision Support Functionality</h3>
<div class="outline-text-3" id="text-5-3">
</div>
<div id="outline-container-org29ab43e" class="outline-4">
<h4 id="org29ab43e"><span class="section-number-4">5.3.1</span> Choosing Words For A Lyric Based On Markov Likelihood</h4>
<div id="outline-container-org808b388" class="outline-4">
<h4 id="org808b388"><span class="section-number-4">5.3.1</span> Choosing Words For A Lyric Based On Markov Likelihood</h4>
<div class="outline-text-4" id="text-5-3-1">
<p>
Entire phrases can be generated using the previously mentioned functionality of generating lists of likely prefix/suffix words.
@ -1177,8 +1177,8 @@ The user can supply criteria such as restrictions on the number of syllables, nu
</div>
</div>
<div id="outline-container-org05c55f9" class="outline-4">
<h4 id="org05c55f9"><span class="section-number-4">5.3.2</span> Choosing Words To Complete A Lyric Based On Rhyme Quality</h4>
<div id="outline-container-org1cf73a2" class="outline-4">
<h4 id="org1cf73a2"><span class="section-number-4">5.3.2</span> Choosing Words To Complete A Lyric Based On Rhyme Quality</h4>
<div class="outline-text-4" id="text-5-3-2">
<p>
Another part of the decision support functionality is filtering and ordering predicted words based on their rhyme quality.
@ -1404,8 +1404,8 @@ In the example below, you&rsquo;ll see that the first 20 or so rhymes are perfec
</div>
</div>
<div id="outline-container-org20049ec" class="outline-3">
<h3 id="org20049ec"><span class="section-number-3">5.4</span> Featurizing, Parsing, Cleaning, And Wrangling Data</h3>
<div id="outline-container-org0826033" class="outline-3">
<h3 id="org0826033"><span class="section-number-3">5.4</span> Featurizing, Parsing, Cleaning, And Wrangling Data</h3>
<div class="outline-text-3" id="text-5-4">
<p>
The data processing code is in <a href="https://github.com/eihli/prhyme">https://github.com/eihli/prhyme</a>
@ -1441,8 +1441,8 @@ words can be compared: &ldquo;Foo&rdquo; is the same as &ldquo;foo&rdquo;.
</div>
</div>
<div id="outline-container-org2b9f4c2" class="outline-3">
<h3 id="org2b9f4c2"><span class="section-number-3">5.5</span> Data Exploration And Preparation</h3>
<div id="outline-container-orgb68a8db" class="outline-3">
<h3 id="orgb68a8db"><span class="section-number-3">5.5</span> Data Exploration And Preparation</h3>
<div class="outline-text-3" id="text-5-5">
<p>
The primary data structure and algorithms supporting exploration of the data are a Markov Trie
@ -1490,8 +1490,8 @@ All Trie code is hosted in the git repo located at <a href="https://github.com/e
</div>
</div>
<div id="outline-container-org93e6329" class="outline-3">
<h3 id="org93e6329"><span class="section-number-3">5.6</span> Data Visualization Functionalities For Data Exploration And Inspection</h3>
<div id="outline-container-orgc3d773c" class="outline-3">
<h3 id="orgc3d773c"><span class="section-number-3">5.6</span> Data Visualization Functionalities For Data Exploration And Inspection</h3>
<div class="outline-text-3" id="text-5-6">
<p>
The functionality to explore and visualize data is baked into the Trie data structure.
@ -1501,7 +1501,7 @@ The functionality to explore and visualize data is baked into the Trie data stru
By simply viewing the Trie in a Clojure REPL, you can inspect the Trie&rsquo;s structure.
</p>
<pre class="example" id="orgc2ea09d">
<pre class="example" id="org0ee5ab8">
(let [initialized-trie (-&gt;&gt; (trie/make-trie "dog" "dog" "dot" "dot" "do" "do"))]
initialized-trie)
;; =&gt; {(\d \o \g) "dog", (\d \o \t) "dot", (\d \o) "do", (\d) nil}
@ -1543,12 +1543,12 @@ The Hidden Markov Model data structure doesn&rsquo;t lend itself to any useful g
</div>
</div>
<div id="outline-container-orged17a7d" class="outline-3">
<h3 id="orged17a7d"><span class="section-number-3">5.7</span> Implementation Of Interactive Queries</h3>
<div id="outline-container-org4dee712" class="outline-3">
<h3 id="org4dee712"><span class="section-number-3">5.7</span> Implementation Of Interactive Queries</h3>
<div class="outline-text-3" id="text-5-7">
</div>
<div id="outline-container-org56ef5e0" class="outline-4">
<h4 id="org56ef5e0"><span class="section-number-4">5.7.1</span> Generate Rhyming Lyrics</h4>
<div id="outline-container-org0034b1f" class="outline-4">
<h4 id="org0034b1f"><span class="section-number-4">5.7.1</span> Generate Rhyming Lyrics</h4>
<div class="outline-text-4" id="text-5-7-1">
<p>
This interactive query will return a list of rhyming phrases to any word or phrase you enter.
@ -1691,8 +1691,8 @@ The interactive query for the above can be found at <a href="https://darklimeric
</div>
</div>
<div id="outline-container-orgff14c85" class="outline-4">
<h4 id="orgff14c85"><span class="section-number-4">5.7.2</span> Complete Lyric Containing Suffix</h4>
<div id="outline-container-orgb384533" class="outline-4">
<h4 id="orgb384533"><span class="section-number-4">5.7.2</span> Complete Lyric Containing Suffix</h4>
<div class="outline-text-4" id="text-5-7-2">
<p>
This interactive query will return a list of lyrics completing the given suffix with randomly generated prefixes.
@ -1794,8 +1794,8 @@ The interactive query for the above can be found at <a href="https://darklimeric
</div>
</div>
<div id="outline-container-org64c77ab" class="outline-3">
<h3 id="org64c77ab"><span class="section-number-3">5.8</span> Implementation Of Machine Learning Methods</h3>
<div id="outline-container-org04d6baa" class="outline-3">
<h3 id="org04d6baa"><span class="section-number-3">5.8</span> Implementation Of Machine Learning Methods</h3>
<div class="outline-text-3" id="text-5-8">
<p>
The machine learning method chosen for this software is a Hidden Markov Model.
@ -1865,7 +1865,7 @@ The algorithm for generating predictions from the HMM is as follows.
</pre>
</div>
<pre class="example" id="org3c046c2">
<pre class="example" id="org734b418">
[(("&lt;s&gt;" "call" "me")
("&lt;s&gt;" "call")
("&lt;s&gt;" "right" "&lt;/s&gt;")
@ -1954,8 +1954,8 @@ It also performs compaction and serialization. Song lyrics are typically provide
</div>
</div>
<div id="outline-container-org8dd0d28" class="outline-3">
<h3 id="org8dd0d28"><span class="section-number-3">5.9</span> Functionalities To Evaluate The Accuracy Of The Data Product</h3>
<div id="outline-container-org915745c" class="outline-3">
<h3 id="org915745c"><span class="section-number-3">5.9</span> Functionalities To Evaluate The Accuracy Of The Data Product</h3>
<div class="outline-text-3" id="text-5-9">
<p>
Since creative brainstorming is the goal, &ldquo;accuracy&rdquo; is subjective.
@ -2022,8 +2022,8 @@ This standardized measure of accuracy can be used to compare different language
</div>
</div>
<div id="outline-container-orge7cbec6" class="outline-3">
<h3 id="orge7cbec6"><span class="section-number-3">5.10</span> Security Features</h3>
<div id="outline-container-org620c631" class="outline-3">
<h3 id="org620c631"><span class="section-number-3">5.10</span> Security Features</h3>
<div class="outline-text-3" id="text-5-10">
<p>
Artists/Songwriters place a lot of value in the secrecy of their content. Therefore, all communication with the web-based interface occurs over a secure connection using HTTPS.
@ -2039,17 +2039,35 @@ With this precaution in place, attackers will not be able to snoop the content t
</div>
</div>
<div id="outline-container-orgaf85ff8" class="outline-3">
<h3 id="orgaf85ff8"><span class="section-number-3">5.11</span> <span class="todo TODO">TODO</span> Tools To Monitor And Maintain The Product</h3>
<div id="outline-container-org4bf19f5" class="outline-3">
<h3 id="org4bf19f5"><span class="section-number-3">5.11</span> Tools To Monitor And Maintain The Product</h3>
<div class="outline-text-3" id="text-5-11">
<ul class="org-ul">
<li>Script to auto-update SSL cert</li>
</ul>
<p>
By having the application server behind an HAProxy load balancer, we can take advantage of the built-in HAProxy stats page for monitoring amount of traffic and health of the application servers.
</p>
<div id="org43f6486" class="figure">
<p><img src="resources/public/images/stats.png" alt="stats.png" />
</p>
</div>
<p>
<a href="http://darklimericks.com:8404/stats">http://darklimericks.com:8404/stats</a>
</p>
<p>
That page is behind basic authentication with username: admin and password: admin.
</p>
<p>
The server also includes the <code>certbot</code> script for updating and maintaining the SSL certificates issued by Let&rsquo;s Encrypt.
</p>
</div>
</div>
<div id="outline-container-orgfa0ff15" class="outline-3">
<h3 id="orgfa0ff15"><span class="section-number-3">5.12</span> A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types</h3>
<div id="outline-container-org56f79e3" class="outline-3">
<h3 id="org56f79e3"><span class="section-number-3">5.12</span> A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types</h3>
<div class="outline-text-3" id="text-5-12">
<p>
You can access an example of the user interface at <a href="https://darklimericks.com/wgu">https://darklimericks.com/wgu</a>.
@ -2068,8 +2086,8 @@ The first visualization is a scatter plot of rhyming words with the &ldquo;quali
</p>
<div id="org2cfefe9" class="figure">
<p><img src="resources/images/wgu-vis.png" alt="wgu-vis.png" />
<div id="org75c650b" class="figure">
<p><img src="resources/public/images/wgu-vis.png" alt="wgu-vis.png" />
</p>
</div>
@ -2078,8 +2096,8 @@ The second visualization is a word cloud where the size of each word is based on
</p>
<div id="orgf6237fd" class="figure">
<p><img src="resources/images/wgu-vis-cloud.png" alt="wgu-vis-cloud.png" />
<div id="org56fd478" class="figure">
<p><img src="resources/public/images/wgu-vis-cloud.png" alt="wgu-vis-cloud.png" />
</p>
</div>
@ -2088,8 +2106,8 @@ The third visualization is a table that lists all of the rhymes, their pronuncia
</p>
<div id="orgbc9394a" class="figure">
<p><img src="resources/images/wgu-vis-table.png" alt="wgu-vis-table.png" />
<div id="org51eda98" class="figure">
<p><img src="resources/public/images/wgu-vis-table.png" alt="wgu-vis-table.png" />
</p>
</div>
</div>
@ -2104,16 +2122,16 @@ Create each of the following forms of documentation for the product you have dev
</p>
</div>
<div id="outline-container-orgb500abb" class="outline-3">
<h3 id="orgb500abb"><span class="section-number-3">6.1</span> Business Vision</h3>
<div id="outline-container-orga8a2b80" class="outline-3">
<h3 id="orga8a2b80"><span class="section-number-3">6.1</span> Business Vision</h3>
<div class="outline-text-3" id="text-6-1">
<p>
Provide rhyming lyric suggestions optionally constrained by syllable count.
</p>
</div>
<div id="outline-container-orge3dab01" class="outline-4">
<h4 id="orge3dab01"><span class="section-number-4">6.1.1</span> Requirements</h4>
<div id="outline-container-org10db781" class="outline-4">
<h4 id="org10db781"><span class="section-number-4">6.1.1</span> Requirements</h4>
<div class="outline-text-4" id="text-6-1-1">
<ul class="org-ul">
<li class="on"><code>[X]</code> Given a word or phrase, suggest rhymes (ranked by quality) (Trie)</li>
@ -2129,8 +2147,8 @@ Provide rhyming lyric suggestions optionally constrained by syllable count.
</div>
</div>
<div id="outline-container-orgbf1af68" class="outline-3">
<h3 id="orgbf1af68"><span class="section-number-3">6.2</span> Data Sets</h3>
<div id="outline-container-orgc562680" class="outline-3">
<h3 id="orgc562680"><span class="section-number-3">6.2</span> Data Sets</h3>
<div class="outline-text-3" id="text-6-2">
<p>
I obtained the dataset from <a href="http://darklyrics.com">http://darklyrics.com</a>.
@ -2154,8 +2172,8 @@ See <code>resources/darklyrics-markov.tpt</code>
</div>
</div>
<div id="outline-container-orgd13dfaf" class="outline-3">
<h3 id="orgd13dfaf"><span class="section-number-3">6.3</span> Data Analysis</h3>
<div id="outline-container-org90ce434" class="outline-3">
<h3 id="org90ce434"><span class="section-number-3">6.3</span> Data Analysis</h3>
<div class="outline-text-3" id="text-6-3">
<p>
I wrote code to perform certain types of data analysis, but I didn&rsquo;t find it useful to meet the business requirements of this project.
@ -2167,36 +2185,36 @@ For example, there is natural language processing code at <a href="https://githu
</div>
</div>
<div id="outline-container-org3681223" class="outline-3">
<h3 id="org3681223"><span class="section-number-3">6.4</span> Assessment</h3>
<div id="outline-container-org38e35cd" class="outline-3">
<h3 id="org38e35cd"><span class="section-number-3">6.4</span> Assessment</h3>
</div>
<div id="outline-container-orgc532c50" class="outline-3">
<h3 id="orgc532c50"><span class="section-number-3">6.5</span> Visualizations</h3>
<div id="outline-container-org8282426" class="outline-3">
<h3 id="org8282426"><span class="section-number-3">6.5</span> Visualizations</h3>
<div class="outline-text-3" id="text-6-5">
<div id="org4d36024" class="figure">
<p><img src="resources/images/rhyme-scatterplot.png" alt="rhyme-scatterplot.png" />
<div id="org7ded47a" class="figure">
<p><img src="resources/public/images/rhyme-scatterplot.png" alt="rhyme-scatterplot.png" />
</p>
</div>
<div id="orgd693532" class="figure">
<p><img src="resources/images/wordcloud.png" alt="wordcloud.png" />
<div id="org4350e3f" class="figure">
<p><img src="resources/public/images/wordcloud.png" alt="wordcloud.png" />
</p>
</div>
<div id="orgb6d6f19" class="figure">
<p><img src="resources/images/rhyme-table.png" alt="rhyme-table.png" />
<div id="org3385017" class="figure">
<p><img src="resources/public/images/rhyme-table.png" alt="rhyme-table.png" />
</p>
</div>
</div>
</div>
<div id="outline-container-orgbac9951" class="outline-3">
<h3 id="orgbac9951"><span class="section-number-3">6.6</span> Accuracy</h3>
<div id="outline-container-orgfc55be7" class="outline-3">
<h3 id="orgfc55be7"><span class="section-number-3">6.6</span> Accuracy</h3>
<div class="outline-text-3" id="text-6-6">
<p>
It&rsquo;s difficult to objectively test the models accuracy since the goal of &ldquo;brainstorm new lyric&rdquo; is such a subjective goal. A valid test of that goal will require many human subjects to subjectively evaluate their performance while using the tool compared to their performance without the tool.
@ -2207,8 +2225,8 @@ If we allow ourselves the assumption that the close a generated phrase is to a v
</p>
</div>
<div id="outline-container-org652cf82" class="outline-4">
<h4 id="org652cf82"><span class="section-number-4">6.6.1</span> Percentage Of Generated Lines That Are Valid English Sentences</h4>
<div id="outline-container-org34c05ab" class="outline-4">
<h4 id="org34c05ab"><span class="section-number-4">6.6.1</span> Percentage Of Generated Lines That Are Valid English Sentences</h4>
<div class="outline-text-4" id="text-6-6-1">
<p>
We can use <a href="https://opennlp.apache.org/">Apache OpenNLP</a> to parse sentences into a grammar structure conforming to the parts of speech specified by the <a href="https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html">University of Pennsylvania&rsquo;s Treebank Project</a>.
@ -2280,8 +2298,8 @@ Where <code>nlp/valid-sentence?</code> is defined as follows.
</div>
</div>
<div id="outline-container-org6ee5077" class="outline-3">
<h3 id="org6ee5077"><span class="section-number-3">6.7</span> Testing</h3>
<div id="outline-container-org85e75eb" class="outline-3">
<h3 id="org85e75eb"><span class="section-number-3">6.7</span> Testing</h3>
<div class="outline-text-3" id="text-6-7">
<p>
My language of choice for this project encourages a programming technique or paradigm known as REPL-driven development. REPL stands for Read-Eval-Print-Loop. This is a way to write and test code in real-time without a compilation step. Individual code chunks can be evaluated inside an editor, resulting in rapid feedback.
@ -2325,12 +2343,12 @@ Here is an example of the test suite for the code related to syllabification: <a
</div>
</div>
<div id="outline-container-org3a978f5" class="outline-3">
<h3 id="org3a978f5"><span class="section-number-3">6.8</span> Source Code</h3>
<div id="outline-container-orgbd2aaf7" class="outline-3">
<h3 id="orgbd2aaf7"><span class="section-number-3">6.8</span> Source Code</h3>
<div class="outline-text-3" id="text-6-8">
</div>
<div id="outline-container-orge2c7328" class="outline-4">
<h4 id="orge2c7328"><span class="section-number-4">6.8.1</span> Tightly Packed Trie</h4>
<div id="outline-container-orgef379f2" class="outline-4">
<h4 id="orgef379f2"><span class="section-number-4">6.8.1</span> Tightly Packed Trie</h4>
<div class="outline-text-4" id="text-6-8-1">
<p>
This is the data structure that backs the Hidden Markov Model.
@ -2342,8 +2360,8 @@ This is the data structure that backs the Hidden Markov Model.
</div>
</div>
<div id="outline-container-orgcd18f6c" class="outline-4">
<h4 id="orgcd18f6c"><span class="section-number-4">6.8.2</span> Phonetics</h4>
<div id="outline-container-org5aff5d6" class="outline-4">
<h4 id="org5aff5d6"><span class="section-number-4">6.8.2</span> Phonetics</h4>
<div class="outline-text-4" id="text-6-8-2">
<p>
This is the helper library that syllabifies and manipulates words, phones, and syllables.
@ -2355,8 +2373,8 @@ This is the helper library that syllabifies and manipulates words, phones, and s
</div>
</div>
<div id="outline-container-orgebe6ea7" class="outline-4">
<h4 id="orgebe6ea7"><span class="section-number-4">6.8.3</span> Rhyming</h4>
<div id="outline-container-org0fca7e3" class="outline-4">
<h4 id="org0fca7e3"><span class="section-number-4">6.8.3</span> Rhyming</h4>
<div class="outline-text-4" id="text-6-8-3">
<p>
This library contains code for analyzing rhymes, sentence structure, and manipulating corpuses.
@ -2368,8 +2386,8 @@ This library contains code for analyzing rhymes, sentence structure, and manipul
</div>
</div>
<div id="outline-container-org48f7c89" class="outline-4">
<h4 id="org48f7c89"><span class="section-number-4">6.8.4</span> Web Server And User Interface</h4>
<div id="outline-container-orgd2422e9" class="outline-4">
<h4 id="orgd2422e9"><span class="section-number-4">6.8.4</span> Web Server And User Interface</h4>
<div class="outline-text-4" id="text-6-8-4">
<p>
This application is not publicly available. I&rsquo;ll upload it with submission of the project.
@ -2378,16 +2396,16 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div>
</div>
<div id="outline-container-org5b7bf1b" class="outline-3">
<h3 id="org5b7bf1b"><span class="section-number-3">6.9</span> Quick Start</h3>
<div id="outline-container-org08f848b" class="outline-3">
<h3 id="org08f848b"><span class="section-number-3">6.9</span> Quick Start</h3>
<div class="outline-text-3" id="text-6-9">
</div>
<div id="outline-container-org9fee706" class="outline-4">
<h4 id="org9fee706"><span class="section-number-4">6.9.1</span> How To Initialize Development Environment</h4>
<div id="outline-container-org3923d45" class="outline-4">
<h4 id="org3923d45"><span class="section-number-4">6.9.1</span> How To Initialize Development Environment</h4>
<div class="outline-text-4" id="text-6-9-1">
</div>
<ol class="org-ol">
<li><a id="orgb6b452d"></a>Required Software<br />
<li><a id="orge9ebf77"></a>Required Software<br />
<div class="outline-text-5" id="text-6-9-1-1">
<ul class="org-ul">
<li><a href="https://www.docker.com/">Docker</a></li>
@ -2397,7 +2415,7 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div>
</li>
<li><a id="orgb10f4d4"></a>Steps<br />
<li><a id="org83756cd"></a>Steps<br />
<div class="outline-text-5" id="text-6-9-1-2">
<ol class="org-ol">
<li>Run <code>./db/run.sh &amp;&amp; ./kv/run.sh</code> to start the docker containers for the database and key-value store.
@ -2412,12 +2430,12 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</ol>
</div>
<div id="outline-container-orgfc1399f" class="outline-4">
<h4 id="orgfc1399f"><span class="section-number-4">6.9.2</span> How To Run Software Locally</h4>
<div id="outline-container-orge987ec3" class="outline-4">
<h4 id="orge987ec3"><span class="section-number-4">6.9.2</span> How To Run Software Locally</h4>
<div class="outline-text-4" id="text-6-9-2">
</div>
<ol class="org-ol">
<li><a id="orgd3d8d55"></a>Requirements<br />
<li><a id="org1d9adeb"></a>Requirements<br />
<div class="outline-text-5" id="text-6-9-2-1">
<ul class="org-ul">
<li><a href="https://www.java.com/download/ie_manual.jsp">Java</a></li>
@ -2426,7 +2444,7 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div>
</li>
<li><a id="org9904b52"></a>Steps<br />
<li><a id="org40574b2"></a>Steps<br />
<div class="outline-text-5" id="text-6-9-2-2">
<ol class="org-ol">
<li>Run <code>./db/run.sh &amp;&amp; ./kv/run.sh</code> to start the docker containers for the database and key-value store.
@ -2446,7 +2464,7 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div>
<div id="postamble" class="status">
<p class="author">Author: Eric Ihli</p>
<p class="date">Created: 2021-07-22 Thu 16:36</p>
<p class="date">Created: 2021-07-22 Thu 19:09</p>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 933 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Loading…
Cancel
Save