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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容