由于最终的结果要求在前端进行简单的输入测试,因此需要一个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()