【发布时间】:2017-11-29 04:06:07
【问题描述】:
我正在构建一个我正在学习 Flask 的数据产品(一个 NLP 聊天应用程序),以便用户可以拥有更好的 UI 来与我的产品进行交互。
我在 Flask 中写下了以下代码来获取用户输入并将其存储在变量中。
main.py
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
return render_template('init.html')
@app.route('/handle_data', methods = ['POST', 'GET'])
def handle_data():
userQuestion = request.form['userQuestion']
print(userQuestion)
return render_template('init.html', userQuestion = userQuestion)
if __name__ == '__main__':
app.run()
init.html
<!DOCTYPE HTML>
<html>
<body>
<form action="{{ url_for('handle_data') }}" method="post">
<input type="text" name="userQuestion">
<input type="submit">
</form>
</body>
</html>
我已经处理了表单数据并将其存储在变量userQuestion 中。我想将此变量传递给另一个包含我的训练模型代码的 python 脚本。
doc2vec_main.py
import gensim
import nltk
import numpy
from gensim import models
from gensim import utils
from gensim import corpora
from nltk.stem import PorterStemmer
ps = PorterStemmer()
sentence0 = models.doc2vec.LabeledSentence(words=[u'sampling',u'what',u'is',u'sampling'],tags=["SENT_0"])
sentence1 = models.doc2vec.LabeledSentence(words=[u'sampling',u'tell',u'me',u'about',u'sampling'],tags=["SENT_1"])
sentence2 = models.doc2vec.LabeledSentence(words=[u'elig',u'what',u'is',u'my',u'elig'],tags=["SENT_2"])
sentence3 = models.doc2vec.LabeledSentence(words=[u'eligiblity',u'limit', u'what',u'is',u'my'],tags=["SENT_3"])
sentence4 = models.doc2vec.LabeledSentence(words=[u'eligiblity',u'claim',u'how',u'much',u'can',u'I'],tags=["SENT_4"])
sentence5 = models.doc2vec.LabeledSentence(words=[u'retir',u'eligibility',u'claim',u'i',u'am',u'how',u'much',u'can',u'i'],tags=["SENT_5"])
# ... list of all the training set.
# User inputs a question
document = input("Ask a question:")
tokenized_document = list(gensim.utils.tokenize(document, lowercase = True, deacc = True))
stemmed_document = []
for w in tokenized_document:
stemmed_document.append(ps.stem(w))
sentence19 = models.doc2vec.LabeledSentence(words= stemmed_document, tags=["SENT_19"])
sentences = [sentence0,sentence1,sentence2,sentence3, sentence4, sentence5,sentence6, sentence7, sentence8, sentence9, sentence10, sentence11, sentence12, sentence13, sentence14, sentence15, sentence16, sentence17, sentence18, sentence19]
model = models.Doc2Vec(size=4, alpha=0.25, min_alpha=.025, min_count=1)
model.build_vocab(sentences)
for epoch in range(30):
model.train(sentences, total_examples=model.corpus_count, epochs =
model.iter)
model.alpha -= 0.002
model.min_alpha = model.alpha
model.save("my_model.doc2vec")
model_loaded = models.Doc2Vec.load('my_model.doc2vec')
print (model.docvecs.most_similar(["SENT_19"]))
我的问题是我找不到将doc2vec_main.py 连接到main.py 并将userQuestion 的值传递给document 变量doc2main.py 的方法
脚本。也就是说,当用户在表单中输入问题并单击提交时,表单的值会在doc2vec_main.py 中传递给document,然后运行剩余的脚本。
我在互联网上搜索了很多,但没有帮助。你能建议我一种方法吗?我是 Flask 的初学者,如有任何错误请见谅。
【问题讨论】:
-
那么你想这样做吗? python doc2vec_main.py arg1=from_flask ???
-
@Craicerjack,在函数 handle_data() 之外使用 userQuestion 会引发错误“未定义 userQuestion”。
-
@ΔημήτρηςΦιλίππου,我不这么认为。我的目标是构建一个用户通过表单输入问题并在同一网页中返回答案的应用程序。 doc2vec_main.py 应该在后台自动调用。它应该接受输入并给出输出。
-
然后将你的应用集成到烧瓶中,你为什么要把它分开?烧瓶是非常可扩展的。将您的文件导入flask主应用程序并做您的事情,加上handledata不是全局函数,它是一个Flask规则,仅在用户发送请求时触发