手把手教你使用百度大腦地址識別API

做者:讓天涯html

最近筆者在某小程序上購物時發現,無論公司大小、客戶多少,凡是涉及到電商基本上都有本身的下單系統,業務十分紅熟。想到各家快遞公司,都有獨立的下單平臺,出於好奇筆者在網上搜索了下,發現百度大腦居然有地址識別接口,趕忙來試一波。測試後發現,這個接口能大幅提高地址文本的處理效率,很是適合物流、快遞、電商、貿易行業,有了它就能夠本身搭建快遞下單平臺了。算法

1、 百度大腦地址識別的功能和亮點json

經過百度大腦地址識別產品頁面上的介紹,筆者羅列了這個接口的一些功能點和亮點:小程序

1.針對快遞、電商行業客戶在線提交的大量非結構化地址單據,該接口能夠幫助提取單據中的姓名、電話、地址信息;安全

2. 融合百度地圖權威數據,自動補全地址中缺失的信息和錯誤糾正,地址信息的識別準召率可達到88%;app

3. 融合詞法分析技術,自動識別文本中的人名和電話信息,識別準確率可達97%以上;dom

4. 基於語義分析構建的智能算法與場景策略相配合,平均準召率可達95%。async

2、百度大腦地址識別的應用場景函數

從接口名稱能夠了解到,地址識別能夠用於快遞下單發貨以及電商客戶訂單處理等場景。post

3、百度大腦地址識別的使用攻略

接下來一步步帶領你們調用地址識別API接口。須要說明的是,[X1] 本文采用C# 語言,開發環境爲.Net Core 3.1,採用在線API接口方式實現。

(1)平臺接入
登錄 百度智能雲-管理中心 建立 「天然語言處理」應用,獲取 「API Key 」和 「Secret Key」:https://console.bce.baidu.com/ai/?_=1578390135051&fromai=1#/ai/nlp/app/list

(2)接口文檔

文檔地址:https://ai.baidu.com/ai-doc/NLP/vk6z52h5n

請求說明

HTTP方法:POST
請求URL:https://aip.baidubce.com/rpc/2.0/nlp/v1/address
URL參數:

Header以下:

Body中放置請求參數,參數詳情以下:

{
    "text": "上海市浦東新區納賢路701號百度上海研發中心 F4A000 張三"
}

body總體文本內容能夠支持GBK和UTF-8兩種格式的編碼。

一、GBK支持:默認按GBK進行編碼,輸入內容爲GBK編碼,輸出內容爲GBK編碼,不然會接口報錯編碼錯誤

二、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編碼

返回示例:

{
    "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"
}

(3)源碼共享

(3-1)根據 API Key 和 Secret Key 獲取 AccessToken

/// 
/// 獲取百度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;
}

(3-2)調用API接口獲取識別結果

(3-2-1) 創建Index.cshtml文件

(3-2-1-1)前臺代碼:

    因爲html代碼沒法原生顯示,只能簡單說明一下:

    主要是一個form表單,須要設置屬性method="post";

    form表單裏面有幾個控件:

一個Input:type="file",asp-for="Text" ,輸入地址信息;

一個Input:type="submit",asp-page-handler="Address" ,提交請求。

(3-2-1-2) 後臺代碼: 

主程序代碼:

[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;
}

4、效果測試

一、頁面:

二、筆者輸入了5個地址,識別結果以下:

2.1

2.2

2.3

2.4

2.5

5、測試結果及建議

從上面的測試結果能夠了解到,百度大腦地址識別API接口的識別速度基本上可以在半秒識別出來,而且準確度也不錯,還能自動補齊或糾正地址信息,很方便。

考慮到百度大腦還有豐富的OCR技術和語音識別技術,在將來能夠將文本輸入、語音輸入和圖片輸入考慮在內,作成綜合的地址識別解決方案,方便各大快遞公司或電商企業使用。

不過,聯想到人們對地址、電話信息安全方面愈來愈重視,一些企業能夠在隱私安全保護這方面下功夫。好比聯合各大商城、快遞公司,搭建統一地址管理平臺,生成惟一的識別碼/二維碼,客戶能夠在平臺填寫身份地址信息,進行實名認證,而後使用惟一的識別碼/二維碼發送快遞信息,既方便客戶管理我的地址信息(不用再在各個平臺去分別更新地址信息、進行實名認證),又增強了隱私安全保護。

一些我的想法,不過百度大腦地址識別是個可直接用於業務生產的接口,仍是十分推薦的(*^▽^*)

相關文章
相關標籤/搜索