Попытка передать данные между Python (используя nltk и flask) и шаблоном html - PullRequest
1 голос
/ 26 марта 2020

У меня есть код Python, который использует NLTK и Flask для создания чат-бота, который работает на локальном сервере. После того, как я запускаю или выполняю код, на локальном сервере открывается страница html, и я даю ввод, но ввод, похоже, не передается моему python коду. На моей консоли python появляется приглашение, где чат-бот принимает данные и запускается.

Я много работал с кодом, выполнял различные его формы около 30-40 раз, отлаживал и выполнял много методом проб и ошибок. Приведенный ниже код является единственным, который, кажется, работает без ошибок, но вывод, отображаемый ботом на странице 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 - новый. 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>

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Мне пришлось изменить код в пакете 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))

Мне пришлось удалить оператор печати и поставить метод возврата.

0 голосов
/ 06 апреля 2020

Попробуйте использовать chat.respond (x) вместо chat.converse.

...