最近遇到一个项目需求,需要自动化识别快递面单上的人名、电话、地址、邮编等信息。查询了很多方案,都不太满意。
调研了使用付费api,如快递100和百度的api等。最大的问题是速度不行,本项目每天要识别上百万的面单信息,api接口速度跟不上。其次是各家解析的正确率也达不到预期。
于是乎,人生苦短,不服就干,自己写了一个java版的面单识别算法。
上干货,如何部署自己的面单识别api接口
public class OrderParserServer {
static Gson gson = new Gson();
static AddressRecognition recog = new AddressRecognition();
public static void main(String[] args) throws Exception {
// 自定义人名 快递面单有大量昵称,如有数据可提前预加载,进一步提高面单准确率
recog.addName("两只蝴蝶");
recog.addName("打工人打工魂");
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/order", new MyHandler());
server.setExecutor(null);
System.out.println("Starting server on port: 8000");
server.start();
// Thread.sleep(100000);
// server.stop(1);
}
static class MyHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
String response = "{\"response\":\"快递订单解析错误\"}";
String parmsStr = t.getRequestURI().getQuery();
if(!parmsStr.isEmpty()){
String[] parms = parmsStr.split("&");
if(parms.length>0){
HashMap<String,String> keys = new HashMap<>();
for (String urlKey:parms){
if(urlKey.contains("=")){
String[] kv = urlKey.split("=");
keys.put(kv[0].toLowerCase(),kv[1]);
}
}
if(keys.containsKey("orderinfo")){
// System.out.println(keys);
response = gson.toJson(recog.recognition(keys.get("orderinfo")));
}
}
}
t.getResponseHeaders().set("Content-Type", "application/json");
t.sendResponseHeaders(200, 0);
OutputStream os = t.getResponseBody();
byte[] b = response.getBytes();
for (int i = 0; i < b.length; i++) {
os.write(b[i]);
}
os.close();
}
}
}
直接在服务器上,使用jar命令运行这个OrderParserServer类就可以啦!
看效果
http://localhost:8000/order?orderinfo=汉阳区北京路常青花园9栋2单元101室
浏览器返回结果
{
"address": "汉阳区北京路常青花园9栋2单元101室",
"province": "湖北省",
"phone": "15398768765",
"city": "武汉市",
"detail_address": "北京路常青花园9栋2单元101室",
"name": "张丽丽",
"county": "汉阳区"
}
java资源下载
https://download.csdn.net/download/u011024436/89035851
源码学习(查看OrderParserServer类)
https://gitee.com/addresstool/address
使用中有问题或者建议,欢迎联系邮箱[email protected]
标签:Java,String,keys,server,面单,api,单据,new From: https://www.cnblogs.com/addresstool/p/18110160