【问题标题】:Save iteration's result from Markov Chain Python保存来自 Markov Chain Python 的迭代结果
【发布时间】:2020-06-08 21:29:33
【问题描述】:

在自然语言生成(NLG)的上下文中,我想根据 Makov Chain 的原理,用 Python 的库“Markovify”生成 300 个句子。 我的包含文本的输入文件是“SD”。

首先,我能够使用以下代码打印所有迭代的 (=300) 结果(文本):

import markovify
text_model = markovify.NewlineText(SG.Text, state_size = 1)

  for i in range(300): # Generate 300 sentences 
            result = [] 
            result.append(text_model.make_sentence())
            print(result)

然后,我想在一个列表中获取所有这些迭代结果的列表,所以我尝试了:

def f(i,result):
    for i in range(300): # Generate 300 sentences 
        result = [] 
        result.append(text_model.make_sentence())
    return result

但我只得到一个包含上次迭代结果的列表。 我可以在我的代码中修改什么以获得包含所有迭代结果的列表?

【问题讨论】:

    标签: python for-loop iteration markov-chains


    【解决方案1】:

    result = [] 必须在 for 循环之前,否则每次迭代都要初始化它:

    def f():
        result = [] 
        for i in range(300): # Generate 300 sentences 
            result.append(text_model.make_sentence())
        return result
    
    sentences = f()
    print(sentences)
    

    编辑:您实际上不需要将resulti 作为参数。

    更好的理解是:

    def f():
        return [text_model.make_sentence() for _ in range(300)]
    

    【讨论】:

    • 我已经尝试过了,在这种情况下,我刚刚获得了一个空列表作为结果
    • 奇怪......我更新了我的代码......它仍然不能像这样工作吗?如果我用"kjsdksj" 替换text_model.make_sentence()(因为我没有你的功能),它对我有用。
    • 非常感谢,我的代码正在使用您的解决方案(我使用带有句子列表的第一个解决方案)??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多