WPF 基于 Azure 的认知服务 情绪分析 语言检测 关键短语提取
本文主要是来安利大家基于 Azure 的认知服务,主要是文本认知服务,可以做到分析输入文本的情绪,以及判断当前输入文本所属语言等功能
本文分为两个部分 ,一个就是在 Azure 上的配置,另一个就是 WPF 端的使用
在 Azure 上我用的是 世纪互联 的一块钱订阅,可以用一块钱订阅一个月的试用,这就是为什么我这几天都会写 Azure 相关博客的原因
登录 Azure 控制台,新建一个 认知服务 新建方法基本上看界面就会了,而微软的界面会改来改去,我就不放详细的步骤了
这个服务属于新建完成就完成 Azure 端的部署

在开始之前还请小伙伴看一下定价层是否是免费的哈,点击资源管理,点击定价层,选择免费,点击下方的选择按钮
接下来还需要点击 密钥和终结点 复制粘贴密钥和访问地址

在上面的图片可以看到有两个密钥,其实这两个密钥可以在代码里面使用任意一个,在这里放两个只是为了在一个失效之后可以备用另一个
新建一个 WPF 项目,在项目里面通过 NuGet 安装 Microsoft.Azure.CognitiveServices.Language.TextAnalytics 库,这个是 2.1 版本的,最新版本是 3.0 预览版。不过 3.0 预览版需要 Azure 服务器的支持,暂时中国微软的版本是不支持的,如果使用 3.0 的预览版将会提示
{code: "404", message: "Resource not found"}
使用 3.0 预览版需要安装 Azure.AI.TextAnalytics 库
安装 NuGet 库可以通过修改 csproj 的方法
<ItemGroup>
<!--<PackageReference Include="Azure.AI.TextAnalytics" Version="1.0.0-preview.4" />-->
<PackageReference Include="Microsoft.Azure.CognitiveServices.Language.TextAnalytics" Version="4.0.0" />
</ItemGroup>
被注释掉的库就是 3.0 预览版的,现在是 2020.5 这个库还是预览版
在 WPF 中添加一个简单的界面

<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid>
<TextBox x:Name="Text" Margin="10,10,10,10" TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
</Grid>
<Grid Grid.Row="1">
<TextBox x:Name="ShowText" Margin="10,10,10,10" IsReadOnly="True" TextWrapping="Wrap"></TextBox>
</Grid>
<StackPanel Margin="10,10,10,10" Grid.Row="2" Orientation="Horizontal">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="10,10,10,10"></Setter>
</Style>
</StackPanel.Resources>
<Button Content="情绪分析" Click="SentimentAnalysis_OnClick"></Button>
<Button Content="语言检测" Click="LanguageDetection_OnClick"></Button>
<Button Content="命名实体识别 (NER)" Click="RecognizeEntities_OnClick"></Button>
<Button Content="关键短语提取" Click="KeyPhraseExtraction_OnClick"></Button>
</StackPanel>
</Grid>
在使用之前需要创建客户端模型,需要传入刚才复制的 key 和终结点 也就是访问地址
private static TextAnalyticsClient GetAnalyticsClient()
{
var key = "d131f725093f460c99a09580beba34ed";
var endpoint = "https://lindexi.cognitiveservices.azure.cn/";
var credentials = new ApiKeyServiceClientCredentials(key);
TextAnalyticsClient client = new TextAnalyticsClient(credentials)
{
Endpoint = endpoint
};
return client;
}
请将上面的 key 和 endpoint 替换为你自己 Azure 的
上面的 ApiKeyServiceClientCredentials 是自己实现的类,请看代码
class ApiKeyServiceClientCredentials : ServiceClientCredentials
{
public ApiKeyServiceClientCredentials(string apiKey)
{
_apiKey = apiKey;
}
public override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request == null)
{
throw new ArgumentNullException(nameof(request));
}
request.Headers.Add("Ocp-Apim-Subscription-Key", _apiKey);
return base.ProcessHttpRequestAsync(request, cancellationToken);
}
private readonly string _apiKey;
}
在拿到 TextAnalyticsClient 类就可以调用很多有趣的方法了,本文的例子用的是同步的方法,但是推荐在实际项目中使用异步的方法。使用同步的方法会让界面卡顿
下面是界面的各个方法实现
private void SentimentAnalysis_OnClick(object sender, RoutedEventArgs e)
{
var client = GetAnalyticsClient();
var sentiment = client.Sentiment(Text.Text, "zh");
ShowText.Text = $"分数:{sentiment.Score:0.00} \r\n 评分接近 0 表示消极情绪,评分接近 1 表示积极情绪";
}
private void LanguageDetection_OnClick(object sender, RoutedEventArgs e)
{
var client = GetAnalyticsClient();
var detectLanguage = client.DetectLanguage(Text.Text);
ShowText.Text =
$"判断出可能的语言有 {detectLanguage.DetectedLanguages.Count} 个 \r\n {string.Join("\r\n", detectLanguage.DetectedLanguages.Select(temp => $"语言 {temp.Name} 分数 {temp.Score:0.00}"))}";
}
private void RecognizeEntities_OnClick(object sender, RoutedEventArgs e)
{
var client = GetAnalyticsClient();
var result = client.Entities(Text.Text);
ShowText.Text = "";
foreach (var entity in result.Entities)
{
ShowText.Text +=
$"Name: {entity.Name},\tType: {entity.Type ?? "N/A"},\tSub-Type: {entity.SubType ?? "N/A"} \r\n";
foreach (var match in entity.Matches)
{
ShowText.Text +=
$"\tOffset: {match.Offset},\tLength: {match.Length},\tScore: {match.EntityTypeScore:F3}\r\n";
}
}
}
private void KeyPhraseExtraction_OnClick(object sender, RoutedEventArgs e)
{
var client = GetAnalyticsClient();
var result = client.KeyPhrases(Text.Text);
ShowText.Text = $"关键词: {string.Join(";", result.KeyPhrases)}";
}
大概运行效果如下
情绪分析可以分析出一句话是积极的还是消极的,使用分数表示,评分接近 0 表示消极情绪,评分接近 1 表示积极情绪

语言检测主要用来分析当前输入文本属于哪个语言

如输入英文就会判断当前是英文

命名实体用来分析文本里面的某些单词是属于什么,例如某些单词是人的名字,某些单词是时间等

关键短语提取可以用来提取一句话中的关键词

整体功能还是很爽的,特别是开发特别简单。而服务本文是中国微软速度也特别快,本文用的是同步的代码,但实际上界面也不卡
快速入门:文本分析客户端库 v3 - Azure Cognitive Services
本文代码放在 github 欢迎小伙伴访问
WPF 基于 Azure 的认知服务 情绪分析 语言检测 关键短语提取的更多相关文章
- 基于DES加密的服务端分析
此程序建立了一个TCP服务端,端口号为10010,之后accept等待连接,如果接受到连接,那么就发送一些欢迎信息,以及提示信息---发送quit退出. 之后不停地调用recv,如果接受到数据,那么判 ...
- [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
废话不多说 直接上图这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红外 ...
- Azure 认知服务概述
背景知识 近些年随着机器学习.深度学习等技术的不断发展,人工智能在越来越多的场景得到了应用,如人脸识别.图像识别.语音识别.语音生成.自然语言处理.决策分析等等,让机器拥有了听.说.看和思考的能力,很 ...
- 技术博客:Azure 认知服务
Azure 认知服务 1.概述 微软认知服务(Microsoft Cognitive Services)集合了多种智能API以及知识API,使每个开发人员无需具备机器学习的专业知识就能接触到 AI ...
- Azure认知服务之表格识别器
认知服务 Azure 认知服务的目标是帮助开发人员创建可以看.听.说.理解甚至开始推理的应用程序. Azure 认知服务中的服务目录可分为五大主要支柱类别:视觉.语音.语言.Web 搜索和决策.开发人 ...
- Java 调用Azure认知服务Demo--Computer API
说明 本文主要介绍使用Java代码,基于HTTP请求调用Microsoft Azure的认知服务.图片来源分别介绍了使用公网的URL和上传本地图片. 依赖的jar包下载地址: key的获取需要登录到A ...
- Azure认知服务的实际应用-资讯采集推送
Azure认知服务的实际应用-资讯采集推送 演示 实现的是通过使用各种azure服务,每天自动获取资讯.博客,定时推送到公众号的功能! 微信公众号搜索TechViews,或直接扫描二维码关注,每天推送 ...
- 通过流量管理器和 Azure Functions(作为代理)为全球用户提供最靠近的认知服务(或自定义API)
本实战是一个中等复杂度的综合性实战,涉及到的内容有TrafficManager,AzureFunctions,域名/域名解析等几个内容. 本案例基础介绍: https://www.bilibili.c ...
- Azure 认知服务 (2) 计算机视觉API - 分析图像
<Windows Azure Platform 系列文章目录> 在上一节内容中,笔者介绍了微软认知服务的概览. 在本节中,笔者将详细介绍微软认知服务中的一种:计算机视觉 (Computer ...
- Azure 认知服务 (3) 计算机视觉API - 分析图像,使用C#代码
<Windows Azure Platform 系列文章目录> 在上一节中Azure 认知服务 (2) 计算机视觉API - 分析图像,笔者介绍了如何使用API测试控制台进行调试. 本章将 ...
随机推荐
- 您真的了解Java中的锁吗?这7种不同维度下的锁知道吗?
写在开头 在上几篇博文中,我们聊到过volatile关键字,用它修饰变量可以保证可见性与有序性,但它并不是锁,在使用时并不会阻塞线程,且不保证原子性,属于一种轻量级.高效的同步方式,因此,如果我们的使 ...
- 「AntV」景点轨迹数据获取与L7可视化
1. 引言 L7 地理空间数据可视分析引擎是一种基于 WebGL 技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用.L7 引擎支持多种数据源和数据格式,包括 GeoJSON.CSV ...
- PyQt5报错:This application failed to start because no Qt platform plugin could be initialized
问题背景: 想使用PyQt5来创建一个可视化窗口,先在pycharm里面安装PyQt5,版本为5.14.0.之后在代码中调用此包:from PyQt5 import QtCore, QtGui, Qt ...
- nginx 自定义日志格式输出
修改 nginx.conf 自定义日志格式.路径 log_format my_format '$remote_addr $msec $http_host $request_uri'; 使用精准配准,对 ...
- Csharp中表达式树
Csharper中的表达式树 这节课来了解一下表示式树是什么? 在C#中,表达式树是一种数据结构,它可以表示一些代码块,如Lambda表达式或查询表达式.表达式树使你能够查看和操作数据,就像你可以查看 ...
- APP探索之iAPP
APP探索之iAPP 1.基本作用 iAPP是一个手机上的应用,可以用于快速设计手机应用,基本免费.使用的语言好像是自创的脚本语言.无聊时可以用iAPP做一些简单的训练,可以练习文件和数据的操作.对于 ...
- kingbaseES 优化之操作系统瓶颈排查
针对操作系统性能瓶颈的判断和排查是数据库优化工作的一项重要技能,尤其是针对实例整体优化 操作系统的性能瓶颈排查无外乎四个方面 CPU.内存.磁盘.网络 针对这四个方面整理了一些相关心得和大家分享. 在 ...
- #原根,BSGS,扩欧,矩阵乘法#CF1106F Lunar New Year and a Recursive Sequence
题目 已知数列 \(f\) 满足 \(f_{1\sim k-1}=1\) 且 \(f_n=m\), 并且知道 \(f_i=(\prod_{j=1}^kf_{i-j}b_j)\bmod{99824435 ...
- #换根dp#洛谷 2986 [USACO10MAR]Great Cow Gathering G
题目 分析 处理出所有点到根节点的答案,然后换根依次求最小值 代码 #include <cstdio> #include <cctype> #define rr registe ...
- Visual Studio 2022插件的安装及使用 - 编程手把手系列文章
这次开始写手把手编程系列文章,刚写到C#的Dll程序集类库的博文,就发现需要先介绍Visual Studio 2022的插件的安装及使用,因为在后面编码的时候会用到这些个插件,所以有必要先对这个内容进 ...