1
0
Fork 0

Poista alkuosan täydennys Markovin ketjusta. Siirtyy muualle

This commit is contained in:
Vili Sinervä 2022-10-01 14:39:50 +03:00
parent 724665d309
commit 83152ddc4a
2 changed files with 6 additions and 35 deletions

View file

@ -16,7 +16,6 @@ class MarkovKetju:
raise ValueError("Aste ei voi olla < 1!")
self._trie = trie
self._opetusdata = []
self._aste = aste
self._menneet_tilat = deque()
@ -26,9 +25,8 @@ class MarkovKetju:
["ABC", "ABB", "AAAAAA"]
"""
self._trie = Trie()
self._opetusdata = opetusdata
for jono in self._opetusdata:
for jono in opetusdata:
if len(jono) > self._aste:
alkio = deque(jono[0:self._aste+1])
self._trie.lisaa(alkio)
@ -40,20 +38,11 @@ class MarkovKetju:
def aseta_alkuosa(self, alkuosa):
"""Asettaa alkuosan, jonka perusteella Markovin ketju luo seuraavan merkin.
Alkuosan pituus on vähintään yksi, liian pitkästä alkuosasta jätetään
loppu pois. Liian lyhyttä täydennetään opetusdatan perusteella.
Alkuosan pituus on sama kuin ketjun aste, liian pitkästä alkuosasta jätetään
loppu pois.
"""
while len(alkuosa) < self._aste:
ketju = MarkovKetju(len(alkuosa))
ketju.kasittele_opetusdata(self._opetusdata)
ketju.aseta_alkuosa(alkuosa)
alkuosa = [x for x in alkuosa]
seuraava = ketju.seuraava()
if not seuraava:
raise ValueError("Alkuosan täydennys ei onnistunut!")
alkuosa.append(seuraava)
if len(alkuosa) < self._aste:
raise ValueError("Liian lyhyt alkuosa!")
self._menneet_tilat = deque([alkuosa[i] for i in range(0, self._aste)])
def seuraava(self):

View file

@ -10,9 +10,6 @@ class TestMarkovKetju(unittest.TestCase):
ketju = MarkovKetju(1)
opetusdata = ["ABCDEA"]
ketju.kasittele_opetusdata(opetusdata)
self.assertRaises(ValueError, ketju.seuraava)
ketju.aseta_alkuosa("E")
self.assertEqual("A", ketju.seuraava())
@ -38,25 +35,10 @@ class TestMarkovKetju(unittest.TestCase):
self.assertEqual("E", ketju.seuraava())
self.assertEqual("A", ketju.seuraava())
self.assertRaises(ValueError, ketju.aseta_alkuosa, "F")
ketju.aseta_alkuosa("EF")
self.assertFalse(ketju.seuraava())
def test_alkuosan_taydennys(self):
ketju = MarkovKetju(2)
opetusdata = ["ABCDEAB"]
ketju.kasittele_opetusdata(opetusdata)
self.assertRaises(ValueError, ketju.aseta_alkuosa, "F")
ketju.aseta_alkuosa("A")
self.assertEqual("C", ketju.seuraava())
self.assertEqual("D", ketju.seuraava())
self.assertEqual("E", ketju.seuraava())
self.assertEqual("A", ketju.seuraava())
self.assertEqual("B", ketju.seuraava())
self.assertEqual("C", ketju.seuraava())
def test_seuraava_todennakoisyys(self):
"""Testaa, että Markovin ketjun antamat merkit ilmenevät likimain oikeilla yleisyyksillä"""
ketju = MarkovKetju(1)