main
Eric Ihli 3 years ago
parent f909396938
commit e7e6606545

@ -256,7 +256,7 @@ All code was written and all models were trained on a Lenovo T15G with an Intel
| 5 | 2021-08-14 | 2021-08-21 | Create Web Interface And Visualizations | | 5 | 2021-08-14 | 2021-08-21 | Create Web Interface And Visualizations |
| 6 | 2021-08-21 | 2021-09-07 | QA - Testing - Deploy And Release Web App | | 6 | 2021-08-21 | 2021-09-07 | QA - Testing - Deploy And Release Web App |
* C. RhymeStormg™ Capstone Requirements Documentation * C. RhymeStorm™ Capstone Requirements Documentation
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: requirements-documentation :CUSTOM_ID: requirements-documentation
:END: :END:

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2021-07-22 Thu 19:51 --> <!-- 2021-07-22 Thu 20:04 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>RhymeStorm™ - WGU CSCI Capstone Project</title> <title>RhymeStorm™ - WGU CSCI Capstone Project</title>
@ -223,111 +223,111 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org38da5db">1. WGU Evaluator Notes</a></li> <li><a href="#orge4c0ea3">1. WGU Evaluator Notes</a></li>
<li><a href="#org2d73681">2. Evaluation Technical Documentation</a> <li><a href="#org3f2004c">2. Evaluation Technical Documentation</a>
<ul> <ul>
<li><a href="#org7dfc278">2.1. How To Initialize Development Environment</a> <li><a href="#orgf74e3a5">2.1. How To Initialize Development Environment</a>
<ul> <ul>
<li><a href="#orgdee2266">2.1.1. Required Software</a></li> <li><a href="#orga2059de">2.1.1. Required Software</a></li>
<li><a href="#org7592360">2.1.2. Steps</a></li> <li><a href="#org2429e92">2.1.2. Steps</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgb843ac4">2.2. How To Run Software Locally</a> <li><a href="#orgeae177a">2.2. How To Run Software Locally</a>
<ul> <ul>
<li><a href="#org1e3c95b">2.2.1. Requirements</a></li> <li><a href="#orga3d8703">2.2.1. Requirements</a></li>
<li><a href="#org78799eb">2.2.2. Steps</a></li> <li><a href="#orgae7dd52">2.2.2. Steps</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
<li><a href="#letter-of-transmittal">3. A. Letter Of Transmittal</a> <li><a href="#letter-of-transmittal">3. A. Letter Of Transmittal</a>
<ul> <ul>
<li><a href="#org464e0d5">3.1. Problem Summary</a></li> <li><a href="#orgfbabd96">3.1. Problem Summary</a></li>
<li><a href="#orgf37cff4">3.2. Benefits</a></li> <li><a href="#org67529ee">3.2. Benefits</a></li>
<li><a href="#org0c4922e">3.3. Product - RhymeStorm™</a></li> <li><a href="#orgdaedbac">3.3. Product - RhymeStorm™</a></li>
<li><a href="#orgeaeea2c">3.4. Data</a></li> <li><a href="#org9b1a68c">3.4. Data</a></li>
<li><a href="#org1272789">3.5. Objectives</a></li> <li><a href="#org00ebb68">3.5. Objectives</a></li>
<li><a href="#org3c3a5f3">3.6. Development Methodology - Agile</a></li> <li><a href="#orge82a74d">3.6. Development Methodology - Agile</a></li>
<li><a href="#orga9eb348">3.7. Costs</a></li> <li><a href="#org554d2bc">3.7. Costs</a></li>
<li><a href="#org95f6404">3.8. Stakeholder Impact</a></li> <li><a href="#org3eddfd3">3.8. Stakeholder Impact</a></li>
<li><a href="#org09fcfb8">3.9. Ethical And Legal Considerations</a></li> <li><a href="#org83ba9b1">3.9. Ethical And Legal Considerations</a></li>
<li><a href="#orga7acb54">3.10. Expertise</a></li> <li><a href="#org6dc3b0e">3.10. Expertise</a></li>
</ul> </ul>
</li> </li>
<li><a href="#executive-summary">4. B. Executive Summary - RhymeStorm™ Technical Notes And Requirements</a> <li><a href="#executive-summary">4. B. Executive Summary - RhymeStorm™ Technical Notes And Requirements</a>
<ul> <ul>
<li><a href="#org3e39ab1">4.1. Decision Support Opportunity</a></li> <li><a href="#orgba8718f">4.1. Decision Support Opportunity</a></li>
<li><a href="#org70f3f81">4.2. Customer Needs And Product Description</a></li> <li><a href="#org16507af">4.2. Customer Needs And Product Description</a></li>
<li><a href="#org87f9ed6">4.3. Existing Products</a></li> <li><a href="#org50b6bc3">4.3. Existing Products</a></li>
<li><a href="#org1e4bde0">4.4. Available Data And Future Data Lifecycle</a></li> <li><a href="#orgf38bff9">4.4. Available Data And Future Data Lifecycle</a></li>
<li><a href="#org4ef3a8b">4.5. Methodology - Agile</a></li> <li><a href="#org48002a2">4.5. Methodology - Agile</a></li>
<li><a href="#org632441b">4.6. Deliverables</a></li> <li><a href="#org7ae7df9">4.6. Deliverables</a></li>
<li><a href="#org376f00d">4.7. Implementation Plan And Anticipations</a></li> <li><a href="#orgac73571">4.7. Implementation Plan And Anticipations</a></li>
<li><a href="#org09ddace">4.8. Requirements Validation And Verification</a></li> <li><a href="#org90dc6e8">4.8. Requirements Validation And Verification</a></li>
<li><a href="#org0641d83">4.9. Programming Environments And Costs</a></li> <li><a href="#org9bd94bd">4.9. Programming Environments And Costs</a></li>
<li><a href="#orgb350393">4.10. Timeline And Milestones</a></li> <li><a href="#org47d5c34">4.10. Timeline And Milestones</a></li>
</ul> </ul>
</li> </li>
<li><a href="#requirements-documentation">5. C. RhymeStormg™ Capstone Requirements Documentation</a> <li><a href="#requirements-documentation">5. C. RhymeStorm™ Capstone Requirements Documentation</a>
<ul> <ul>
<li><a href="#orgd4bc252">5.1. Descriptive And Predictive Methods</a> <li><a href="#orgf4f1822">5.1. Descriptive And Predictive Methods</a>
<ul> <ul>
<li><a href="#orgdb26818">5.1.1. Descriptive Method</a></li> <li><a href="#orgc528a3a">5.1.1. Descriptive Method</a></li>
<li><a href="#orge3fba21">5.1.2. Prescriptive Method</a></li> <li><a href="#orgbe8b0ef">5.1.2. Prescriptive Method</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgcc6c85c">5.2. Datasets</a></li> <li><a href="#orgf199af0">5.2. Datasets</a></li>
<li><a href="#orgb7d8f5c">5.3. Decision Support Functionality</a> <li><a href="#org7654cf1">5.3. Decision Support Functionality</a>
<ul> <ul>
<li><a href="#orgf95bd91">5.3.1. Choosing Words For A Lyric Based On Markov Likelihood</a></li> <li><a href="#org1ac636d">5.3.1. Choosing Words For A Lyric Based On Markov Likelihood</a></li>
<li><a href="#orgfa7f864">5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality</a></li> <li><a href="#org2358a3e">5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orge4c4579">5.4. Featurizing, Parsing, Cleaning, And Wrangling Data</a></li> <li><a href="#orgc482544">5.4. Featurizing, Parsing, Cleaning, And Wrangling Data</a></li>
<li><a href="#org1a147a4">5.5. Data Exploration And Preparation</a></li> <li><a href="#org91aa027">5.5. Data Exploration And Preparation</a></li>
<li><a href="#org4b21646">5.6. Data Visualization Functionalities For Data Exploration And Inspection</a></li> <li><a href="#org1a0b4a9">5.6. Data Visualization Functionalities For Data Exploration And Inspection</a></li>
<li><a href="#org7c77849">5.7. Implementation Of Interactive Queries</a> <li><a href="#org275101e">5.7. Implementation Of Interactive Queries</a>
<ul> <ul>
<li><a href="#org2517ab8">5.7.1. Generate Rhyming Lyrics</a></li> <li><a href="#org852b3e5">5.7.1. Generate Rhyming Lyrics</a></li>
<li><a href="#org8e8ae1d">5.7.2. Complete Lyric Containing Suffix</a></li> <li><a href="#org7a6a74c">5.7.2. Complete Lyric Containing Suffix</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org5e053f1">5.8. Implementation Of Machine Learning Methods</a></li> <li><a href="#orgf34c3e3">5.8. Implementation Of Machine Learning Methods</a></li>
<li><a href="#org0e9f46e">5.9. Functionalities To Evaluate The Accuracy Of The Data Product</a></li> <li><a href="#org8ddd93c">5.9. Functionalities To Evaluate The Accuracy Of The Data Product</a></li>
<li><a href="#orga76fd7f">5.10. Security Features</a></li> <li><a href="#org9343640">5.10. Security Features</a></li>
<li><a href="#org9f1976e">5.11. Tools To Monitor And Maintain The Product</a></li> <li><a href="#orgbeec8d8">5.11. Tools To Monitor And Maintain The Product</a></li>
<li><a href="#org3ef6d25">5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types</a></li> <li><a href="#org237f855">5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types</a></li>
</ul> </ul>
</li> </li>
<li><a href="#remaining-documentation">6. D. Documentation</a> <li><a href="#remaining-documentation">6. D. Documentation</a>
<ul> <ul>
<li><a href="#org26e0552">6.1. Business Vision</a> <li><a href="#org4152d68">6.1. Business Vision</a>
<ul> <ul>
<li><a href="#org2deb602">6.1.1. Requirements</a></li> <li><a href="#orgd6dbcbf">6.1.1. Requirements</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org50e6024">6.2. Data Sets</a></li> <li><a href="#org4a35ec8">6.2. Data Sets</a></li>
<li><a href="#org88bf50f">6.3. Data Analysis</a></li> <li><a href="#org491415c">6.3. Data Analysis</a></li>
<li><a href="#orgbfb5bd1">6.4. Assessment Of Hypothesis</a></li> <li><a href="#org09d3b6d">6.4. Assessment Of Hypothesis</a></li>
<li><a href="#orgba06040">6.5. Visualizations</a></li> <li><a href="#org8b65bb5">6.5. Visualizations</a></li>
<li><a href="#org6cbdd1b">6.6. Accuracy</a> <li><a href="#orgea5d2bf">6.6. Accuracy</a>
<ul> <ul>
<li><a href="#orgc57d287">6.6.1. Percentage Of Generated Lines That Are Valid English Sentences</a></li> <li><a href="#org3dd10eb">6.6.1. Percentage Of Generated Lines That Are Valid English Sentences</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org955fa59">6.7. Testing</a></li> <li><a href="#orgcb62c6d">6.7. Testing</a></li>
<li><a href="#org0ab73b1">6.8. Source Code</a> <li><a href="#org255c334">6.8. Source Code</a>
<ul> <ul>
<li><a href="#org00b5cd4">6.8.1. Tightly Packed Trie</a></li> <li><a href="#orgc461807">6.8.1. Tightly Packed Trie</a></li>
<li><a href="#org868fdae">6.8.2. Phonetics</a></li> <li><a href="#org4fb64a9">6.8.2. Phonetics</a></li>
<li><a href="#org72aa443">6.8.3. Rhyming</a></li> <li><a href="#org525243c">6.8.3. Rhyming</a></li>
<li><a href="#orgc96a09c">6.8.4. Web Server And User Interface</a></li> <li><a href="#orgebded1c">6.8.4. Web Server And User Interface</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgaf98fb3">6.9. Quick Start</a> <li><a href="#org65ca38b">6.9. Quick Start</a>
<ul> <ul>
<li><a href="#org760df04">6.9.1. How To Initialize Development Environment</a></li> <li><a href="#orgab61e43">6.9.1. How To Initialize Development Environment</a></li>
<li><a href="#org46b547f">6.9.2. How To Run Software Locally</a></li> <li><a href="#orgbb3f0fd">6.9.2. How To Run Software Locally</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -336,8 +336,8 @@
</div> </div>
</div> </div>
<div id="outline-container-org38da5db" class="outline-2"> <div id="outline-container-orge4c0ea3" class="outline-2">
<h2 id="org38da5db"><span class="section-number-2">1</span> WGU Evaluator Notes</h2> <h2 id="orge4c0ea3"><span class="section-number-2">1</span> WGU Evaluator Notes</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
<p> <p>
Hello! I hope you enjoy your time with this evaluation! 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> </div>
<div id="outline-container-org2d73681" class="outline-2"> <div id="outline-container-org3f2004c" class="outline-2">
<h2 id="org2d73681"><span class="section-number-2">2</span> Evaluation Technical Documentation</h2> <h2 id="org3f2004c"><span class="section-number-2">2</span> Evaluation Technical Documentation</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
<p> <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. 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> </p>
</div> </div>
<div id="outline-container-org7dfc278" class="outline-3"> <div id="outline-container-orgf74e3a5" class="outline-3">
<h3 id="org7dfc278"><span class="section-number-3">2.1</span> How To Initialize Development Environment</h3> <h3 id="orgf74e3a5"><span class="section-number-3">2.1</span> How To Initialize Development Environment</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
</div> </div>
<div id="outline-container-orgdee2266" class="outline-4"> <div id="outline-container-orga2059de" class="outline-4">
<h4 id="orgdee2266"><span class="section-number-4">2.1.1</span> Required Software</h4> <h4 id="orga2059de"><span class="section-number-4">2.1.1</span> Required Software</h4>
<div class="outline-text-4" id="text-2-1-1"> <div class="outline-text-4" id="text-2-1-1">
<ul class="org-ul"> <ul class="org-ul">
<li><a href="https://www.docker.com/">Docker</a></li> <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> </div>
<div id="outline-container-org7592360" class="outline-4"> <div id="outline-container-org2429e92" class="outline-4">
<h4 id="org7592360"><span class="section-number-4">2.1.2</span> Steps</h4> <h4 id="org2429e92"><span class="section-number-4">2.1.2</span> Steps</h4>
<div class="outline-text-4" id="text-2-1-2"> <div class="outline-text-4" id="text-2-1-2">
<ol class="org-ol"> <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. <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> </div>
<div id="outline-container-orgb843ac4" class="outline-3"> <div id="outline-container-orgeae177a" class="outline-3">
<h3 id="orgb843ac4"><span class="section-number-3">2.2</span> How To Run Software Locally</h3> <h3 id="orgeae177a"><span class="section-number-3">2.2</span> How To Run Software Locally</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
</div> </div>
<div id="outline-container-org1e3c95b" class="outline-4"> <div id="outline-container-orga3d8703" class="outline-4">
<h4 id="org1e3c95b"><span class="section-number-4">2.2.1</span> Requirements</h4> <h4 id="orga3d8703"><span class="section-number-4">2.2.1</span> Requirements</h4>
<div class="outline-text-4" id="text-2-2-1"> <div class="outline-text-4" id="text-2-2-1">
<ul class="org-ul"> <ul class="org-ul">
<li><a href="https://www.java.com/download/ie_manual.jsp">Java</a></li> <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> </div>
<div id="outline-container-org78799eb" class="outline-4"> <div id="outline-container-orgae7dd52" class="outline-4">
<h4 id="org78799eb"><span class="section-number-4">2.2.2</span> Steps</h4> <h4 id="orgae7dd52"><span class="section-number-4">2.2.2</span> Steps</h4>
<div class="outline-text-4" id="text-2-2-2"> <div class="outline-text-4" id="text-2-2-2">
<ol class="org-ol"> <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. <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 class="outline-text-2" id="text-letter-of-transmittal">
</div> </div>
<div id="outline-container-org464e0d5" class="outline-3"> <div id="outline-container-orgfbabd96" class="outline-3">
<h3 id="org464e0d5"><span class="section-number-3">3.1</span> Problem Summary</h3> <h3 id="orgfbabd96"><span class="section-number-3">3.1</span> Problem Summary</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<p> <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. 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> </div>
<div id="outline-container-orgf37cff4" class="outline-3"> <div id="outline-container-org67529ee" class="outline-3">
<h3 id="orgf37cff4"><span class="section-number-3">3.2</span> Benefits</h3> <h3 id="org67529ee"><span class="section-number-3">3.2</span> Benefits</h3>
<div class="outline-text-3" id="text-3-2"> <div class="outline-text-3" id="text-3-2">
<p> <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? 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> </div>
<div id="outline-container-org0c4922e" class="outline-3"> <div id="outline-container-orgdaedbac" class="outline-3">
<h3 id="org0c4922e"><span class="section-number-3">3.3</span> Product - RhymeStorm™</h3> <h3 id="orgdaedbac"><span class="section-number-3">3.3</span> Product - RhymeStorm™</h3>
<div class="outline-text-3" id="text-3-3"> <div class="outline-text-3" id="text-3-3">
<p> <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. 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> </div>
<div id="outline-container-orgeaeea2c" class="outline-3"> <div id="outline-container-org9b1a68c" class="outline-3">
<h3 id="orgeaeea2c"><span class="section-number-3">3.4</span> Data</h3> <h3 id="org9b1a68c"><span class="section-number-3">3.4</span> Data</h3>
<div class="outline-text-3" id="text-3-4"> <div class="outline-text-3" id="text-3-4">
<p> <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; 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> </div>
<div id="outline-container-org1272789" class="outline-3"> <div id="outline-container-org00ebb68" class="outline-3">
<h3 id="org1272789"><span class="section-number-3">3.5</span> Objectives</h3> <h3 id="org00ebb68"><span class="section-number-3">3.5</span> Objectives</h3>
<div class="outline-text-3" id="text-3-5"> <div class="outline-text-3" id="text-3-5">
<p> <p>
This software will accomplish its primary objective if it makes its way into the daily toolkit of a handful of singers/songwriters. 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> </div>
<div id="outline-container-org3c3a5f3" class="outline-3"> <div id="outline-container-orge82a74d" class="outline-3">
<h3 id="org3c3a5f3"><span class="section-number-3">3.6</span> Development Methodology - Agile</h3> <h3 id="orge82a74d"><span class="section-number-3">3.6</span> Development Methodology - Agile</h3>
<div class="outline-text-3" id="text-3-6"> <div class="outline-text-3" id="text-3-6">
<p> <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. 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> </div>
<div id="outline-container-orga9eb348" class="outline-3"> <div id="outline-container-org554d2bc" class="outline-3">
<h3 id="orga9eb348"><span class="section-number-3">3.7</span> Costs</h3> <h3 id="org554d2bc"><span class="section-number-3">3.7</span> Costs</h3>
<div class="outline-text-3" id="text-3-7"> <div class="outline-text-3" id="text-3-7">
<p> <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. 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> </div>
<div id="outline-container-org95f6404" class="outline-3"> <div id="outline-container-org3eddfd3" class="outline-3">
<h3 id="org95f6404"><span class="section-number-3">3.8</span> Stakeholder Impact</h3> <h3 id="org3eddfd3"><span class="section-number-3">3.8</span> Stakeholder Impact</h3>
<div class="outline-text-3" id="text-3-8"> <div class="outline-text-3" id="text-3-8">
<p> <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="#orgf37cff4">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="#org67529ee">3.2</a> section above.
</p> </p>
</div> </div>
</div> </div>
<div id="outline-container-org09fcfb8" class="outline-3"> <div id="outline-container-org83ba9b1" class="outline-3">
<h3 id="org09fcfb8"><span class="section-number-3">3.9</span> Ethical And Legal Considerations</h3> <h3 id="org83ba9b1"><span class="section-number-3">3.9</span> Ethical And Legal Considerations</h3>
<div class="outline-text-3" id="text-3-9"> <div class="outline-text-3" id="text-3-9">
<p> <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>. 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> </div>
<div id="outline-container-orga7acb54" class="outline-3"> <div id="outline-container-org6dc3b0e" class="outline-3">
<h3 id="orga7acb54"><span class="section-number-3">3.10</span> Expertise</h3> <h3 id="org6dc3b0e"><span class="section-number-3">3.10</span> Expertise</h3>
<div class="outline-text-3" id="text-3-10"> <div class="outline-text-3" id="text-3-10">
<p> <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. 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> </p>
</div> </div>
<div id="outline-container-org3e39ab1" class="outline-3"> <div id="outline-container-orgba8718f" class="outline-3">
<h3 id="org3e39ab1"><span class="section-number-3">4.1</span> Decision Support Opportunity</h3> <h3 id="orgba8718f"><span class="section-number-3">4.1</span> Decision Support Opportunity</h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-4-1">
<p> <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. 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> </div>
<div id="outline-container-org70f3f81" class="outline-3"> <div id="outline-container-org16507af" class="outline-3">
<h3 id="org70f3f81"><span class="section-number-3">4.2</span> Customer Needs And Product Description</h3> <h3 id="org16507af"><span class="section-number-3">4.2</span> Customer Needs And Product Description</h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-4-2">
<p> <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. 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> </div>
<div id="outline-container-org87f9ed6" class="outline-3"> <div id="outline-container-org50b6bc3" class="outline-3">
<h3 id="org87f9ed6"><span class="section-number-3">4.3</span> Existing Products</h3> <h3 id="org50b6bc3"><span class="section-number-3">4.3</span> Existing Products</h3>
<div class="outline-text-3" id="text-4-3"> <div class="outline-text-3" id="text-4-3">
<p> <p>
We&rsquo;re all familiar with dictionaries, thesauruses, and their shortcomings. 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> </div>
<div id="outline-container-org1e4bde0" class="outline-3"> <div id="outline-container-orgf38bff9" class="outline-3">
<h3 id="org1e4bde0"><span class="section-number-3">4.4</span> Available Data And Future Data Lifecycle</h3> <h3 id="orgf38bff9"><span class="section-number-3">4.4</span> Available Data And Future Data Lifecycle</h3>
<div class="outline-text-3" id="text-4-4"> <div class="outline-text-3" id="text-4-4">
<p> <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. 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> </div>
<div id="outline-container-org4ef3a8b" class="outline-3"> <div id="outline-container-org48002a2" class="outline-3">
<h3 id="org4ef3a8b"><span class="section-number-3">4.5</span> Methodology - Agile</h3> <h3 id="org48002a2"><span class="section-number-3">4.5</span> Methodology - Agile</h3>
<div class="outline-text-3" id="text-4-5"> <div class="outline-text-3" id="text-4-5">
<p> <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. 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> </div>
<div id="outline-container-org632441b" class="outline-3"> <div id="outline-container-org7ae7df9" class="outline-3">
<h3 id="org632441b"><span class="section-number-3">4.6</span> Deliverables</h3> <h3 id="org7ae7df9"><span class="section-number-3">4.6</span> Deliverables</h3>
<div class="outline-text-3" id="text-4-6"> <div class="outline-text-3" id="text-4-6">
<ul class="org-ul"> <ul class="org-ul">
<li>Supporting libraries source code</li> <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> </div>
<div id="outline-container-org376f00d" class="outline-3"> <div id="outline-container-orgac73571" class="outline-3">
<h3 id="org376f00d"><span class="section-number-3">4.7</span> Implementation Plan And Anticipations</h3> <h3 id="orgac73571"><span class="section-number-3">4.7</span> Implementation Plan And Anticipations</h3>
<div class="outline-text-3" id="text-4-7"> <div class="outline-text-3" id="text-4-7">
<p> <p>
I&rsquo;ll start by writing and releasing the supporting libraries and packages: Tries, Syllabification/Phonetics, Rhyming. 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> </div>
<div id="outline-container-org09ddace" class="outline-3"> <div id="outline-container-org90dc6e8" class="outline-3">
<h3 id="org09ddace"><span class="section-number-3">4.8</span> Requirements Validation And Verification</h3> <h3 id="org90dc6e8"><span class="section-number-3">4.8</span> Requirements Validation And Verification</h3>
<div class="outline-text-3" id="text-4-8"> <div class="outline-text-3" id="text-4-8">
<p> <p>
the methods for validating and verifying that the developed data product meets the requirements and subsequently the needs of the customers 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> </div>
<div id="outline-container-org0641d83" class="outline-3"> <div id="outline-container-org9bd94bd" class="outline-3">
<h3 id="org0641d83"><span class="section-number-3">4.9</span> Programming Environments And Costs</h3> <h3 id="org9bd94bd"><span class="section-number-3">4.9</span> Programming Environments And Costs</h3>
<div class="outline-text-3" id="text-4-9"> <div class="outline-text-3" id="text-4-9">
<p> <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 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> </div>
<div id="outline-container-orgb350393" class="outline-3"> <div id="outline-container-org47d5c34" class="outline-3">
<h3 id="orgb350393"><span class="section-number-3">4.10</span> Timeline And Milestones</h3> <h3 id="org47d5c34"><span class="section-number-3">4.10</span> Timeline And Milestones</h3>
<div class="outline-text-3" id="text-4-10"> <div class="outline-text-3" id="text-4-10">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
@ -949,23 +949,23 @@ All code was written and all models were trained on a Lenovo T15G with an Intel
</div> </div>
<div id="outline-container-requirements-documentation" class="outline-2"> <div id="outline-container-requirements-documentation" class="outline-2">
<h2 id="requirements-documentation"><span class="section-number-2">5</span> C. RhymeStormg™ Capstone Requirements Documentation</h2> <h2 id="requirements-documentation"><span class="section-number-2">5</span> C. RhymeStorm™ Capstone Requirements Documentation</h2>
<div class="outline-text-2" id="text-requirements-documentation"> <div class="outline-text-2" id="text-requirements-documentation">
<p> <p>
RhymeStorm™ is an application to help singers and songwriters brainstorm new lyrics. RhymeStorm™ is an application to help singers and songwriters brainstorm new lyrics.
</p> </p>
</div> </div>
<div id="outline-container-orgd4bc252" class="outline-3"> <div id="outline-container-orgf4f1822" class="outline-3">
<h3 id="orgd4bc252"><span class="section-number-3">5.1</span> Descriptive And Predictive Methods</h3> <h3 id="orgf4f1822"><span class="section-number-3">5.1</span> Descriptive And Predictive Methods</h3>
<div class="outline-text-3" id="text-5-1"> <div class="outline-text-3" id="text-5-1">
</div> </div>
<div id="outline-container-orgdb26818" class="outline-4"> <div id="outline-container-orgc528a3a" class="outline-4">
<h4 id="orgdb26818"><span class="section-number-4">5.1.1</span> Descriptive Method</h4> <h4 id="orgc528a3a"><span class="section-number-4">5.1.1</span> Descriptive Method</h4>
<div class="outline-text-4" id="text-5-1-1"> <div class="outline-text-4" id="text-5-1-1">
</div> </div>
<ol class="org-ol"> <ol class="org-ol">
<li><a id="orgdb5100a"></a>Most Common Grammatical Structures In A Set Of Lyrics<br /> <li><a id="orgd8d18dc"></a>Most Common Grammatical Structures In A Set Of Lyrics<br />
<div class="outline-text-5" id="text-5-1-1-1"> <div class="outline-text-5" id="text-5-1-1-1">
<p> <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. 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> </ol>
</div> </div>
<div id="outline-container-orge3fba21" class="outline-4"> <div id="outline-container-orgbe8b0ef" class="outline-4">
<h4 id="orge3fba21"><span class="section-number-4">5.1.2</span> Prescriptive Method</h4> <h4 id="orgbe8b0ef"><span class="section-number-4">5.1.2</span> Prescriptive Method</h4>
<div class="outline-text-4" id="text-5-1-2"> <div class="outline-text-4" id="text-5-1-2">
</div> </div>
<ol class="org-ol"> <ol class="org-ol">
<li><a id="orgd291e1e"></a>Most Likely Word To Follow A Given Phrase<br /> <li><a id="org28d6ca7"></a>Most Likely Word To Follow A Given Phrase<br />
<div class="outline-text-5" id="text-5-1-2-1"> <div class="outline-text-5" id="text-5-1-2-1">
<p> <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. 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> </div>
<div id="outline-container-orgcc6c85c" class="outline-3"> <div id="outline-container-orgf199af0" class="outline-3">
<h3 id="orgcc6c85c"><span class="section-number-3">5.2</span> Datasets</h3> <h3 id="orgf199af0"><span class="section-number-3">5.2</span> Datasets</h3>
<div class="outline-text-3" id="text-5-2"> <div class="outline-text-3" id="text-5-2">
<p> <p>
The dataset currently in use was generated from the publicly available lyrics at <a href="http://darklyrics.com">http://darklyrics.com</a>. 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> </div>
<div id="outline-container-orgb7d8f5c" class="outline-3"> <div id="outline-container-org7654cf1" class="outline-3">
<h3 id="orgb7d8f5c"><span class="section-number-3">5.3</span> Decision Support Functionality</h3> <h3 id="org7654cf1"><span class="section-number-3">5.3</span> Decision Support Functionality</h3>
<div class="outline-text-3" id="text-5-3"> <div class="outline-text-3" id="text-5-3">
</div> </div>
<div id="outline-container-orgf95bd91" class="outline-4"> <div id="outline-container-org1ac636d" class="outline-4">
<h4 id="orgf95bd91"><span class="section-number-4">5.3.1</span> Choosing Words For A Lyric Based On Markov Likelihood</h4> <h4 id="org1ac636d"><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"> <div class="outline-text-4" id="text-5-3-1">
<p> <p>
Entire phrases can be generated using the previously mentioned functionality of generating lists of likely prefix/suffix words. 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> </div>
<div id="outline-container-orgfa7f864" class="outline-4"> <div id="outline-container-org2358a3e" class="outline-4">
<h4 id="orgfa7f864"><span class="section-number-4">5.3.2</span> Choosing Words To Complete A Lyric Based On Rhyme Quality</h4> <h4 id="org2358a3e"><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"> <div class="outline-text-4" id="text-5-3-2">
<p> <p>
Another part of the decision support functionality is filtering and ordering predicted words based on their rhyme quality. 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> </div>
<div id="outline-container-orge4c4579" class="outline-3"> <div id="outline-container-orgc482544" class="outline-3">
<h3 id="orge4c4579"><span class="section-number-3">5.4</span> Featurizing, Parsing, Cleaning, And Wrangling Data</h3> <h3 id="orgc482544"><span class="section-number-3">5.4</span> Featurizing, Parsing, Cleaning, And Wrangling Data</h3>
<div class="outline-text-3" id="text-5-4"> <div class="outline-text-3" id="text-5-4">
<p> <p>
The data processing code is in <a href="https://github.com/eihli/prhyme">https://github.com/eihli/prhyme</a> 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> </div>
<div id="outline-container-org1a147a4" class="outline-3"> <div id="outline-container-org91aa027" class="outline-3">
<h3 id="org1a147a4"><span class="section-number-3">5.5</span> Data Exploration And Preparation</h3> <h3 id="org91aa027"><span class="section-number-3">5.5</span> Data Exploration And Preparation</h3>
<div class="outline-text-3" id="text-5-5"> <div class="outline-text-3" id="text-5-5">
<p> <p>
The primary data structure and algorithms supporting exploration of the data are a Markov Trie 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> </div>
<div id="outline-container-org4b21646" class="outline-3"> <div id="outline-container-org1a0b4a9" class="outline-3">
<h3 id="org4b21646"><span class="section-number-3">5.6</span> Data Visualization Functionalities For Data Exploration And Inspection</h3> <h3 id="org1a0b4a9"><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"> <div class="outline-text-3" id="text-5-6">
<p> <p>
The functionality to explore and visualize data is baked into the Trie data structure. 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. By simply viewing the Trie in a Clojure REPL, you can inspect the Trie&rsquo;s structure.
</p> </p>
<pre class="example" id="orgade918e"> <pre class="example" id="orgeea8c2e">
(let [initialized-trie (-&gt;&gt; (trie/make-trie "dog" "dog" "dot" "dot" "do" "do"))] (let [initialized-trie (-&gt;&gt; (trie/make-trie "dog" "dog" "dot" "dot" "do" "do"))]
initialized-trie) initialized-trie)
;; =&gt; {(\d \o \g) "dog", (\d \o \t) "dot", (\d \o) "do", (\d) nil} ;; =&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> </div>
<div id="outline-container-org7c77849" class="outline-3"> <div id="outline-container-org275101e" class="outline-3">
<h3 id="org7c77849"><span class="section-number-3">5.7</span> Implementation Of Interactive Queries</h3> <h3 id="org275101e"><span class="section-number-3">5.7</span> Implementation Of Interactive Queries</h3>
<div class="outline-text-3" id="text-5-7"> <div class="outline-text-3" id="text-5-7">
</div> </div>
<div id="outline-container-org2517ab8" class="outline-4"> <div id="outline-container-org852b3e5" class="outline-4">
<h4 id="org2517ab8"><span class="section-number-4">5.7.1</span> Generate Rhyming Lyrics</h4> <h4 id="org852b3e5"><span class="section-number-4">5.7.1</span> Generate Rhyming Lyrics</h4>
<div class="outline-text-4" id="text-5-7-1"> <div class="outline-text-4" id="text-5-7-1">
<p> <p>
This interactive query will return a list of rhyming phrases to any word or phrase you enter. 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> </div>
<div id="outline-container-org8e8ae1d" class="outline-4"> <div id="outline-container-org7a6a74c" class="outline-4">
<h4 id="org8e8ae1d"><span class="section-number-4">5.7.2</span> Complete Lyric Containing Suffix</h4> <h4 id="org7a6a74c"><span class="section-number-4">5.7.2</span> Complete Lyric Containing Suffix</h4>
<div class="outline-text-4" id="text-5-7-2"> <div class="outline-text-4" id="text-5-7-2">
<p> <p>
This interactive query will return a list of lyrics completing the given suffix with randomly generated prefixes. 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> </div>
<div id="outline-container-org5e053f1" class="outline-3"> <div id="outline-container-orgf34c3e3" class="outline-3">
<h3 id="org5e053f1"><span class="section-number-3">5.8</span> Implementation Of Machine Learning Methods</h3> <h3 id="orgf34c3e3"><span class="section-number-3">5.8</span> Implementation Of Machine Learning Methods</h3>
<div class="outline-text-3" id="text-5-8"> <div class="outline-text-3" id="text-5-8">
<p> <p>
The machine learning method chosen for this software is a Hidden Markov Model. 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> </pre>
</div> </div>
<pre class="example" id="orgdfa4bfb"> <pre class="example" id="orge2aacf2">
[(("&lt;s&gt;" "call" "me") [(("&lt;s&gt;" "call" "me")
("&lt;s&gt;" "call") ("&lt;s&gt;" "call")
("&lt;s&gt;" "right" "&lt;/s&gt;") ("&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> </div>
<div id="outline-container-org0e9f46e" class="outline-3"> <div id="outline-container-org8ddd93c" class="outline-3">
<h3 id="org0e9f46e"><span class="section-number-3">5.9</span> Functionalities To Evaluate The Accuracy Of The Data Product</h3> <h3 id="org8ddd93c"><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"> <div class="outline-text-3" id="text-5-9">
<p> <p>
Since creative brainstorming is the goal, &ldquo;accuracy&rdquo; is subjective. 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> </div>
<div id="outline-container-orga76fd7f" class="outline-3"> <div id="outline-container-org9343640" class="outline-3">
<h3 id="orga76fd7f"><span class="section-number-3">5.10</span> Security Features</h3> <h3 id="org9343640"><span class="section-number-3">5.10</span> Security Features</h3>
<div class="outline-text-3" id="text-5-10"> <div class="outline-text-3" id="text-5-10">
<p> <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. 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,15 +2039,15 @@ With this precaution in place, attackers will not be able to snoop the content t
</div> </div>
</div> </div>
<div id="outline-container-org9f1976e" class="outline-3"> <div id="outline-container-orgbeec8d8" class="outline-3">
<h3 id="org9f1976e"><span class="section-number-3">5.11</span> Tools To Monitor And Maintain The Product</h3> <h3 id="orgbeec8d8"><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"> <div class="outline-text-3" id="text-5-11">
<p> <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. 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> </p>
<div id="org2f0e245" class="figure"> <div id="orge2868d1" class="figure">
<p><img src="images/stats.png" alt="stats.png" /> <p><img src="images/stats.png" alt="stats.png" />
</p> </p>
</div> </div>
@ -2066,8 +2066,8 @@ The server also includes the <code>certbot</code> script for updating and mainta
</div> </div>
</div> </div>
<div id="outline-container-org3ef6d25" class="outline-3"> <div id="outline-container-org237f855" class="outline-3">
<h3 id="org3ef6d25"><span class="section-number-3">5.12</span> A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types</h3> <h3 id="org237f855"><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"> <div class="outline-text-3" id="text-5-12">
<p> <p>
You can access an example of the user interface at <a href="https://darklimericks.com/wgu">https://darklimericks.com/wgu</a>. You can access an example of the user interface at <a href="https://darklimericks.com/wgu">https://darklimericks.com/wgu</a>.
@ -2086,7 +2086,7 @@ The first visualization is a scatter plot of rhyming words with the &ldquo;quali
</p> </p>
<div id="org1fb5741" class="figure"> <div id="org06801ce" class="figure">
<p><img src="images/wgu-vis.png" alt="wgu-vis.png" /> <p><img src="images/wgu-vis.png" alt="wgu-vis.png" />
</p> </p>
</div> </div>
@ -2096,7 +2096,7 @@ The second visualization is a word cloud where the size of each word is based on
</p> </p>
<div id="orgf0c79a8" class="figure"> <div id="org248f3e6" class="figure">
<p><img src="images/wgu-vis-cloud.png" alt="wgu-vis-cloud.png" /> <p><img src="images/wgu-vis-cloud.png" alt="wgu-vis-cloud.png" />
</p> </p>
</div> </div>
@ -2106,7 +2106,7 @@ The third visualization is a table that lists all of the rhymes, their pronuncia
</p> </p>
<div id="org20904b6" class="figure"> <div id="org08b3295" class="figure">
<p><img src="images/wgu-vis-table.png" alt="wgu-vis-table.png" /> <p><img src="images/wgu-vis-table.png" alt="wgu-vis-table.png" />
</p> </p>
</div> </div>
@ -2122,16 +2122,16 @@ Create each of the following forms of documentation for the product you have dev
</p> </p>
</div> </div>
<div id="outline-container-org26e0552" class="outline-3"> <div id="outline-container-org4152d68" class="outline-3">
<h3 id="org26e0552"><span class="section-number-3">6.1</span> Business Vision</h3> <h3 id="org4152d68"><span class="section-number-3">6.1</span> Business Vision</h3>
<div class="outline-text-3" id="text-6-1"> <div class="outline-text-3" id="text-6-1">
<p> <p>
Provide rhyming lyric suggestions optionally constrained by syllable count. Provide rhyming lyric suggestions optionally constrained by syllable count.
</p> </p>
</div> </div>
<div id="outline-container-org2deb602" class="outline-4"> <div id="outline-container-orgd6dbcbf" class="outline-4">
<h4 id="org2deb602"><span class="section-number-4">6.1.1</span> Requirements</h4> <h4 id="orgd6dbcbf"><span class="section-number-4">6.1.1</span> Requirements</h4>
<div class="outline-text-4" id="text-6-1-1"> <div class="outline-text-4" id="text-6-1-1">
<ul class="org-ul"> <ul class="org-ul">
<li class="on"><code>[X]</code> Given a word or phrase, suggest rhymes (ranked by quality) (Trie)</li> <li class="on"><code>[X]</code> Given a word or phrase, suggest rhymes (ranked by quality) (Trie)</li>
@ -2147,8 +2147,8 @@ Provide rhyming lyric suggestions optionally constrained by syllable count.
</div> </div>
</div> </div>
<div id="outline-container-org50e6024" class="outline-3"> <div id="outline-container-org4a35ec8" class="outline-3">
<h3 id="org50e6024"><span class="section-number-3">6.2</span> Data Sets</h3> <h3 id="org4a35ec8"><span class="section-number-3">6.2</span> Data Sets</h3>
<div class="outline-text-3" id="text-6-2"> <div class="outline-text-3" id="text-6-2">
<p> <p>
I obtained the dataset from <a href="http://darklyrics.com">http://darklyrics.com</a>. I obtained the dataset from <a href="http://darklyrics.com">http://darklyrics.com</a>.
@ -2172,8 +2172,8 @@ See <code>resources/darklyrics-markov.tpt</code>
</div> </div>
</div> </div>
<div id="outline-container-org88bf50f" class="outline-3"> <div id="outline-container-org491415c" class="outline-3">
<h3 id="org88bf50f"><span class="section-number-3">6.3</span> Data Analysis</h3> <h3 id="org491415c"><span class="section-number-3">6.3</span> Data Analysis</h3>
<div class="outline-text-3" id="text-6-3"> <div class="outline-text-3" id="text-6-3">
<p> <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. 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.
@ -2185,8 +2185,8 @@ For example, there is natural language processing code at <a href="https://githu
</div> </div>
</div> </div>
<div id="outline-container-orgbfb5bd1" class="outline-3"> <div id="outline-container-org09d3b6d" class="outline-3">
<h3 id="orgbfb5bd1"><span class="section-number-3">6.4</span> Assessment Of Hypothesis</h3> <h3 id="org09d3b6d"><span class="section-number-3">6.4</span> Assessment Of Hypothesis</h3>
<div class="outline-text-3" id="text-6-4"> <div class="outline-text-3" id="text-6-4">
<p> <p>
I&rsquo;ll use an example output to subjectively assess the results of the project. I&rsquo;ll use an example output to subjectively assess the results of the project.
@ -2402,31 +2402,31 @@ and more.
</div> </div>
</div> </div>
<div id="outline-container-orgba06040" class="outline-3"> <div id="outline-container-org8b65bb5" class="outline-3">
<h3 id="orgba06040"><span class="section-number-3">6.5</span> Visualizations</h3> <h3 id="org8b65bb5"><span class="section-number-3">6.5</span> Visualizations</h3>
<div class="outline-text-3" id="text-6-5"> <div class="outline-text-3" id="text-6-5">
<div id="org8dcec40" class="figure"> <div id="orgb9f003b" class="figure">
<p><img src="images/rhyme-scatterplot.png" alt="rhyme-scatterplot.png" /> <p><img src="images/rhyme-scatterplot.png" alt="rhyme-scatterplot.png" />
</p> </p>
</div> </div>
<div id="org8e67cf1" class="figure"> <div id="org5a6eba2" class="figure">
<p><img src="images/wordcloud.png" alt="wordcloud.png" /> <p><img src="images/wordcloud.png" alt="wordcloud.png" />
</p> </p>
</div> </div>
<div id="org2b6ab7c" class="figure"> <div id="orge4574af" class="figure">
<p><img src="images/rhyme-table.png" alt="rhyme-table.png" /> <p><img src="images/rhyme-table.png" alt="rhyme-table.png" />
</p> </p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org6cbdd1b" class="outline-3"> <div id="outline-container-orgea5d2bf" class="outline-3">
<h3 id="org6cbdd1b"><span class="section-number-3">6.6</span> Accuracy</h3> <h3 id="orgea5d2bf"><span class="section-number-3">6.6</span> Accuracy</h3>
<div class="outline-text-3" id="text-6-6"> <div class="outline-text-3" id="text-6-6">
<p> <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. 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.
@ -2437,8 +2437,8 @@ If we allow ourselves the assumption that the close a generated phrase is to a v
</p> </p>
</div> </div>
<div id="outline-container-orgc57d287" class="outline-4"> <div id="outline-container-org3dd10eb" class="outline-4">
<h4 id="orgc57d287"><span class="section-number-4">6.6.1</span> Percentage Of Generated Lines That Are Valid English Sentences</h4> <h4 id="org3dd10eb"><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"> <div class="outline-text-4" id="text-6-6-1">
<p> <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>. 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>.
@ -2516,8 +2516,8 @@ Where <code>nlp/valid-sentence?</code> is defined as follows.
</div> </div>
</div> </div>
<div id="outline-container-org955fa59" class="outline-3"> <div id="outline-container-orgcb62c6d" class="outline-3">
<h3 id="org955fa59"><span class="section-number-3">6.7</span> Testing</h3> <h3 id="orgcb62c6d"><span class="section-number-3">6.7</span> Testing</h3>
<div class="outline-text-3" id="text-6-7"> <div class="outline-text-3" id="text-6-7">
<p> <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. 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.
@ -2561,12 +2561,12 @@ Here is an example of the test suite for the code related to syllabification: <a
</div> </div>
</div> </div>
<div id="outline-container-org0ab73b1" class="outline-3"> <div id="outline-container-org255c334" class="outline-3">
<h3 id="org0ab73b1"><span class="section-number-3">6.8</span> Source Code</h3> <h3 id="org255c334"><span class="section-number-3">6.8</span> Source Code</h3>
<div class="outline-text-3" id="text-6-8"> <div class="outline-text-3" id="text-6-8">
</div> </div>
<div id="outline-container-org00b5cd4" class="outline-4"> <div id="outline-container-orgc461807" class="outline-4">
<h4 id="org00b5cd4"><span class="section-number-4">6.8.1</span> Tightly Packed Trie</h4> <h4 id="orgc461807"><span class="section-number-4">6.8.1</span> Tightly Packed Trie</h4>
<div class="outline-text-4" id="text-6-8-1"> <div class="outline-text-4" id="text-6-8-1">
<p> <p>
This is the data structure that backs the Hidden Markov Model. This is the data structure that backs the Hidden Markov Model.
@ -2578,8 +2578,8 @@ This is the data structure that backs the Hidden Markov Model.
</div> </div>
</div> </div>
<div id="outline-container-org868fdae" class="outline-4"> <div id="outline-container-org4fb64a9" class="outline-4">
<h4 id="org868fdae"><span class="section-number-4">6.8.2</span> Phonetics</h4> <h4 id="org4fb64a9"><span class="section-number-4">6.8.2</span> Phonetics</h4>
<div class="outline-text-4" id="text-6-8-2"> <div class="outline-text-4" id="text-6-8-2">
<p> <p>
This is the helper library that syllabifies and manipulates words, phones, and syllables. This is the helper library that syllabifies and manipulates words, phones, and syllables.
@ -2591,8 +2591,8 @@ This is the helper library that syllabifies and manipulates words, phones, and s
</div> </div>
</div> </div>
<div id="outline-container-org72aa443" class="outline-4"> <div id="outline-container-org525243c" class="outline-4">
<h4 id="org72aa443"><span class="section-number-4">6.8.3</span> Rhyming</h4> <h4 id="org525243c"><span class="section-number-4">6.8.3</span> Rhyming</h4>
<div class="outline-text-4" id="text-6-8-3"> <div class="outline-text-4" id="text-6-8-3">
<p> <p>
This library contains code for analyzing rhymes, sentence structure, and manipulating corpuses. This library contains code for analyzing rhymes, sentence structure, and manipulating corpuses.
@ -2604,8 +2604,8 @@ This library contains code for analyzing rhymes, sentence structure, and manipul
</div> </div>
</div> </div>
<div id="outline-container-orgc96a09c" class="outline-4"> <div id="outline-container-orgebded1c" class="outline-4">
<h4 id="orgc96a09c"><span class="section-number-4">6.8.4</span> Web Server And User Interface</h4> <h4 id="orgebded1c"><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"> <div class="outline-text-4" id="text-6-8-4">
<p> <p>
This application is not publicly available. I&rsquo;ll upload it with submission of the project. This application is not publicly available. I&rsquo;ll upload it with submission of the project.
@ -2614,16 +2614,16 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div> </div>
</div> </div>
<div id="outline-container-orgaf98fb3" class="outline-3"> <div id="outline-container-org65ca38b" class="outline-3">
<h3 id="orgaf98fb3"><span class="section-number-3">6.9</span> Quick Start</h3> <h3 id="org65ca38b"><span class="section-number-3">6.9</span> Quick Start</h3>
<div class="outline-text-3" id="text-6-9"> <div class="outline-text-3" id="text-6-9">
</div> </div>
<div id="outline-container-org760df04" class="outline-4"> <div id="outline-container-orgab61e43" class="outline-4">
<h4 id="org760df04"><span class="section-number-4">6.9.1</span> How To Initialize Development Environment</h4> <h4 id="orgab61e43"><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 class="outline-text-4" id="text-6-9-1">
</div> </div>
<ol class="org-ol"> <ol class="org-ol">
<li><a id="org82ca639"></a>Required Software<br /> <li><a id="org5680068"></a>Required Software<br />
<div class="outline-text-5" id="text-6-9-1-1"> <div class="outline-text-5" id="text-6-9-1-1">
<ul class="org-ul"> <ul class="org-ul">
<li><a href="https://www.docker.com/">Docker</a></li> <li><a href="https://www.docker.com/">Docker</a></li>
@ -2633,7 +2633,7 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div> </div>
</li> </li>
<li><a id="org903b0b1"></a>Steps<br /> <li><a id="orgbf08499"></a>Steps<br />
<div class="outline-text-5" id="text-6-9-1-2"> <div class="outline-text-5" id="text-6-9-1-2">
<ol class="org-ol"> <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. <li>Run <code>./db/run.sh &amp;&amp; ./kv/run.sh</code> to start the docker containers for the database and key-value store.
@ -2648,12 +2648,12 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</ol> </ol>
</div> </div>
<div id="outline-container-org46b547f" class="outline-4"> <div id="outline-container-orgbb3f0fd" class="outline-4">
<h4 id="org46b547f"><span class="section-number-4">6.9.2</span> How To Run Software Locally</h4> <h4 id="orgbb3f0fd"><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 class="outline-text-4" id="text-6-9-2">
</div> </div>
<ol class="org-ol"> <ol class="org-ol">
<li><a id="orgdfc2075"></a>Requirements<br /> <li><a id="org42f92cf"></a>Requirements<br />
<div class="outline-text-5" id="text-6-9-2-1"> <div class="outline-text-5" id="text-6-9-2-1">
<ul class="org-ul"> <ul class="org-ul">
<li><a href="https://www.java.com/download/ie_manual.jsp">Java</a></li> <li><a href="https://www.java.com/download/ie_manual.jsp">Java</a></li>
@ -2662,7 +2662,7 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div> </div>
</li> </li>
<li><a id="org24542f9"></a>Steps<br /> <li><a id="orgb5cfee1"></a>Steps<br />
<div class="outline-text-5" id="text-6-9-2-2"> <div class="outline-text-5" id="text-6-9-2-2">
<ol class="org-ol"> <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. <li>Run <code>./db/run.sh &amp;&amp; ./kv/run.sh</code> to start the docker containers for the database and key-value store.
@ -2682,7 +2682,7 @@ This application is not publicly available. I&rsquo;ll upload it with submission
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Eric Ihli</p> <p class="author">Author: Eric Ihli</p>
<p class="date">Created: 2021-07-22 Thu 19:51</p> <p class="date">Created: 2021-07-22 Thu 20:04</p>
</div> </div>
</body> </body>
</html> </html>

Loading…
Cancel
Save