Problem 2. (Random Text Generator ) Write a client program text_generator.py tha
ID: 3713308 • Letter: P
Question
Problem 2. (Random Text Generator ) Write a client program text_generator.py that takes two command-line integers k and T, reads the input text from standard input (for efficiency reasons, use sys.stdin.read() to read the text) and builds a Markov model of order k from the input text; then, starting with the k-gram consisting of the first k characters of the input text, prints out T characters generated by simulating a trajectory through the corresponding Markov chain, followed by a new line. You may assume that the text has length at least k, and also that T ? k. $
python3 text_generator . py 2 50 < data / input17 . txt gaggcgaggcgagagagaaaagaaaggcgaaggagagaggagaggaggcg
Explanation / Answer
To write Python program for Random Text genarator by using Markov Chain Model.
----------------------------------------------------------------------------------------------------------------------------------------------------------
# A simple Source code of Generator.py
# Import text generator.py as gp
# import defaultdict()
# read text sys.stdin.read()
class DefaultDict( )
Constructor: (@default_value)->
@c = { }
get: (k)->
if not @c[k]?
@c[k] = @default_value()
@c[k]
set: (k,T)->
@c[k]=T
items: ->
([k,T] for k,T of @c)
class Counter extends DefaultDict
constructor: ->
@c = { }
@default_value = -> 0
int: (k, T, count=1)->
@c[k] = @get(k) + count.
Class MarkovChainModel:
def __init__(self, text, k, T):
def order(self): # Order K of Markov chain model
def sys.stdin.read(text): # Read the text
def freq(self, kgram) # Number of occurance of kgram in text
def freq2(self, kgram, c) # Number of times that charcters c kgram.
def rand(self, kgram) # random character following given kgram.
def gen(self, kgram, T) # generating a string of length T charcaters.
def repalceUnknow(corrupted, K, text):
# create a Markov chain model of order k from given text
# Assume that text has length at least k.
# prints simulating trajectory Markov chain T characters.
sys.stdin.read(text)
self.k = k
self.tran = defaultdict(float)
self.alph = list(set(list(text)))
self.kgrams = defaultdict(int)
n = len(text)
text += text[:k]
for i in range(n):
self.tran[text[i:i+k],text[i+k]] += 1.
self.kgrams[text[i:i+k]] += 1.
def order(self): # order k of Markov chain model
return self.k
def freq(self, kgram): # number of occurrences of kgram in text
assert len(kgram) == self.k # (check if kgram is of length k)
return self.kgrams[kgram]
def freq2(self, kgram, c): # number of times that character c follows kgram
assert len(kgram) == self.k # (check if kgram is of length k)
return self.tran[kgram,c]
def rand(self, kgram, T): # random character following given kgram
assert len(kgram) == self.k # (check if kgram is of length k)
Z = sum([self.tran[kgram, alph] for alph in self.alph])
return gp.random.choice(self.alph, 1, p=gp.array([self.tran[kgram, alph] for alph in self.alph])/Z)
def gen(self, kgram, T): # generate a String of length T characters
assert len(kgram) == self.k # by simulating a trajectory through the corresponding
str = '' " # Markov chain model. The newly first k characters.
for _ in range(T): # generated String should be the argument kgram.
#print kgram, c # check if kgram is of length k.
c = self.rand(kgram)[0] # Assume that T is at least k.
kgram = kgram[1:] + c
str += c
return str # Return value of srting.
---------------------------------------------------------------------------------------------------------------------------------------------------------
OUTPUT:
Z = MarkovChainModel ('gagggagaggccgaaggagagaggagaggaggcggagaaa', 2)
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.