hrs / markov-sentence-generator

Generates a random, locally-correct sentence using textual input and a Markov model.
GNU General Public License v3.0
95 stars 28 forks source link

pop(0) from empty list (including proposal for a fix) #1

Open markfink opened 12 years ago

markfink commented 12 years ago

hi Harry,

thanks for sharing this. It turns out to be very helpful. Unfortunately sometimes I get into trouble when your code pop from an empty list (see below).

This is my proposal for a fix but there might be a more clever alternative... def next (prevList): sum = 0.0 retval = "" index = random.random ()

Shorten prevList until it's in mapping

while toHash (prevList) not in mapping:
    if prevList:
        prevList.pop (0)  # cant pop from empty list
    else:
        curr = random.choice (starts)
        sent = curr.capitalize ()
        prevList = [curr]
# Get a random word from the mapping, given prevList
for k, v in mapping [toHash (prevList)].iteritems ():
    sum += v
    if sum >= index and retval == "":
        retval = k
return retval

all the best, Mark

Traceback (most recent call last): File "dbutils.py", line 92, in insert_news(2000) File "dbutils.py", line 84, in insert_news title, content, upd_at = create_one(gen) File "dbutils.py", line 73, in create_one content = content + gen() + ' ' File "/home/mark/devel/boodo/boodo/boodo/utils/markovgen/generator.py", line 14, in gen return genSentence(1) File "/home/mark/devel/boodo/boodo/boodo/utils/markovgen/sentence.py", line 117, in genSentence curr = next (prevList) File "/home/mark/devel/boodo/boodo/boodo/utils/markovgen/sentence.py", line 102, in next prevList.pop (0) IndexError: pop from empty list

elacsoft commented 6 years ago

please write clear indents in else field.