尝试在Python(使用nltk和flask)和html模板之间传递数据

尝试在Python(使用nltk和flask)和html模板之间传递数据,python,flask,nltk,Python,Flask,Nltk,我有一个Python代码,它使用NLTK和Flask创建一个在本地服务器上工作的聊天机器人。 运行或执行代码后,html页面在本地服务器上打开,我给出了一个输入,但输入似乎没有传递到python代码。在我的python控制台上会出现一个提示,chatbot将在其中获取输入并运行 我对代码做了很多修改,运行了30-40次不同形式的代码,调试了代码,并做了很多尝试和错误。 下面的代码似乎是唯一一个运行时没有任何错误的代码,但是bot在Html页面上显示的输出是“none” 任何帮助或建议都将不胜感激

我有一个Python代码,它使用NLTK和Flask创建一个在本地服务器上工作的聊天机器人。 运行或执行代码后,html页面在本地服务器上打开,我给出了一个输入,但输入似乎没有传递到python代码。在我的python控制台上会出现一个提示,chatbot将在其中获取输入并运行

我对代码做了很多修改,运行了30-40次不同形式的代码,调试了代码,并做了很多尝试和错误。 下面的代码似乎是唯一一个运行时没有任何错误的代码,但是bot在Html页面上显示的输出是“none”

任何帮助或建议都将不胜感激。我不熟悉Flask和NLTK。多谢各位

这是我的Python代码

from nltk.chat.util import Chat, reflections
from flask import Flask, render_template, request

pairs = [
    [
        r"my name is (.*)",
        ["Hello %1, How are you today ?", ]
    ],
    [
        r"how are you ?",
        ["I'm doing good\nHow about You ?", ]
    ],
    [
        r"sorry (.*)",
        ["Its alright", "Its OK, never mind", ]
    ],
    [
        r"hi|hey|hello",
        ["Hello", "Hey there", ]
    ],
]

app = Flask(__name__, template_folder='templates')

@app.route('/', methods=['GET', 'POST'])
def samplefunction():
    if request.method == 'GET':
        return render_template('new.html')
    if request.method == 'POST':
        greetIn = request.form['human']
        greetOut = c(greetIn)
        return render_template('new.html',bot1=greetOut)

def c(x):
  chat=Chat(pairs,reflections)
  return chat.converse(x)

if __name__ == '__main__':
    app. run(host='127.0.4.21', port=5000, debug=True)
使用的html模板为-new.html,如下所示:

<html>
  <head>
    <title>BOT</title>
    <script>
        var bot = {{ bot }}
    </script>
  </head>
  <body>
      <h1>Hello, type something to begin!</h1>
      <form method='post'>
        Human: <input type='text' name='human'><br>
        Bot1: {{bot1}}<br>
        <input type="submit" name="action">
      </form>
  </body>
</html>

机器人程序
var bot={{bot}
您好,请键入要开始的内容!
人类:
Bot1:{{Bot1}}

尝试使用chat.respond(x)而不是chat.converse

我必须更改nltk.chat.util包中的代码,并为converse()方法提供一个返回类型,它最初只有一个print语句,没有返回

原来的代码是

def converse(self, quit="quit"):
        user_input = ""
        while user_input != quit:
            user_input = quit
            try:
                user_input = input(">")
            except EOFError:
                print(user_input)
            if user_input:
                while user_input[-1] in "!.":
                    user_input = user_input[:-1]
                print(self.respond(user_input))
更改后的代码:


def converse(self, quit="quit"):
        user_input = ""
        while user_input != quit:
            user_input = quit
            try:
                user_input = input(">")
            except EOFError:
                print(user_input)
            if user_input:
                while user_input[-1] in "!.":
                    user_input = user_input[:-1]
                return(self.respond(user_input))

我必须删除print语句并放入一个return方法。

您尝试过逐步调试吗?我已经,我已经删除了所有错误和bug。但是程序没有正确运行。我尝试了不同的方法在本地服务器上的主python脚本和html模板之间传递和检索数据,但似乎不起作用。在进行分步调试时,您应该确切地看到代码的哪一行开始出现错误。我们将研究这一点,并使用不同的方法重试。谢谢你也这么说。我必须更改nltkutil包中的代码,并为converse()方法提供一个返回类型,它最初只有一个print语句,没有返回。