Цепочка Маркова генерирует предложение, начиная с начала файла каждый раз - PullRequest
0 голосов
/ 26 октября 2019

Я создаю чат-бота. Он захватывает файл и вот следующий код, генерирующий случайные вещи. Но это совсем не случайно. Он начинает с первого слова из файла и каждый раз генерирует очень похожий текст. Я что-то пропустил? Пожалуйста, помогите мне.

Python 3.7

import random
import os.path

table = {}
sentences_maximum = 10


def generate_table(name_of_file):
    stopword = "\n"
    stopsentence = (".", "!", "?",)
    w1 = stopword
    w2 = stopword
    file = open(name_of_file, 'r')
    if os.path.getsize(name_of_file) == 0:
        print("name of file == 0")
        return
    print("generating table")
    global table
    for line in file:
        for word in line.split():
            if word[-1] in stopsentence:
                table.setdefault((w1, w2), []).append(word[0:-1])
                w1, w2 = w2, word[0:-1]
                word = word[-1]
            table.setdefault((w1, w2), []).append(word)
            w1, w2 = w2, word
    table.setdefault((w1, w2), []).append(stopword)
    file.close()


def generate_sentence_output(filename):
    global sentences_maximum
    generate_table(filename)
    print('generating sentences')
    sentencesep = " "
    stopword = "\n"
    stopsentence = (".", "!", "?",)
    result = ""
    w1 = stopword
    w2 = stopword
    sentencecount = 0
    sentence = []
    global table
    if os.path.getsize(filename) == 0:
        result = "Сначала научи меня говорить"
        return result
    while sentencecount < sentences_maximum:
        newword = random.choice(table[(w1, w2)])
        if newword == stopword:
            break
        if newword in stopsentence:
            result = result + ("%s%s%s" % (" ".join(sentence), newword, sentencesep))
            sentence = []
            sentencecount += 1
        else:
            sentence.append(newword)
        w1, w2 = w2, newword
    print(result)
    return result


generate_sentence_output("file.txt")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...