# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from paddle_serving_server.web_service import WebService import sys from paddle_serving_app.reader import LACReader import numpy as np class LACService(WebService): def load_reader(self): self.reader = LACReader() def preprocess(self, feed={}, fetch=[]): feed_batch = [] words_lod = [0] for ins in feed: if "words" not in ins: raise ("feed data error!") feed_data = self.reader.process(ins["words"]) words_lod.append(words_lod[-1] + len(feed_data)) feed_batch.append(np.array(feed_data).reshape(len(feed_data), 1)) words = np.concatenate(feed_batch, axis=0) fetch = ["crf_decode"] return {"words": words, "words.lod": words_lod}, fetch def postprocess(self, feed={}, fetch=[], fetch_map={}): batch_ret = [] for idx, ins in enumerate(feed): begin = fetch_map['crf_decode.lod'][idx] end = fetch_map['crf_decode.lod'][idx + 1] segs = self.reader.parse_result(ins["words"], fetch_map["crf_decode"][begin:end]) batch_ret.append({"word_seg": "|".join(segs)}) return batch_ret lac_service = LACService(name="lac") lac_service.load_model_config(sys.argv[1]) lac_service.load_reader() lac_service.prepare_server( workdir=sys.argv[2], port=int(sys.argv[3]), device="cpu") lac_service.run_rpc_service() lac_service.run_web_service()