1

我可以从一个简单的脚本成功加载 TextBlob 模块,但不能从 Flask 应用程序加载。我会告诉你代码和错误。

加载一个简单的脚本有效:

from textblob import TextBlob

text = 'purfect kitten'

blob = TextBlob(text)
print blob.correct()

从 Flask 应用程序加载会引发错误:

from textblob import TextBlob
from flask import (
    Flask,
    request
)

app = Flask(__name__)

@app.route('/parse', methods=['GET', 'POST'])
def parse():
    b = TextBlob(request.json['text'])
    b.correct()
    return b

if __name__ == '__main__':
    print 'running app on port 5000'
    app.debug = True
    app.run()

错误:

127.0.0.1 - - [2015 年 11 月 18 日 14:54:25]“POST /parse HTTP/1.1”500 -
回溯(最近一次通话最后):
  文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/flask/app.py”,第 1836 行,在 __call__
    return self.wsgi_app(environ, start_response)
  wsgi_app 中的文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/flask/app.py”,第 1820 行
    响应 = self.make_response(self.handle_exception(e))
  文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/flask/app.py”,第 1403 行,在 handle_exception
    reraise(exc_type, exc_value, tb)
  wsgi_app 中的文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/flask/app.py”,第 1817 行
    响应 = self.full_dispatch_request()
  文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/flask/app.py”,第 1478 行,在 full_dispatch_request
    响应 = self.make_response(rv)
  文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/flask/app.py”,第 1577 行,在 make_response
    rv = self.response_class.force_type(rv, request.environ)
  文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/werkzeug/wrappers.py”,第 841 行,位于 force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  _run_wsgi_app 中的文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/werkzeug/wrappers.py”,第 57 行
    返回 _run_wsgi_app(*args)
  文件“/Users/peter/if/root/venv/lib/python2.7/site-packages/werkzeug/test.py”,第 867 行,在 run_wsgi_app
    app_rv = app(环境,start_response)
TypeError:“TextBlob”对象不可调用

我正在使用通过 pip 安装的 textblob 版本 0.11.0。

4

1 回答 1

3

TextBlob工作正常。问题在于您TextBlobFlask应用程序中的使用方式。

Flaskapp.route需要一个Responseorstr来返回,但是你返回b的是一个TextBlob. 您需要bstr

@app.route('/parse', methods=['GET', 'POST'])
def parse():
    b = TextBlob('hello world')
    b.correct()
    return str(b)
于 2015-11-18T20:13:34.147 回答