首页 > 编程语言 >手动搭建 物流单据识别api服务 部署教程 Java

手动搭建 物流单据识别api服务 部署教程 Java

时间:2024-04-02 11:12:26浏览次数:33  
标签:Java String keys server 面单 api 单据 new

最近遇到一个项目需求,需要自动化识别快递面单上的人名、电话、地址、邮编等信息。查询了很多方案,都不太满意。
调研了使用付费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

相关文章

  • Java实现纸张折成珠穆朗玛峰(while循环运用)
    目录1:题目2:分析3:代码展示4:效果图1:题目世界最高山峰是珠穇朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?2:分析1.定义一个变量用来记录山峰的高度2.定义一个变量用来记录纸张的初始厚度......
  • java 插值搜索-迭代与递归(Interpolation Search)
            给定一个由n个均匀分布值arr[]组成的排序数组,编写一个函数来搜索数组中的特定元素x。         线性搜索需要O(n)时间找到元素,跳转搜索需要O(?n)时间,二分搜索需要O(logn)时间。插值搜索是对实例二分搜索的改进,其中排序数组中的值是均......
  • 批量邮箱API发送邮件时如何提高发送效率?
    批量邮箱API发送邮件的方法?如何用API批量发送邮件?如何在使用批量邮箱API发送邮件时提高发送效率,却是众多企业和开发者所关注的焦点。AokSend将从多个方面探讨如何优化批量邮箱API发送邮件的效率,确保邮件能够迅速、准确地送达目标用户。批量邮箱API发送邮件:选择服务不同的服......
  • C# .NET6 WebAPI JWT身份验证服务
    自定义扩展类usingMicrosoft.AspNetCore.Authentication;usingMicrosoft.AspNetCore.Authentication.JwtBearer;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.AspNetCore.Mvc.ModelBinding;usingSystem.Text.Json;namespaceDemo{///<summary>///......
  • Java并发-如何避免死锁
    一般在Java项目里用到锁的场景不多,有朋友调侃说用到锁的次数还没有面试被问到的次数多,哈哈!1、死锁如何产生说句难听话,锁一般都很少用到,何况死锁呢?想产生死锁还是有点难的,需要满足2个条件:共享资源同时只能被一个线程使用,如果已经有一个线程占用了资源,其余线程只能等待,直到资......
  • C# .NET6 WebAPI 全局异常过滤器
    自定义返回级别namespaceDemo{///<summary>///自定义返回级别///</summary>publicenumResultLevel:int{///<summary>///正确///</summary>OK=0,///<summary>......
  • 大数据之 MapReduce 相关的 Java API 应用
    注意:本文基于前两篇教程Linux系统CentOS7上搭建HadoopHDFS集群详细步骤YARN集群和MapReduce原理及应用MapReduce是ApacheHadoop项目中的一种编程模型,用于大规模数据集的并行处理。在Hadoop中,MapReduce使用JavaAPI来编写Map和Reduce函数。API简......
  • 【附源码】JAVA计算机毕业设计汪汪喵宠物寄养中心系统设计与开发(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。人们对宠物的关爱和投入也越来越多,这导致了宠物服务行业的迅速发展。其中,宠......
  • 【附源码】JAVA计算机毕业设计网上扶贫农产品销售系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着互联网技术的迅速发展,传统的农产品销售模式已经不能满足现代消费者的需求。尤其是在扶贫领域,由于地理位置偏远、信息不对称等因素,贫困地区的农产品往往难以打......
  • 2024java攻克了抖音视频去水印视频下载(绝对好使)
    publicstaticvoidmain(String[]args)throwsIOException{System.out.println("----抖音去水印解析----");System.out.println("\n请输入从抖音复制的视频链接:");Scannersc=newScanner(System.in);//Stringinfo=sc.nextLine();......