日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.NET Core使用微软AI认知服务识别文字语言

發(fā)布時(shí)間:2023/12/4 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core使用微软AI认知服务识别文字语言 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊上方藍(lán)字關(guān)注“汪宇杰博客”

識(shí)別一段文字的語言有多種途徑,在這個(gè)以AI為熱點(diǎn)的時(shí)代,我們也可以給自己的應(yīng)用強(qiáng)行加上AI,然后就能加上“智慧”的名字“自主研發(fā)成功”后去吹牛逼。今天我?guī)Т蠹襾砜纯慈绾问褂梦④浿腔墼艫zure提供的AI認(rèn)知服務(wù)來識(shí)別一段文字的語言。

本文的前提條件是你得有一個(gè)Azure國(guó)際版的訂閱,免費(fèi)試用的也行。

新建Azure認(rèn)知服務(wù)賬戶

點(diǎn)擊"Create a resouce",然后搜索"Translator",選擇"Translator Text",這是Azure認(rèn)知服務(wù)的其中一種應(yīng)用,主要用途是做翻譯,但我們也能用來識(shí)別文字的語言。

Name中指定一個(gè)名稱,可以任意,不影響程序開發(fā)。選擇一個(gè)Pricing tier,這里我選的F0是免費(fèi)的。Resource group也可以任意指定,不會(huì)影響程序開發(fā)。

創(chuàng)建完成后,到Keys中復(fù)制一個(gè)Key,Key1Key2都可以使用,作用是完全一樣的,沒有什么講究。

.NET Core 調(diào)用認(rèn)知服務(wù)

Azure認(rèn)知服務(wù)提供了REST接口,所以我們?cè)?NET Core里可以像使用任何REST API一樣,構(gòu)造請(qǐng)求,并解析返回的JSON字符串。

TextLanguageDetector

新建一個(gè)名為TextLanguageDetector的類。用來封裝調(diào)用Azure認(rèn)知服務(wù)的操作。定義屬性HostRouteSubscriptionKey。其中SubscriptionKey就是之前從Azure Portal里復(fù)制的那個(gè)Key。這個(gè)需要讓調(diào)用者根據(jù)自己的Azure賬戶自由調(diào)整,所以留在構(gòu)造函數(shù)參數(shù)里。HostRoute是固定的,因此可以寫死在程序里。

public class TextLanguageDetector

{

? ? public string Host { get; } = "https://api.cognitive.microsofttranslator.com";

? ? public string Route { get; } = "/detect?api-version=3.0";

? ? public string SubscriptionKey { get; }


? ? public TextLanguageDetector(string subscriptionKey)

? ? {

? ? ? ? SubscriptionKey = subscriptionKey;

? ? }


? ? public async Task<DetectResult> DetectAsync(string text)

? ? {

? ? ? ? // ...

? ? }

}

DetectAsync方法接受的是需要識(shí)別的文本,返回的DetectResult類型也是我們自己定義的,它的定義稍后再看。我們先看看該方法的具體實(shí)現(xiàn):

if (string.IsNullOrWhiteSpace(text))

{

? ? throw new ArgumentNullException(nameof(text));

}


object[] body = { new { Text = text } };

var requestBody = JsonConvert.SerializeObject(body);


using (var client = new HttpClient())

using (var request = new HttpRequestMessage())

{

? ? request.Method = HttpMethod.Post;

? ? request.RequestUri = new Uri(Host + Route);

? ? request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");

? ? request.Headers.Add("Ocp-Apim-Subscription-Key", SubscriptionKey);

? ? var response = await client.SendAsync(request);

? ? var jsonResponse = await response.Content.ReadAsStringAsync();

? ? return new DetectResult(jsonResponse);

}

非常簡(jiǎn)明直接。使用POST動(dòng)作向認(rèn)知服務(wù)的終端地址提交一個(gè)構(gòu)造的Body,內(nèi)容Text為方法的輸入?yún)?shù),即要識(shí)別的文字。API的認(rèn)證方式使用SubscriptionKey。最終拿到的jsonResponse是識(shí)別結(jié)果,轉(zhuǎn)為DetectResult類型。

假設(shè)識(shí)別的是簡(jiǎn)體中文,并且沒有發(fā)生異常,那么Azure認(rèn)知服務(wù)的返回Json會(huì)是這樣:

[

? ? {

? ? ? ? "language": "zh-Hans",

? ? ? ? "score": 1.0,

? ? ? ? "isTranslationSupported": true,

? ? ? ? "isTransliterationSupported": true,

? ? ? ? "alternatives": [

? ? ? ? ? ? {

? ? ? ? ? ? ? ? "language": "ja",

? ? ? ? ? ? ? ? "score": 1.0,

? ? ? ? ? ? ? ? "isTranslationSupported": true,

? ? ? ? ? ? ? ? "isTransliterationSupported": true

? ? ? ? ? ? }

? ? ? ? ]

? ? }

]

language是語言代碼,zh-Hans就是簡(jiǎn)體中文。score表示AI認(rèn)為有多大的可能性是該語言,1.0就是非常確信。對(duì)于文本“予力地球上每一人、每一組織,成就不凡”的識(shí)別結(jié)果,出現(xiàn)了兩種確信的語言:簡(jiǎn)體中文和日語。但日語是alternatives的,所以AI基本斷定,該語言為簡(jiǎn)體中文。具體的語言代碼和語言名稱對(duì)應(yīng)關(guān)系可以從這里找到:

var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

構(gòu)造DetectResult

為了讓我們程序?qū)φ{(diào)用者更加友好,我們不會(huì)只返回Json。我根據(jù)Azure認(rèn)知服務(wù)可能返回的兩種情況:成功、失敗,構(gòu)造了DetectResult類型:

public class DetectResult

{

? ? public string RawJson { get; set; }

? ? public bool IsSuccess => !RawJson.Contains("\"error\"");


? ? public string ErrorMessage

? ? {

? ? ? ? get

? ? ? ? {

? ? ? ? ? ? var obj = JsonConvert.DeserializeObject<dynamic>(RawJson);

? ? ? ? ? ? return obj.error.message.ToString();

? ? ? ? }

? ? }


? ? public DetectResult(string rawJson)

? ? {

? ? ? ? RawJson = rawJson;

? ? }


? ? public List<TextCogResult> ToCogResults()

? ? {

? ? ? ? return IsSuccess ? JsonConvert.DeserializeObject<List<TextCogResult>>(RawJson) : null;

? ? }

}

RawJson用來存放認(rèn)知服務(wù)返回的Json本身,可以讓調(diào)用者去做一些更加高級(jí)的自定義解析。IsSuccess表示調(diào)用是否有成功,如果不成功的話用戶可以檢查ErrorMessage獲得具體錯(cuò)誤消息。成功的話可以調(diào)用ToCogResults()方法把結(jié)果解析到TextCogResult類型里去。這個(gè)方法返回的是一個(gè)List,因?yàn)檩斎氲奈谋静灰欢ㄖ挥幸环N語言。

public class TextCogResult

{

? ? public string Language { get; set; }

? ? public float Score { get; set; }

? ? //public bool IsTranslationSupported { get; set; }

? ? //public bool IsTransliterationSupported { get; set; }

? ? public Alternative[] Alternatives { get; set; }

}

public class Alternative

{

? ? public string Language { get; set; }

? ? public float Score { get; set; }

? ? //public bool IsTranslationSupported { get; set; }

? ? //public bool IsTransliterationSupported { get; set; }

}

以上的所有代碼都可以封裝到一個(gè).NET Standard類庫(kù)里,這樣就可以跨.NET Framework, .NET Core或者Xamarin使用了。

為了方便大家,我已經(jīng)發(fā)布了可以直接使用的NuGet包

https://www.nuget.org/packages/AzureAILanguageDetector

應(yīng)用程序

以.NET Core控制臺(tái)應(yīng)用為例,調(diào)用TextLanguageDetector并輸出語言的本地名稱和英語名稱:

var texts = new[]

{

? ? "Empower every person and every organization on the planet to achieve more",

? ? "予力地球上每一人、每一組織,成就不凡"

};


var dt = new TextLanguageDetector("你的Key");

foreach (var text in texts)

{

? ? var result = dt.DetectAsync(text).Result;

? ? if (result.IsSuccess)

? ? {

? ? ? ? var r = result.ToCogResults();


? ? ? ? var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

? ? ? ? var ctr = cultures.FirstOrDefault(c => c.Name == r.First().Language);

? ? ? ? if (ctr != null) Console.WriteLine($"{ctr.EnglishName} - {ctr.NativeName}");

? ? }

? ? else

? ? {

? ? ? ? Console.WriteLine(result.ErrorMessage);

? ? }

}

本文示例代碼:https://github.com/EdiWang/DotNet-Samples/tree/master/CogSvcLngDetect

參考資料:https://docs.microsoft.com/en-us/azure/cognitive-services/translator/quickstart-csharp-detect

總結(jié)

以上是生活随笔為你收集整理的.NET Core使用微软AI认知服务识别文字语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。