Я совершенно новичок в концепции класса, поэтому я запутался. Вот мой код:
class BigramModel(object):
def __init__(self, inputfile):
self.inputfile = inputfile
self.context = []
self.word = []
self.testfile = []
def logprob(self, context, word):
return get_sent_bigram_log_prob([(context,word)])
def get_ppl(self, testfile):
log_sent_freq = get_unigram_freq(testfile)
return 2 ** (-1 * log_sent_freq/len(nltk.word_tokenize(testfile)))
Я получаю за это результаты, но я не чувствую, что тренирую свою модель здесь. Вероятно, сделать некоторые ошибки с частью self.context et c.
Когда я хочу сгенерировать предложения с кодом ниже, я получаю сообщение об ошибке «Объект BigramModel не повторяется»
import random
def text_generator(bigramlm, n):
sentence = []
for anyWord in bigramlm:
nextword=random.choice(sorted(logprob(sent).items(), key = lambda x: x[-1] , reverse = False)[:5])
sentence = [anyWord, nextword ]+ sentence
anyWord = nextword
if nextword == '</s' or len(sentence)==20:
break
for i in range(n):
print(sentence)
model=BigramModel(shakespeare)
print(model)
print(text_generator(bigramlm=model, n=5))