2018-05-13第六周 用python httpserver实现简单的api微服务

由于最终的结果要求在前端进行简单的输入测试,因此需要一个api提供doc2vec的调用。

1.数据清洗

def clean_words(data): # 自定义过滤字符 r = u'[a-zA-Z0-9’!"#$¥●·:~%&\'()☆ ─*+,-./:;<=>?@,。?★、…【】┎━━┑ご┃┭┃┖┦│┞┚▁▃▂═╗╮╭╯◥▍◇▄▃▁╰╗║▋▊' \ u'( )()<>《》?“”‘’!✿※[\\]^_`▅{|}~]+' # 利用正则表达式清洗以上字符

ret = re.sub(r, "", data) # 过滤换行符

ret = str.replace(ret, "\n", " ") # 过滤tab符

ret = str.replace(ret, "\t", " ") return ret

2.分词

def divide_words(data): # 打开HMM参数使分词器能够探索新词 隐马尔可夫链

seg_list = jieba.cut(data, HMM=True) return list(seg_list)

3.HTTP Server核心类,相应GET请求,将文本转换成向量

class HTTPServer_RequestHandler(BaseHTTPRequestHandler): # 处理GET请求

def do_GET(self): arr = [] # 解析诸如“url/?content=...”的请求

if '?' in self.path: self.queryString = urllib.parse.unquote(self.path.split('?', 1)[1]) params = urllib.parse.parse_qs(self.queryString) # 解析属性为content的表单及其内容

if "content" in params: content = params["content"][0] arr = model.infer_vector(divide_words(clean_words(content))) # 返回网页的“200”代码

self.send_response(200) # 发送网页header信息

self.send_header('Content-type', 'text/html') self.end_headers() # 返回维度为400的向量,向量之间以“_”连接

ret = ""

for i in range(len(arr) - 1): ret = ret + str(arr[i]) + "_"

if len(arr) != 0: ret = ret + str(arr[-1]) self.wfile.write(bytes(ret, "utf8"))

4. main

if __name__ == "__main__": # 启动服务器

httpd = HTTPServer(('', port), HTTPServer_RequestHandler)

print("Starting simple_httpd on port: " + str(httpd.server_port))

httpd.serve_forever()

你可能感兴趣的:(2018-05-13第六周 用python httpserver实现简单的api微服务)