local data = [[It first checks whether that prefix already has a list; if not, it creates a new one with the new value. Otherwise, it uses the predefined function table.insert to insert the new value at the end of the existing list. To build the statetab table, we keep two variables, w1 and w2, with the last two words read. For each prefix, we keep a list of all words that follow it. After building the table, the program starts to generate a text with MAXGEN words. First, it re-initializes variables w1 and w2. Then, for each prefix, it chooses randomly a next word from the list of valid next words, prints that word, and updates w1 and w2. Next we show the complete program. ]]
local word_table = {}
function insert (i, value)
--If a entry does not exist, create it
if not word_table[i] then
word_table[i] = {}
end
--Insert the value into the table
table.insert(word_table[i], value)
end
function find_next_word(data, pos)
local s, e = string.find(data, "%w+", pos)
if e == nil then
return nil
end
local str = string.sub(data, s, e)
pos = e + 1
return str, pos
end
function makePair(w1, w2)
return w1 .. " " .. w2
end
function push_to_table(w1, w2, str)
-- Inserts pair into table and swaps
-- w2 -> w1 and str -> w2
-- not necessary just clean
insert(makePair(w1,w2), str)
io.write("Added entry at " .. makePair(w1,w2) .. ": " .. str .. "\n");
return w2, str
end
function markov_2 (data)
local w1 = "\n"
local w2 = "\n"
local pos = 0
local str = ""
-- Create Initial Table From Block
io.write("\n-------------\n Entry Log\n-------------\n\n")
str, pos = find_next_word(data, pos);
w1, w2 = push_to_table(w1, w2, str)
while pos ~= nil do
str, pos = find_next_word(data, pos)
if not pos then break end
w1, w2 = push_to_table(w1, w2, str)
end
--List Pairs with multiple choices
io.write("\n--------------------\n Multiple choices\n--------------------\n\n")
for k, v in pairs(word_table) do
if table.getn(v) > 1 then
io.write(k .. "\n")
end
end
end
markov_2(data);
2 Responses
Write a comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.