由于最終的結(jié)果要求在前端進行簡單的輸入測試叽粹,因此需要一個api提供doc2vec的調(diào)用览效。
1.數(shù)據(jù)清洗
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參數(shù)使分詞器能夠探索新詞 隱馬爾可夫鏈
seg_list = jieba.cut(data, HMM=True) return list(seg_list)
3.HTTP Server核心類但校,相應(yīng)GET請求螃诅,將文本轉(zhuǎn)換成向量
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的表單及其內(nèi)容
if "content" in params: content = params["content"][0] arr = model.infer_vector(divide_words(clean_words(content))) # 返回網(wǎng)頁的“200”代碼
self.send_response(200) # 發(fā)送網(wǎng)頁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__": # 啟動服務(wù)器
httpd = HTTPServer(('', port), HTTPServer_RequestHandler)
print("Starting simple_httpd on port: " + str(httpd.server_port))
httpd.serve_forever()