手把手教你使用百度大脑地址识别API
2021-03-03 12:25
标签:ken 设置 handler address com 个人 html 处理 isnull 作者:让天涯 最近笔者在某小程序上购物时发现,不管公司大小、客户多少,凡是涉及到电商基本上都有自己的下单系统,业务十分成熟。想到各家快递公司,都有独立的下单平台,出于好奇笔者在网上搜索了下,发现百度大脑竟然有地址识别接口,赶紧来试一波。测试后发现,这个接口能大幅提升地址文本的处理效率,非常适合物流、快递、电商、贸易行业,有了它就可以自己搭建快递下单平台了。 一、 百度大脑地址识别的功能和亮点 通过百度大脑地址识别产品页面上的介绍,笔者罗列了这个接口的一些功能点和亮点: 1.针对快递、电商行业客户在线提交的大量非结构化地址单据,该接口可以帮助提取单据中的姓名、电话、地址信息; 2. 融合百度地图权威数据,自动补全地址中缺失的信息和错误纠正,地址信息的识别准召率可达到88%; 3. 融合词法分析技术,自动识别文本中的人名和电话信息,识别准确率可达97%以上; 4. 基于语义分析构建的智能算法与场景策略相配合,平均准召率可达95%。 二、百度大脑地址识别的应用场景 从接口名称可以了解到,地址识别可以用于快递下单发货以及电商客户订单处理等场景。 三、百度大脑地址识别的使用攻略 接下来一步步带领大家调用地址识别API接口。需要说明的是,[X1] 本文采用C# 语言,开发环境为.Net Core 3.1,采用在线API接口方式实现。 (1)平台接入 (2)接口文档 文档地址:https://ai.baidu.com/ai-doc/NLP/vk6z52h5n 请求说明 HTTP方法:POST Header如下: Body中放置请求参数,参数详情如下: body整体文本内容可以支持GBK和UTF-8两种格式的编码。 1、GBK支持:默认按GBK进行编码,输入内容为GBK编码,输出内容为GBK编码,否则会接口报错编码错误 2、UTF-8支持:若文本需要使用UTF-8编码,请在url参数中添加charset=UTF-8 (大小写敏感) 例如 https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?charset=UTF-8&access_token=24.f9ba9c5241b67688bb4adbed8bc91dec.2592000.1485570332.282335-8574074 请求参数 返回说明 返回格式 JSON格式 默认返回内容为GBK编码 若用户指定输入为UTF-8编码(通过指定charset参数),则返回内容为UTF-8编码 返回示例: (3)源码共享 (3-1)根据 API Key 和 Secret Key 获取 AccessToken (3-2)调用API接口获取识别结果 (3-2-1) 建立Index.cshtml文件 (3-2-1-1)前台代码: 由于html代码无法原生显示,只能简单说明一下: 主要是一个form表单,需要设置属性method="post"; form表单里面有几个控件: (3-2-1-2) 后台代码: 主程序代码: 其他相关函数: 四、效果测试 1、页面: 2、笔者输入了5个地址,识别结果如下: 2.1 2.2 2.3 2.4 2.5 五、测试结果及建议 从上面的测试结果可以了解到,百度大脑地址识别API接口的识别速度基本上能够在半秒识别出来,并且准确度也不错,还能自动补齐或纠正地址信息,很方便。 考虑到百度大脑还有丰富的OCR技术和语音识别技术,在未来可以将文本输入、语音输入和图片输入考虑在内,做成综合的地址识别解决方案,方便各大快递公司或电商企业使用。 不过,联想到人们对地址、电话信息安全方面越来越重视,一些企业可以在隐私安全保护这方面下功夫。比如联合各大商城、快递公司,搭建统一地址管理平台,生成唯一的识别码/二维码,客户可以在平台填写身份地址信息,进行实名认证,然后使用唯一的识别码/二维码发送快递信息,既方便客户管理个人地址信息(不用再在各个平台去分别更新地址信息、进行实名认证),又加强了隐私安全保护。 一些个人想法,不过百度大脑地址识别是个可直接用于业务生产的接口,还是十分推荐的(*^▽^*) 手把手教你使用百度大脑地址识别API 标签:ken 设置 handler address com 个人 html 处理 isnull 原文地址:https://www.cnblogs.com/AIBOOM/p/12989185.html
登陆 百度智能云-管理中心 创建 “自然语言处理”应用,获取 “API Key ”和 “Secret Key”:https://console.bce.baidu.com/ai/?_=1578390135051&fromai=1#/ai/nlp/app/list
请求URL:https://aip.baidubce.com/rpc/2.0/nlp/v1/address
URL参数:{
"text": "上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三"
}
返回参数{
"province": "上海市",
"city": "上海市",
"province_code": "310000",
"log_id": 1420038644986026316,
"text": "上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三",
"town": "张江镇",
"phonenum": "",
"detail": "纳贤路701号百度上海研发中心F4A000",
"county": "浦东新区",
"person": "张三",
"town_code": "310115125",
"county_code": "310115",
"city_code": "310100"
}
///
/// 获取百度access_token
///
/// API Key
/// Secret Key
///
public static string GetAccessToken(string clientId, string clientSecret)
{
string authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List paraList = new List();
paraList.Add(new KeyValuePair("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair("client_id", clientId));
paraList.Add(new KeyValuePair("client_secret", clientSecret));
HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
string result = response.Content.ReadAsStringAsync().Result;
JObject jo = (JObject)JsonConvert.DeserializeObject(result);
string token = jo["access_token"].ToString();
return token;
}
一个Input:type="file",asp-for="Text" ,输入地址信息;
一个Input:type="submit",asp-page-handler="Address" ,提交请求。
[BindProperty]
public string Text { get; set; }
public List msg = new List();
public string curPath { get; set; }
string NLP_API_KEY="你的API KEY";
string NLP_SECRET_KEY="你的SECRET KEY";
public async Task OnPostAddressAsync()
{
if (string.IsNullOrEmpty(Text))
{
ModelState.AddModelError(string.Empty, "请输入具体内容!");
}
if (!ModelState.IsValid)
{
return Page();
}
msg = new List();
DateTime startTime = DateTime.Now;
string result = GetNLPJson(Text, NLP_API_KEY, NLP_SECRET_KEY);
DateTime endTime = DateTime.Now;
TimeSpan ts = endTime - startTime;
JObject jo = (JObject)JsonStringToObj(result);
try
{
msg.Add("地址识别结果(耗时" + ts.TotalSeconds + "秒):\n");
msg.Add("联系人");
msg.Add("姓名:" + jo["person"].ToString());
msg.Add("电话号码:" + jo["phonenum"].ToString());
msg.Add("地址");
msg.Add("省:" + jo["province"].ToString());
msg.Add("市:" + jo["city"].ToString());
msg.Add("区(县):" + jo["county"].ToString());
msg.Add("街道(乡/镇):" + jo["town"].ToString());
msg.Add("详细地址:" + jo["detail"].ToString());
msg.Add(result);
}
catch (Exception e)
{
msg.Add(result);
}
return Page();
}
///
/// 自然语言处理Json字符串
///
/// 内容
/// API Key
/// Secret Key
///
public static string GetNLPJson(string text, string clientId, string clientSecret)
{
string token = GetAccessToken(clientId, clientSecret);
string host = "https://aip.baidubce.com/rpc/2.0/nlp/v1/address?charset=UTF-8&access_token=" + token;
Encoding encoding = Encoding.Default;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.ContentType = "application/json";
request.KeepAlive = true;
string str = "{\"text\":\"" + text;
str += "\"}";
byte[] buffer = encoding.GetBytes(str);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = reader.ReadToEnd();
return result;
}
///
/// 获取百度access_token
///
/// API Key
/// Secret Key
///
public static string GetAccessToken(string clientId, string clientSecret)
{
string authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List paraList = new List();
paraList.Add(new KeyValuePair("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair("client_id", clientId));
paraList.Add(new KeyValuePair("client_secret", clientSecret));
HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
string result = response.Content.ReadAsStringAsync().Result;
JObject jo = (JObject)JsonConvert.DeserializeObject(result);
string token = jo["access_token"].ToString();
return token;
}
///
/// 生成一个随机唯一文件名(Guid)
///
///
public static string GetRandomName()
{
return Guid.NewGuid().ToString("N");
}
///
/// json转为对象
///
/// Json字符串
///
public static Object JsonStringToObj(string jsonString)
{
Object s = JsonConvert.DeserializeObject(jsonString);
return s;
}