Itsellänikin on projektin aiheena trie-tietorakenteen hyödyntäminen tekstin tuottamiseen Markovin ketjun avulla. Ensinäkin sain ajatuksia toteutustavastasi myös omaan työhöni, joten kiitos siitä!
Itse lähdin rakentamaan tietokantaa luomani trie_node -luokan varaan, kuten sinäkin. Toteutukseni on toistaiseksi vain ensimmäisen asteen Markovin ketju. Uskoisin, että astetta nostettaessa tulee noden avaimen olla 2, 3, 4.. jne. pitkä lista sanoja. Sinulla tämä oli jo paljon pidemmälle ja paremmin toteutettu, niin voit ohittaa nämä :smile: . Nodet ovat triessä avain-arvo pareja, joiden avaimena on sana itse ja arvona dictionary opetusdatan perusteella tätä sanaa seuraavista sanoista muodostetuista trie-nodeista. Lisäksi nodeissa on kenttä sanan esiintymismäärälle edellisen sanan jälkeen.
Itse trie-puu on oma luokkansa, jonka juurena on trienode avaimella *. Tämä luokka käsittelee lauseiden lisäyksen ja hakemisen puusta. Puun syvyys määräytyy Markovin ketjun asteen mukaan, esim 2. asteella puun syvyys olisi 3 (* on juuri). Lausetta muodostettaessa lehdestä hypätään takaisin juuren lapsiin, josta ilmentyminä löytyvät kaikki sanat/sanajoukot trie-nodeina. Täten sama avain on puussa periaatteessa useassa eri paikassa. Nodet eivät ole kuitenkaan identtisiä, sillä esiintymismäärät vaihtelevat sen mukaan, mitä sanaa/sanoja kyseinen node seuraa.
En väitä, että tapani tehdä tämä on paras. Itselleni totetuts on jatkuvaa painimista kysymyksen "Onko tässä tavassa mitään järkeä?" kanssa. Halusin kuitenkin jakaa ajatukseni, koska itse olen muiden ajatuksia kipeästi kaivannut kurssin aikana :slightly_smiling_face:
Konkreettista palautetta koodisi rakenteesta
Sanoisin, että tavoitteesi kannalta yksittäisten kirjainten tallentaminen ei liene kannattavaa, sillä luovasti Markovin ketjulla toteutettuja uusia sanoja ei taida olla tarkoitus muodostaa. Sen sijaan uusien lauseiden muodostamiseksi pienin tarvittava yksikkö on sana, joten puuhun lienee järkevämpää tallentaa lauseita opetusmateriaalin perusteella.
Edellisen perusteella SanaRakenne -luokan voisi muuttaa LauseRakenne -luokaksi ja käsittelytason nostaa kirjaimista sanojen tasolle.
Tällöin Trienode-luokan yhteydet ja seuraavat sanat löytyisivät samasta Dictionarysta, koska sanaa ei ole koskaan purettu kirjaimiksi.
Uuden lauseen generoinnin voisi kenties aloittaa ilman käyttäjän sana-syötettä generoimalla trie-puun juuren lapsista aloitussana Markovin ketjulla painottaen niiden esiintymsen mukaan. Tämän painotuksen itse toteutat näemmä SanaRakenne -luokallasi.
Moikat kanssaopiskelijalta! :wave:
Alkuhöpinoitä
Itsellänikin on projektin aiheena trie-tietorakenteen hyödyntäminen tekstin tuottamiseen Markovin ketjun avulla. Ensinäkin sain ajatuksia toteutustavastasi myös omaan työhöni, joten kiitos siitä! Itse lähdin rakentamaan tietokantaa luomani trie_node -luokan varaan, kuten sinäkin. Toteutukseni on toistaiseksi vain ensimmäisen asteen Markovin ketju. Uskoisin, että astetta nostettaessa tulee noden avaimen olla 2, 3, 4.. jne. pitkä lista sanoja. Sinulla tämä oli jo paljon pidemmälle ja paremmin toteutettu, niin voit ohittaa nämä :smile: . Nodet ovat triessä avain-arvo pareja, joiden avaimena on sana itse ja arvona dictionary opetusdatan perusteella tätä sanaa seuraavista sanoista muodostetuista trie-nodeista. Lisäksi nodeissa on kenttä sanan esiintymismäärälle edellisen sanan jälkeen. Itse trie-puu on oma luokkansa, jonka juurena on trienode avaimella *. Tämä luokka käsittelee lauseiden lisäyksen ja hakemisen puusta. Puun syvyys määräytyy Markovin ketjun asteen mukaan, esim 2. asteella puun syvyys olisi 3 (* on juuri). Lausetta muodostettaessa lehdestä hypätään takaisin juuren lapsiin, josta ilmentyminä löytyvät kaikki sanat/sanajoukot trie-nodeina. Täten sama avain on puussa periaatteessa useassa eri paikassa. Nodet eivät ole kuitenkaan identtisiä, sillä esiintymismäärät vaihtelevat sen mukaan, mitä sanaa/sanoja kyseinen node seuraa. En väitä, että tapani tehdä tämä on paras. Itselleni totetuts on jatkuvaa painimista kysymyksen "Onko tässä tavassa mitään järkeä?" kanssa. Halusin kuitenkin jakaa ajatukseni, koska itse olen muiden ajatuksia kipeästi kaivannut kurssin aikana :slightly_smiling_face:
Konkreettista palautetta koodisi rakenteesta