Poista alkuosan täydennys Markovin ketjusta. Siirtyy muualle
This commit is contained in:
parent
724665d309
commit
83152ddc4a
2 changed files with 6 additions and 35 deletions
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
Reference in a new issue