首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:从终端运行此代码

Python:从终端运行此代码
EN

Stack Overflow用户
提问于 2018-07-14 20:12:00
回答 2查看 107关注 0票数 2

我有这个代码,它的目的是通过马尔可夫链/过程生成文本。它编译得很好,没有错误,并在终端上运行,没有错误,但不会生成任何响应/返回?

为此,我进入保存Markov.py文件的目录,并在终端上运行Python3 Markov.py,如下所示

我知道我做了一些错误的事情,但不确定是什么,我也需要调用函数吗?

代码语言:javascript
复制
import random

class Markov (object):
    def __init__(self,order):
        self.order = order
        self.group_size = self.order + 1 
        self.text = "testFile.txt"  #The training text
        self.graph = {}  #Holds the information learnt
        return

    def train (self,filename):
        self.text = file (testFile.txt).read () .split()    
        self.text = self.text + self.text [ : self.order]   
        for i in range (0, len (self.text) - self.group_size):
            key = tuple (self.text [i : i + self.order]) 
            value = self.text[i + self.order] 

            if key in self.graph:
                self.graph [key].append (value)
            else:
                self.graph [key] = [value]

    def generate (self, length):
        index = random.randint (0, len(self.text) - self.order)
        result = self.text[index : index + self.order]
        for i in range (length):
            state = tuple(result[len(result) - self.order:])
            next_word = random.choice(self.graph[state])
            result.append(next_word)

        return " ".join (result[self.order : ])

x = Markov(2)
files = open("testFile.txt", "r")
filename = files

x.train(filename)
print(x.generate(10))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-15 01:32:41

假设您的代码片段被正确复制,看起来您忘记了一定程度的缩进。生成()和训练()方法是马尔可夫()对象的一部分,因此它们需要额外的缩进级别。

试试这个:

代码语言:javascript
复制
import random

class Markov (object):
    def __init__(self,order):
        self.order = order
        self.group_size = self.order + 1 
        self.text = "testFile.txt"  #The training text
        self.graph = {}  #Holds the information learnt
        return

    def train (self,filename):
        self.text = file (testFile.txt).read () .split()    
        self.text = self.text + self.text [ : self.order]   
        for i in range (0, len (self.text) - self.group_size):
            key = tuple (self.text [i : i + self.order]) 
            value = self.text[i + self.order] 

            if key in self.graph:
                self.graph [key].append (value)
            else:
                self.graph [key] = [value]

    def generate (self, length):
        index = random.randint (0, len(self.text) - self.order)
        result = self.text[index : index + self.order]
        for i in range (length):
            state = tuple(result[len(result) - self.order:])
            next_word = random.choice(self.graph[state])
            result.append(next_word)

        return " ".join (result[self.order : ])
票数 3
EN

Stack Overflow用户

发布于 2018-07-14 20:26:34

是的,您必须在代码中调用这些函数,否则这些函数将不会被调用,也不会运行。你只需要调用一个类,你必须实例化这个类,试着实例化你的类,并适当地调用函数。有关函数的更多信息可以在here中找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51338380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档