@ -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 19:51 -->
<!-- 2021 - 07 - 22 Thu 20:04 -->
< 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 = "#org 38da5db "> 1. WGU Evaluator Notes< / a > < / li >
< li > < a href = "#org 2d73681 "> 2. Evaluation Technical Documentation< / a >
< li > < a href = "#org e4c0ea3 "> 1. WGU Evaluator Notes< / a > < / li >
< li > < a href = "#org 3f2004c "> 2. Evaluation Technical Documentation< / a >
< ul >
< li > < a href = "#org 7dfc278 "> 2.1. How To Initialize Development Environment< / a >
< li > < a href = "#org f74e3a5 "> 2.1. How To Initialize Development Environment< / a >
< ul >
< li > < a href = "#org dee2266 "> 2.1.1. Required Software< / a > < / li >
< li > < a href = "#org 7592360 "> 2.1.2. Steps< / a > < / li >
< li > < a href = "#org a2059 de"> 2.1.1. Required Software< / a > < / li >
< li > < a href = "#org 2429e92 "> 2.1.2. Steps< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org b843ac4 "> 2.2. How To Run Software Locally< / a >
< li > < a href = "#org eae177a "> 2.2. How To Run Software Locally< / a >
< ul >
< li > < a href = "#org 1e3c95b "> 2.2.1. Requirements< / a > < / li >
< li > < a href = "#org 78799eb "> 2.2.2. Steps< / a > < / li >
< li > < a href = "#org a3d8703 "> 2.2.1. Requirements< / a > < / li >
< li > < a href = "#org ae7dd52 "> 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 = "#org 464e0d5 "> 3.1. Problem Summary< / a > < / li >
< li > < a href = "#org f37cff4 "> 3.2. Benefits< / a > < / li >
< li > < a href = "#org 0c4922e "> 3.3. Product - RhymeStorm™< / a > < / li >
< li > < a href = "#org eaeea2 c"> 3.4. Data< / a > < / li >
< li > < a href = "#org 1272789 "> 3.5. Objectives< / a > < / li >
< li > < a href = "#org 3c3a5f3 "> 3.6. Development Methodology - Agile< / a > < / li >
< li > < a href = "#org a9eb348 "> 3.7. Costs< / a > < / li >
< li > < a href = "#org 95f6404 "> 3.8. Stakeholder Impact< / a > < / li >
< li > < a href = "#org 09fcfb8 "> 3.9. Ethical And Legal Considerations< / a > < / li >
< li > < a href = "#org a7acb54 "> 3.10. Expertise< / a > < / li >
< li > < a href = "#org fbabd96 "> 3.1. Problem Summary< / a > < / li >
< li > < a href = "#org 67529ee "> 3.2. Benefits< / a > < / li >
< li > < a href = "#org daedbac "> 3.3. Product - RhymeStorm™< / a > < / li >
< li > < a href = "#org 9b1a68 c"> 3.4. Data< / a > < / li >
< li > < a href = "#org 00ebb68 "> 3.5. Objectives< / a > < / li >
< li > < a href = "#org e82a74d "> 3.6. Development Methodology - Agile< / a > < / li >
< li > < a href = "#org 554d2bc "> 3.7. Costs< / a > < / li >
< li > < a href = "#org 3eddfd3 "> 3.8. Stakeholder Impact< / a > < / li >
< li > < a href = "#org 83ba9b1 "> 3.9. Ethical And Legal Considerations< / a > < / li >
< li > < a href = "#org 6dc3b0e "> 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 = "#org 3e39a b1"> 4.1. Decision Support Opportunity< / a > < / li >
< li > < a href = "#org 70f3f81 "> 4.2. Customer Needs And Product Description< / a > < / li >
< li > < a href = "#org 87f9ed6 "> 4.3. Existing Products< / a > < / li >
< li > < a href = "#org 1e4bde0 "> 4.4. Available Data And Future Data Lifecycle< / a > < / li >
< li > < a href = "#org4 ef3a8b "> 4.5. Methodology - Agile< / a > < / li >
< li > < a href = "#org 632441b "> 4.6. Deliverables< / a > < / li >
< li > < a href = "#org 376f00d "> 4.7. Implementation Plan And Anticipations< / a > < / li >
< li > < a href = "#org 09ddace "> 4.8. Requirements Validation And Verification< / a > < / li >
< li > < a href = "#org 0641d83 "> 4.9. Programming Environments And Costs< / a > < / li >
< li > < a href = "#org b350393 "> 4.10. Timeline And Milestones< / a > < / li >
< li > < a href = "#org ba87 18f "> 4.1. Decision Support Opportunity< / a > < / li >
< li > < a href = "#org 16507af "> 4.2. Customer Needs And Product Description< / a > < / li >
< li > < a href = "#org 50b6bc3 "> 4.3. Existing Products< / a > < / li >
< li > < a href = "#org f38bff9 "> 4.4. Available Data And Future Data Lifecycle< / a > < / li >
< li > < a href = "#org4 8002a2 "> 4.5. Methodology - Agile< / a > < / li >
< li > < a href = "#org 7ae7df9 "> 4.6. Deliverables< / a > < / li >
< li > < a href = "#org ac73571 "> 4.7. Implementation Plan And Anticipations< / a > < / li >
< li > < a href = "#org 90dc6e8 "> 4.8. Requirements Validation And Verification< / a > < / li >
< li > < a href = "#org 9bd94bd "> 4.9. Programming Environments And Costs< / a > < / li >
< li > < a href = "#org 47d5c34 "> 4.10. Timeline And Milestones< / a > < / li >
< / ul >
< / 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 >
< li > < a href = "#org d4bc25 2"> 5.1. Descriptive And Predictive Methods< / a >
< li > < a href = "#org f4f182 2"> 5.1. Descriptive And Predictive Methods< / a >
< ul >
< li > < a href = "#org db26818 "> 5.1.1. Descriptive Method< / a > < / li >
< li > < a href = "#org e3fba21 "> 5.1.2. Prescriptive Method< / a > < / li >
< li > < a href = "#org c528a3a "> 5.1.1. Descriptive Method< / a > < / li >
< li > < a href = "#org be8b0ef "> 5.1.2. Prescriptive Method< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org cc6c85c "> 5.2. Datasets< / a > < / li >
< li > < a href = "#org b7d8f5c "> 5.3. Decision Support Functionality< / a >
< li > < a href = "#org f199af0 "> 5.2. Datasets< / a > < / li >
< li > < a href = "#org 7654cf1 "> 5.3. Decision Support Functionality< / a >
< ul >
< li > < a href = "#org f95bd9 1"> 5.3.1. Choosing Words For A Lyric Based On Markov Likelihood< / a > < / li >
< li > < a href = "#org fa7f864 "> 5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality< / a > < / li >
< li > < a href = "#org 1ac636d "> 5.3.1. Choosing Words For A Lyric Based On Markov Likelihood< / a > < / li >
< li > < a href = "#org 2358a3e "> 5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org e4c4579 "> 5.4. Featurizing, Parsing, Cleaning, And Wrangling Data< / a > < / li >
< li > < a href = "#org 1a147a4 "> 5.5. Data Exploration And Preparation< / a > < / li >
< li > < a href = "#org 4b21646 "> 5.6. Data Visualization Functionalities For Data Exploration And Inspection< / a > < / li >
< li > < a href = "#org 7c77849 "> 5.7. Implementation Of Interactive Queries< / a >
< li > < a href = "#org c482544 "> 5.4. Featurizing, Parsing, Cleaning, And Wrangling Data< / a > < / li >
< li > < a href = "#org 91aa027 "> 5.5. Data Exploration And Preparation< / a > < / li >
< li > < a href = "#org 1a0b4a9 "> 5.6. Data Visualization Functionalities For Data Exploration And Inspection< / a > < / li >
< li > < a href = "#org 275101e "> 5.7. Implementation Of Interactive Queries< / a >
< ul >
< li > < a href = "#org 2517ab8 "> 5.7.1. Generate Rhyming Lyrics< / a > < / li >
< li > < a href = "#org 8e8ae1d "> 5.7.2. Complete Lyric Containing Suffix< / a > < / li >
< li > < a href = "#org 852b3e5 "> 5.7.1. Generate Rhyming Lyrics< / a > < / li >
< li > < a href = "#org 7a6a74c "> 5.7.2. Complete Lyric Containing Suffix< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 5e053f1 "> 5.8. Implementation Of Machine Learning Methods< / a > < / li >
< li > < a href = "#org 0e9f46e "> 5.9. Functionalities To Evaluate The Accuracy Of The Data Product< / a > < / li >
< li > < a href = "#org a76fd7f "> 5.10. Security Features< / a > < / li >
< li > < a href = "#org 9f1976e "> 5.11. Tools To Monitor And Maintain The Product< / a > < / li >
< li > < a href = "#org 3ef6d2 5"> 5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types< / a > < / li >
< li > < a href = "#org f34c3e3 "> 5.8. Implementation Of Machine Learning Methods< / a > < / li >
< li > < a href = "#org 8ddd93c "> 5.9. Functionalities To Evaluate The Accuracy Of The Data Product< / a > < / li >
< li > < a href = "#org 9343640 "> 5.10. Security Features< / a > < / li >
< li > < a href = "#org beec8d8 "> 5.11. Tools To Monitor And Maintain The Product< / a > < / li >
< li > < a href = "#org 237f85 5"> 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 = "#org 26e0552 "> 6.1. Business Vision< / a >
< li > < a href = "#org 4152d68 "> 6.1. Business Vision< / a >
< ul >
< li > < a href = "#org 2deb602 "> 6.1.1. Requirements< / a > < / li >
< li > < a href = "#org d6dbcbf "> 6.1.1. Requirements< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 50e6024 "> 6.2. Data Sets< / a > < / li >
< li > < a href = "#org 88bf50f "> 6.3. Data Analysis< / a > < / li >
< li > < a href = "#org bfb5bd1 "> 6.4. Assessment Of Hypothesis< / a > < / li >
< li > < a href = "#org ba06040 "> 6.5. Visualizations< / a > < / li >
< li > < a href = "#org 6cbdd1b "> 6.6. Accuracy< / a >
< li > < a href = "#org 4a35ec8 "> 6.2. Data Sets< / a > < / li >
< li > < a href = "#org 491415c "> 6.3. Data Analysis< / a > < / li >
< li > < a href = "#org 09d3b6d "> 6.4. Assessment Of Hypothesis< / a > < / li >
< li > < a href = "#org 8b65bb5 "> 6.5. Visualizations< / a > < / li >
< li > < a href = "#org ea5d2bf "> 6.6. Accuracy< / a >
< ul >
< li > < a href = "#org c57d287 "> 6.6.1. Percentage Of Generated Lines That Are Valid English Sentences< / a > < / li >
< li > < a href = "#org 3dd10eb "> 6.6.1. Percentage Of Generated Lines That Are Valid English Sentences< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 955fa59 "> 6.7. Testing< / a > < / li >
< li > < a href = "#org 0ab73b1 "> 6.8. Source Code< / a >
< li > < a href = "#org cb62c6d "> 6.7. Testing< / a > < / li >
< li > < a href = "#org 255c334 "> 6.8. Source Code< / a >
< ul >
< li > < a href = "#org 00b5 cd 4"> 6.8.1. Tightly Packed Trie< / a > < / li >
< li > < a href = "#org 868fdae "> 6.8.2. Phonetics< / a > < / li >
< li > < a href = "#org 72aa443 "> 6.8.3. Rhyming< / a > < / li >
< li > < a href = "#org c96a09 c"> 6.8.4. Web Server And User Interface< / a > < / li >
< li > < a href = "#org c461807 "> 6.8.1. Tightly Packed Trie< / a > < / li >
< li > < a href = "#org 4fb64a9 "> 6.8.2. Phonetics< / a > < / li >
< li > < a href = "#org 525243c "> 6.8.3. Rhyming< / a > < / li >
< li > < a href = "#org ebded1 c"> 6.8.4. Web Server And User Interface< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org af98fb3 "> 6.9. Quick Start< / a >
< li > < a href = "#org 65ca38b "> 6.9. Quick Start< / a >
< ul >
< li > < a href = "#org 760df04 "> 6.9.1. How To Initialize Development Environment< / a > < / li >
< li > < a href = "#org 46b547f "> 6.9.2. How To Run Software Locally< / a > < / li >
< li > < a href = "#org ab61e43 "> 6.9.1. How To Initialize Development Environment< / a > < / li >
< li > < a href = "#org bb3f0fd "> 6.9.2. How To Run Software Locally< / a > < / li >
< / ul >
< / li >
< / ul >
@ -336,8 +336,8 @@
< / div >
< / div >
< div id = "outline-container-org 38da5db " class = "outline-2" >
< h2 id = "org 38da5db "> < span class = "section-number-2" > 1< / span > WGU Evaluator Notes< / h2 >
< div id = "outline-container-org e4c0ea3 " class = "outline-2" >
< h2 id = "org e4c0ea3 "> < 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’ll
< / div >
< / div >
< div id = "outline-container-org 2d73681 " class = "outline-2" >
< h2 id = "org 2d73681 "> < span class = "section-number-2" > 2< / span > Evaluation Technical Documentation< / h2 >
< div id = "outline-container-org 3f2004c " class = "outline-2" >
< h2 id = "org 3f2004c "> < span class = "section-number-2" > 2< / span > Evaluation Technical Documentation< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
It’ 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-org 7dfc278 " class = "outline-3" >
< h3 id = "org 7dfc278 "> < span class = "section-number-3" > 2.1< / span > How To Initialize Development Environment< / h3 >
< div id = "outline-container-org f74e3a5 " class = "outline-3" >
< h3 id = "org f74e3a5 "> < 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-org dee2266 " class = "outline-4" >
< h4 id = "org dee2266 "> < span class = "section-number-4" > 2.1.1< / span > Required Software< / h4 >
< div id = "outline-container-org a2059 de" class = "outline-4" >
< h4 id = "org a2059 de"> < 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’s probably not necessary for you to replicate my development environmen
< / div >
< / div >
< div id = "outline-container-org 7592360 " class = "outline-4" >
< h4 id = "org 7592360 "> < span class = "section-number-4" > 2.1.2< / span > Steps< / h4 >
< div id = "outline-container-org 2429e92 " class = "outline-4" >
< h4 id = "org 2429e92 "> < 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 & & ./kv/run.sh< / code > to start the docker containers for the database and key-value store.
@ -399,12 +399,12 @@ It’s probably not necessary for you to replicate my development environmen
< / div >
< / div >
< div id = "outline-container-org b843ac4 " class = "outline-3" >
< h3 id = "org b843ac4 "> < span class = "section-number-3" > 2.2< / span > How To Run Software Locally< / h3 >
< div id = "outline-container-org eae177a " class = "outline-3" >
< h3 id = "org eae177a "> < 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-org 1e3c95b " class = "outline-4" >
< h4 id = "org 1e3c95b "> < span class = "section-number-4" > 2.2.1< / span > Requirements< / h4 >
< div id = "outline-container-org a3d8703 " class = "outline-4" >
< h4 id = "org a3d8703 "> < 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’s probably not necessary for you to replicate my development environmen
< / div >
< / div >
< div id = "outline-container-org 78799eb " class = "outline-4" >
< h4 id = "org 78799eb "> < span class = "section-number-4" > 2.2.2< / span > Steps< / h4 >
< div id = "outline-container-org ae7dd52 " class = "outline-4" >
< h4 id = "org ae7dd52 "> < 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 & & ./kv/run.sh< / code > to start the docker containers for the database and key-value store.
@ -435,8 +435,8 @@ It’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-org 464e0d5 " class = "outline-3" >
< h3 id = "org 464e0d5 "> < span class = "section-number-3" > 3.1< / span > Problem Summary< / h3 >
< div id = "outline-container-org fbabd96 " class = "outline-3" >
< h3 id = "org fbabd96 "> < 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-org f37cff4 " class = "outline-3" >
< h3 id = "org f37cff4 "> < span class = "section-number-3" > 3.2< / span > Benefits< / h3 >
< div id = "outline-container-org 67529ee " class = "outline-3" >
< h3 id = "org 67529ee "> < 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 “ war on poverty” ? What if I say that there’ s a restriction to only come up with phrases that are exactly 14 syllables? That’ 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-org 0c4922e " class = "outline-3" >
< h3 id = "org 0c4922e "> < span class = "section-number-3" > 3.3< / span > Product - RhymeStorm™< / h3 >
< div id = "outline-container-org daedbac " class = "outline-3" >
< h3 id = "org daedbac "> < 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-org eaeea2 c" class = "outline-3" >
< h3 id = "org eaeea2 c"> < span class = "section-number-3" > 3.4< / span > Data< / h3 >
< div id = "outline-container-org 9b1a68 c" class = "outline-3" >
< h3 id = "org 9b1a68 c"> < 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…
@ -507,8 +507,8 @@ The software can be augmented with additional algorithms to account for the type
< / div >
< / div >
< div id = "outline-container-org 1272789 " class = "outline-3" >
< h3 id = "org 1272789 "> < span class = "section-number-3" > 3.5< / span > Objectives< / h3 >
< div id = "outline-container-org 00ebb68 " class = "outline-3" >
< h3 id = "org 00ebb68 "> < 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-org 3c3a5f3 " class = "outline-3" >
< h3 id = "org 3c3a5f3 "> < span class = "section-number-3" > 3.6< / span > Development Methodology - Agile< / h3 >
< div id = "outline-container-org e82a74d " class = "outline-3" >
< h3 id = "org e82a74d "> < 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-org a9eb348 " class = "outline-3" >
< h3 id = "org a9eb348 "> < span class = "section-number-3" > 3.7< / span > Costs< / h3 >
< div id = "outline-container-org 554d2bc " class = "outline-3" >
< h3 id = "org 554d2bc "> < 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’ 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-org 95f6404 " class = "outline-3" >
< h3 id = "org 95f6404 "> < span class = "section-number-3" > 3.8< / span > Stakeholder Impact< / h3 >
< div id = "outline-container-org 3eddfd3 " class = "outline-3" >
< h3 id = "org 3eddfd3 "> < 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 = "#org f37cff4 "> 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 = "#org 67529ee "> 3.2< / a > section above.
< / p >
< / div >
< / div >
< div id = "outline-container-org 09fcfb8 " class = "outline-3" >
< h3 id = "org 09fcfb8 "> < span class = "section-number-3" > 3.9< / span > Ethical And Legal Considerations< / h3 >
< div id = "outline-container-org 83ba9b1 " class = "outline-3" >
< h3 id = "org 83ba9b1 "> < 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-org a7acb54 " class = "outline-3" >
< h3 id = "org a7acb54 "> < span class = "section-number-3" > 3.10< / span > Expertise< / h3 >
< div id = "outline-container-org 6dc3b0e " class = "outline-3" >
< h3 id = "org 6dc3b0e "> < 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-org 3e39a b1" class = "outline-3" >
< h3 id = "org 3e39a b1"> < span class = "section-number-3" > 4.1< / span > Decision Support Opportunity< / h3 >
< div id = "outline-container-org ba87 18f " class = "outline-3" >
< h3 id = "org ba87 18f "> < 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’ 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 “war on pov
< / div >
< / div >
< div id = "outline-container-org 70f3f81 " class = "outline-3" >
< h3 id = "org 70f3f81 "> < span class = "section-number-3" > 4.2< / span > Customer Needs And Product Description< / h3 >
< div id = "outline-container-org 16507af " class = "outline-3" >
< h3 id = "org 16507af "> < 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-org 87f9ed6 " class = "outline-3" >
< h3 id = "org 87f9ed6 "> < span class = "section-number-3" > 4.3< / span > Existing Products< / h3 >
< div id = "outline-container-org 50b6bc3 " class = "outline-3" >
< h3 id = "org 50b6bc3 "> < span class = "section-number-3" > 4.3< / span > Existing Products< / h3 >
< div class = "outline-text-3" id = "text-4-3" >
< p >
We’ re all familiar with dictionaries, thesauruses, and their shortcomings.
@ -725,8 +725,8 @@ RhymeZone is limited in its capability. It doesn’t do well finding rhymes
< / div >
< / div >
< div id = "outline-container-org 1e4bde0 " class = "outline-3" >
< h3 id = "org 1e4bde0 "> < span class = "section-number-3" > 4.4< / span > Available Data And Future Data Lifecycle< / h3 >
< div id = "outline-container-org f38bff9 " class = "outline-3" >
< h3 id = "org f38bff9 "> < 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-org4 ef3a8b " class = "outline-3" >
< h3 id = "org4 ef3a8b "> < span class = "section-number-3" > 4.5< / span > Methodology - Agile< / h3 >
< div id = "outline-container-org4 8002a2 " class = "outline-3" >
< h3 id = "org4 8002a2 "> < 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-org 632441b " class = "outline-3" >
< h3 id = "org 632441b "> < span class = "section-number-3" > 4.6< / span > Deliverables< / h3 >
< div id = "outline-container-org 7ae7df9 " class = "outline-3" >
< h3 id = "org 7ae7df9 "> < 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-org 376f00d " class = "outline-3" >
< h3 id = "org 376f00d "> < span class = "section-number-3" > 4.7< / span > Implementation Plan And Anticipations< / h3 >
< div id = "outline-container-org ac73571 " class = "outline-3" >
< h3 id = "org ac73571 "> < span class = "section-number-3" > 4.7< / span > Implementation Plan And Anticipations< / h3 >
< div class = "outline-text-3" id = "text-4-7" >
< p >
I’ 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’ll be deploying the final product on Dig
< / div >
< / div >
< div id = "outline-container-org 09ddace " class = "outline-3" >
< h3 id = "org 09ddace "> < span class = "section-number-3" > 4.8< / span > Requirements Validation And Verification< / h3 >
< div id = "outline-container-org 90dc6e8 " class = "outline-3" >
< h3 id = "org 90dc6e8 "> < 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-org 0641d83 " class = "outline-3" >
< h3 id = "org 0641d83 "> < span class = "section-number-3" > 4.9< / span > Programming Environments And Costs< / h3 >
< div id = "outline-container-org 9bd94bd " class = "outline-3" >
< h3 id = "org 9bd94bd "> < 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-org b350393 " class = "outline-3" >
< h3 id = "org b350393 "> < span class = "section-number-3" > 4.10< / span > Timeline And Milestones< / h3 >
< div id = "outline-container-org 47d5c34 " class = "outline-3" >
< h3 id = "org 47d5c34 "> < 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" >
@ -949,23 +949,23 @@ All code was written and all models were trained on a Lenovo T15G with an Intel
< / div >
< 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" >
< p >
RhymeStorm™ is an application to help singers and songwriters brainstorm new lyrics.
< / p >
< / div >
< div id = "outline-container-org d4bc25 2" class = "outline-3" >
< h3 id = "org d4bc25 2"> < span class = "section-number-3" > 5.1< / span > Descriptive And Predictive Methods< / h3 >
< div id = "outline-container-org f4f182 2" class = "outline-3" >
< h3 id = "org f4f182 2"> < 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-org db26818 " class = "outline-4" >
< h4 id = "org db26818 "> < span class = "section-number-4" > 5.1.1< / span > Descriptive Method< / h4 >
< div id = "outline-container-org c528a3a " class = "outline-4" >
< h4 id = "org c528a3a "> < 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 = "orgd b5100a "> < / a > Most Common Grammatical Structures In A Set Of Lyrics< br / >
< li > < a id = "orgd 8d18dc "> < / 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… 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’ll see that a simple noun-phrase is the most pop
< / ol >
< / div >
< div id = "outline-container-org e3fba21 " class = "outline-4" >
< h4 id = "org e3fba21 "> < span class = "section-number-4" > 5.1.2< / span > Prescriptive Method< / h4 >
< div id = "outline-container-org be8b0ef " class = "outline-4" >
< h4 id = "org be8b0ef "> < 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 = "org d291e1e "> < / a > Most Likely Word To Follow A Given Phrase< br / >
< li > < a id = "org 28d6ca7 "> < / 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 “bother me” and as
< / div >
< / div >
< div id = "outline-container-org cc6c85c " class = "outline-3" >
< h3 id = "org cc6c85c "> < span class = "section-number-3" > 5.2< / span > Datasets< / h3 >
< div id = "outline-container-org f199af0 " class = "outline-3" >
< h3 id = "org f199af0 "> < 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-org b7d8f5c " class = "outline-3" >
< h3 id = "org b7d8f5c "> < span class = "section-number-3" > 5.3< / span > Decision Support Functionality< / h3 >
< div id = "outline-container-org 7654cf1 " class = "outline-3" >
< h3 id = "org 7654cf1 "> < 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-org f95bd9 1" class = "outline-4" >
< h4 id = "org f95bd9 1"> < span class = "section-number-4" > 5.3.1< / span > Choosing Words For A Lyric Based On Markov Likelihood< / h4 >
< div id = "outline-container-org 1ac636d " class = "outline-4" >
< h4 id = "org 1ac636d "> < 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-org fa7f864 " class = "outline-4" >
< h4 id = "org fa7f864 "> < span class = "section-number-4" > 5.3.2< / span > Choosing Words To Complete A Lyric Based On Rhyme Quality< / h4 >
< div id = "outline-container-org 2358a3e " class = "outline-4" >
< h4 id = "org 2358a3e "> < 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’ll see that the first 20 or so rhymes are perfec
< / div >
< / div >
< div id = "outline-container-org e4c4579 " class = "outline-3" >
< h3 id = "org e4c4579 "> < span class = "section-number-3" > 5.4< / span > Featurizing, Parsing, Cleaning, And Wrangling Data< / h3 >
< div id = "outline-container-org c482544 " class = "outline-3" >
< h3 id = "org c482544 "> < 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: “Foo” is the same as “foo”.
< / div >
< / div >
< div id = "outline-container-org 1a147a4 " class = "outline-3" >
< h3 id = "org 1a147a4 "> < span class = "section-number-3" > 5.5< / span > Data Exploration And Preparation< / h3 >
< div id = "outline-container-org 91aa027 " class = "outline-3" >
< h3 id = "org 91aa027 "> < 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-org 4b21646 " class = "outline-3" >
< h3 id = "org 4b21646 "> < span class = "section-number-3" > 5.6< / span > Data Visualization Functionalities For Data Exploration And Inspection< / h3 >
< div id = "outline-container-org 1a0b4a9 " class = "outline-3" >
< h3 id = "org 1a0b4a9 "> < 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’ s structure.
< / p >
< pre class = "example" id = "org ade918 e">
< pre class = "example" id = "org eea8c2 e">
(let [initialized-trie (-> > (trie/make-trie "dog" "dog" "dot" "dot" "do" "do"))]
initialized-trie)
;; => {(\d \o \g) "dog", (\d \o \t) "dot", (\d \o) "do", (\d) nil}
@ -1543,12 +1543,12 @@ The Hidden Markov Model data structure doesn’t lend itself to any useful g
< / div >
< / div >
< div id = "outline-container-org 7c77849 " class = "outline-3" >
< h3 id = "org 7c77849 "> < span class = "section-number-3" > 5.7< / span > Implementation Of Interactive Queries< / h3 >
< div id = "outline-container-org 275101e " class = "outline-3" >
< h3 id = "org 275101e "> < 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-org 2517ab8 " class = "outline-4" >
< h4 id = "org 2517ab8 "> < span class = "section-number-4" > 5.7.1< / span > Generate Rhyming Lyrics< / h4 >
< div id = "outline-container-org 852b3e5 " class = "outline-4" >
< h4 id = "org 852b3e5 "> < 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-org 8e8ae1d " class = "outline-4" >
< h4 id = "org 8e8ae1d "> < span class = "section-number-4" > 5.7.2< / span > Complete Lyric Containing Suffix< / h4 >
< div id = "outline-container-org 7a6a74c " class = "outline-4" >
< h4 id = "org 7a6a74c "> < 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-org 5e053f1 " class = "outline-3" >
< h3 id = "org 5e053f1 "> < span class = "section-number-3" > 5.8< / span > Implementation Of Machine Learning Methods< / h3 >
< div id = "outline-container-org f34c3e3 " class = "outline-3" >
< h3 id = "org f34c3e3 "> < 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 = "org dfa4bfb ">
< pre class = "example" id = "org e2aacf2 ">
[(("< s> " "call" "me")
("< s> " "call")
("< s> " "right" "< /s> ")
@ -1954,8 +1954,8 @@ It also performs compaction and serialization. Song lyrics are typically provide
< / div >
< / div >
< div id = "outline-container-org 0e9f46e " class = "outline-3" >
< h3 id = "org 0e9f46e "> < span class = "section-number-3" > 5.9< / span > Functionalities To Evaluate The Accuracy Of The Data Product< / h3 >
< div id = "outline-container-org 8ddd93c " class = "outline-3" >
< h3 id = "org 8ddd93c "> < 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, “ accuracy” is subjective.
@ -2022,8 +2022,8 @@ This standardized measure of accuracy can be used to compare different language
< / div >
< / div >
< div id = "outline-container-org a76fd7f " class = "outline-3" >
< h3 id = "org a76fd7f "> < span class = "section-number-3" > 5.10< / span > Security Features< / h3 >
< div id = "outline-container-org 9343640 " class = "outline-3" >
< h3 id = "org 9343640 "> < 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,15 +2039,15 @@ With this precaution in place, attackers will not be able to snoop the content t
< / div >
< / div >
< div id = "outline-container-org 9f1976e " class = "outline-3" >
< h3 id = "org 9f1976e "> < span class = "section-number-3" > 5.11< / span > Tools To Monitor And Maintain The Product< / h3 >
< div id = "outline-container-org beec8d8 " class = "outline-3" >
< h3 id = "org beec8d8 "> < 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" >
< 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 = "org 2f0e245 " class = "figure" >
< div id = "org e2868d1 " class = "figure" >
< p > < img src = "images/stats.png" alt = "stats.png" / >
< / p >
< / div >
@ -2066,8 +2066,8 @@ The server also includes the <code>certbot</code> script for updating and mainta
< / div >
< / div >
< div id = "outline-container-org 3ef6d2 5" class = "outline-3" >
< h3 id = "org 3ef6d2 5"> < 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-org 237f85 5" class = "outline-3" >
< h3 id = "org 237f85 5"> < 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 > .
@ -2086,7 +2086,7 @@ The first visualization is a scatter plot of rhyming words with the “quali
< / p >
< div id = "org 1fb5741 " class = "figure" >
< div id = "org 06801ce " class = "figure" >
< p > < img src = "images/wgu-vis.png" alt = "wgu-vis.png" / >
< / p >
< / div >
@ -2096,7 +2096,7 @@ The second visualization is a word cloud where the size of each word is based on
< / p >
< div id = "org f0c79a8 " class = "figure" >
< div id = "org 248f3e6 " class = "figure" >
< p > < img src = "images/wgu-vis-cloud.png" alt = "wgu-vis-cloud.png" / >
< / p >
< / div >
@ -2106,7 +2106,7 @@ The third visualization is a table that lists all of the rhymes, their pronuncia
< / p >
< div id = "org 20904b6 " class = "figure" >
< div id = "org 08b3295 " class = "figure" >
< p > < img src = "images/wgu-vis-table.png" alt = "wgu-vis-table.png" / >
< / p >
< / div >
@ -2122,16 +2122,16 @@ Create each of the following forms of documentation for the product you have dev
< / p >
< / div >
< div id = "outline-container-org 26e0552 " class = "outline-3" >
< h3 id = "org 26e0552 "> < span class = "section-number-3" > 6.1< / span > Business Vision< / h3 >
< div id = "outline-container-org 4152d68 " class = "outline-3" >
< h3 id = "org 4152d68 "> < 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-org 2deb602 " class = "outline-4" >
< h4 id = "org 2deb602 "> < span class = "section-number-4" > 6.1.1< / span > Requirements< / h4 >
< div id = "outline-container-org d6dbcbf " class = "outline-4" >
< h4 id = "org d6dbcbf "> < 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 >
@ -2147,8 +2147,8 @@ Provide rhyming lyric suggestions optionally constrained by syllable count.
< / div >
< / div >
< div id = "outline-container-org 50e6024 " class = "outline-3" >
< h3 id = "org 50e6024 "> < span class = "section-number-3" > 6.2< / span > Data Sets< / h3 >
< div id = "outline-container-org 4a35ec8 " class = "outline-3" >
< h3 id = "org 4a35ec8 "> < 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 > .
@ -2172,8 +2172,8 @@ See <code>resources/darklyrics-markov.tpt</code>
< / div >
< / div >
< div id = "outline-container-org 88bf50f " class = "outline-3" >
< h3 id = "org 88bf50f "> < span class = "section-number-3" > 6.3< / span > Data Analysis< / h3 >
< div id = "outline-container-org 491415c " class = "outline-3" >
< h3 id = "org 491415c "> < 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’ 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 id = "outline-container-org bfb5bd1 " class = "outline-3" >
< h3 id = "org bfb5bd1 "> < span class = "section-number-3" > 6.4< / span > Assessment Of Hypothesis< / h3 >
< div id = "outline-container-org 09d3b6d " class = "outline-3" >
< h3 id = "org 09d3b6d "> < span class = "section-number-3" > 6.4< / span > Assessment Of Hypothesis< / h3 >
< div class = "outline-text-3" id = "text-6-4" >
< p >
I’ ll use an example output to subjectively assess the results of the project.
@ -2402,31 +2402,31 @@ and more.
< / div >
< / div >
< div id = "outline-container-org ba06040 " class = "outline-3" >
< h3 id = "org ba06040 "> < span class = "section-number-3" > 6.5< / span > Visualizations< / h3 >
< div id = "outline-container-org 8b65bb5 " class = "outline-3" >
< h3 id = "org 8b65bb5 "> < span class = "section-number-3" > 6.5< / span > Visualizations< / h3 >
< div class = "outline-text-3" id = "text-6-5" >
< div id = "org 8dcec40 " class = "figure" >
< div id = "org b9f003b " class = "figure" >
< p > < img src = "images/rhyme-scatterplot.png" alt = "rhyme-scatterplot.png" / >
< / p >
< / div >
< div id = "org 8e67cf1 " class = "figure" >
< div id = "org 5a6eba2 " class = "figure" >
< p > < img src = "images/wordcloud.png" alt = "wordcloud.png" / >
< / p >
< / div >
< div id = "org 2b6ab7c " class = "figure" >
< div id = "org e4574af " class = "figure" >
< p > < img src = "images/rhyme-table.png" alt = "rhyme-table.png" / >
< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-org 6cbdd1b " class = "outline-3" >
< h3 id = "org 6cbdd1b "> < span class = "section-number-3" > 6.6< / span > Accuracy< / h3 >
< div id = "outline-container-org ea5d2bf " class = "outline-3" >
< h3 id = "org ea5d2bf "> < span class = "section-number-3" > 6.6< / span > Accuracy< / h3 >
< div class = "outline-text-3" id = "text-6-6" >
< p >
It’ s difficult to objectively test the models accuracy since the goal of “ brainstorm new lyric” 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 >
< / div >
< div id = "outline-container-org c57d287 " class = "outline-4" >
< h4 id = "org c57d287 "> < span class = "section-number-4" > 6.6.1< / span > Percentage Of Generated Lines That Are Valid English Sentences< / h4 >
< div id = "outline-container-org 3dd10eb " class = "outline-4" >
< h4 id = "org 3dd10eb "> < 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’ s Treebank Project< / a > .
@ -2516,8 +2516,8 @@ Where <code>nlp/valid-sentence?</code> is defined as follows.
< / div >
< / div >
< div id = "outline-container-org 955fa59 " class = "outline-3" >
< h3 id = "org 955fa59 "> < span class = "section-number-3" > 6.7< / span > Testing< / h3 >
< div id = "outline-container-org cb62c6d " class = "outline-3" >
< h3 id = "org cb62c6d "> < 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.
@ -2561,12 +2561,12 @@ Here is an example of the test suite for the code related to syllabification: <a
< / div >
< / div >
< div id = "outline-container-org 0ab73b1 " class = "outline-3" >
< h3 id = "org 0ab73b1 "> < span class = "section-number-3" > 6.8< / span > Source Code< / h3 >
< div id = "outline-container-org 255c334 " class = "outline-3" >
< h3 id = "org 255c334 "> < 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-org 00b5 cd 4" class = "outline-4" >
< h4 id = "org 00b5 cd 4"> < span class = "section-number-4" > 6.8.1< / span > Tightly Packed Trie< / h4 >
< div id = "outline-container-org c461807 " class = "outline-4" >
< h4 id = "org c461807 "> < 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.
@ -2578,8 +2578,8 @@ This is the data structure that backs the Hidden Markov Model.
< / div >
< / div >
< div id = "outline-container-org 868fdae " class = "outline-4" >
< h4 id = "org 868fdae "> < span class = "section-number-4" > 6.8.2< / span > Phonetics< / h4 >
< div id = "outline-container-org 4fb64a9 " class = "outline-4" >
< h4 id = "org 4fb64a9 "> < 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.
@ -2591,8 +2591,8 @@ This is the helper library that syllabifies and manipulates words, phones, and s
< / div >
< / div >
< div id = "outline-container-org 72aa443 " class = "outline-4" >
< h4 id = "org 72aa443 "> < span class = "section-number-4" > 6.8.3< / span > Rhyming< / h4 >
< div id = "outline-container-org 525243c " class = "outline-4" >
< h4 id = "org 525243c "> < 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.
@ -2604,8 +2604,8 @@ This library contains code for analyzing rhymes, sentence structure, and manipul
< / div >
< / div >
< div id = "outline-container-org c96a09 c" class = "outline-4" >
< h4 id = "org c96a09 c"> < span class = "section-number-4" > 6.8.4< / span > Web Server And User Interface< / h4 >
< div id = "outline-container-org ebded1 c" class = "outline-4" >
< h4 id = "org ebded1 c"> < 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’ ll upload it with submission of the project.
@ -2614,16 +2614,16 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / div >
< div id = "outline-container-org af98fb3 " class = "outline-3" >
< h3 id = "org af98fb3 "> < span class = "section-number-3" > 6.9< / span > Quick Start< / h3 >
< div id = "outline-container-org 65ca38b " class = "outline-3" >
< h3 id = "org 65ca38b "> < 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-org 760df04 " class = "outline-4" >
< h4 id = "org 760df04 "> < span class = "section-number-4" > 6.9.1< / span > How To Initialize Development Environment< / h4 >
< div id = "outline-container-org ab61e43 " class = "outline-4" >
< h4 id = "org ab61e43 "> < 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 = "org 82ca639 "> < / a > Required Software< br / >
< li > < a id = "org 5680068 "> < / 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 >
@ -2633,7 +2633,7 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / li >
< li > < a id = "org 903b0b1 "> < / a > Steps< br / >
< li > < a id = "org bf08499 "> < / a > Steps< br / >
< div class = "outline-text-5" id = "text-6-9-1-2" >
< ol class = "org-ol" >
< li > Run < code > ./db/run.sh & & ./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’ll upload it with submission
< / ol >
< / div >
< div id = "outline-container-org 46b547f " class = "outline-4" >
< h4 id = "org 46b547f "> < span class = "section-number-4" > 6.9.2< / span > How To Run Software Locally< / h4 >
< div id = "outline-container-org bb3f0fd " class = "outline-4" >
< h4 id = "org bb3f0fd "> < 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 = "org dfc2075 "> < / a > Requirements< br / >
< li > < a id = "org 42f92cf "> < / 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 >
@ -2662,7 +2662,7 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / li >
< li > < a id = "org 24542f9 "> < / a > Steps< br / >
< li > < a id = "org b5cfee1 "> < / a > Steps< br / >
< div class = "outline-text-5" id = "text-6-9-2-2" >
< ol class = "org-ol" >
< li > Run < code > ./db/run.sh & & ./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’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 19:51 < / p >
< p class = "date" > Created: 2021-07-22 Thu 20:04 < / p >
< / div >
< / body >
< / html >