我已经使用烧瓶进行了简单的应用。其主要目标是使用post和get方法实现CLD2(语言检测器)。它适用于英语,但适用于乌尔都语,阿拉伯语等任何其他语言。它给出了无效结果
以下是相应的脚本
# http://127.0.0.1:5000/cld2?text="Your input text string"
# OUTPUT ( It gives output as we done in CC)
#"585&URDU-99-1155"
from flask import Flask,abort,jsonify,request
from flask_restful import Resource, Api, reqparse
import cld2
from bs4 import BeautiflSoup
import sys
import urllib2, urllib
import re
reload(sys)
sys.setdefaultencoding('utf8')
app = Flask(__name__)
api = Api(app)
class HelloWorld(Resource):
def cld2_states(self, txt):
txt = txt.encode("utf8")
isReliable, textBytesFound, details = cld2.detect(txt)
outstr = str(textBytesFound)
for item in details: # Iterate 3 languages
if item[0] != "Unknown":
outstr += '&' + item[0] + '-' + str(item[2]) + '-' + str(int(item[3]))
return outstr
def get(self):
parser = reqparse.RequestParser()
parser.add_argument('text', type=str)
parser.add_argument('url', type=str)
_dict = dict(parser.parse_args())
if _dict["text"] is not None:
value = _dict["text"]
print type(value)
return self.cld2_states(value)
return None
def post(self):
data = request.get_json(force=True)
# print data
predict_request = [data['content']][1]
out = self.cld2_states(predict_request)
return jsonify(score=out)
api.add_resource(HelloWorld, '/cld2')
if __name__ == '__main__':
app.run(debug=True, port=6161, host='0.0.0.0')
如果我通过get方法提供查询,它会给出正确的结果,但对于post方法中的相同查询,它只返回一个数字。但如果文字是英文的,那么帖子也会给出正确的结果。 我的客户端是一个简单的Java应用程序,然后迭代文件并逐个查找它们的语言。
答案 0 :(得分:0)
问题可能在于这一行:
outstr = str(textBytesFound)
不要使用str
从bytes
转换为str
,而是使用str.decode()
,如下所示:
outstr = textBytesFound.decode("utf-8")
(很明显,如果你的文字没有用UTF-8编码,你需要告诉Python使用正确的编码)