dotnet Microsoft.Recognizers.Text 超强大的自然语言关键词提取库
本文和大家介绍一个使用超级简单,但是功能特别强大的自然语言关键词提取库,可以根据输入的自然语言提取出里面的信息。例如我在一句话里面说了哪些数值变量或者说了手机号码等
先看看下图的一个效果,下图是尝试识别一句话里面的数值信息

新建一个 WPF 项目,大概运行效果如下

先编辑 csproj 文件,在里面添加安装库的代码
<ItemGroup>
<PackageReference Include="Microsoft.Recognizers.Text" Version="1.3.2"></PackageReference>
<PackageReference Include="Microsoft.Recognizers.Text.Number" Version="1.3.2"></PackageReference>
<PackageReference Include="Microsoft.Recognizers.Text.NumberWithUnit" Version="1.3.2"></PackageReference>
<PackageReference Include="Microsoft.Recognizers.Text.DateTime" Version="1.3.2"></PackageReference>
<PackageReference Include="Microsoft.Recognizers.Text.Sequence" Version="1.3.2"></PackageReference>
<PackageReference Include="Microsoft.Recognizers.Text.Choice" Version="1.3.2"></PackageReference>
</ItemGroup>
这几个库提供了如下的功能
数值
var recognizeNumber = NumberRecognizer.RecognizeNumber(text, Culture.Chinese);
返回的值是解析到多少个数值,可以通过下面代码转换为字符串
private static string ModelResultToString(List<ModelResult> list)
{
var pre = "";
var breakLine = "\r\n";
var str = new StringBuilder();
foreach (var modelResult in list)
{
str.Append(pre)
.Append("关键词: ")
.Append(modelResult.Text)
.Append(breakLine)
.Append(pre)
.Append($"起点 {modelResult.Start} 终点 {modelResult.End}")
.Append(breakLine);
if (modelResult.Resolution.TryGetValue("value", out var value))
{
str.Append(pre)
.Append("值:")
.Append(value)
.Append(breakLine);
}
str.Append(breakLine);
}
return str.ToString();
}
返回值包含了原文的关键词,也就是通过关键词解析的数值,关键词在原文的起点和终点。还有解析出的值
布尔
var recognizeBoolean = ChoiceRecognizer.RecognizeBoolean("对的", Culture.Chinese);
IP
var recognizeIpAddress = SequenceRecognizer.RecognizeIpAddress(text, Culture.Chinese);
电话号
var recognizePhoneNumber = SequenceRecognizer.RecognizePhoneNumber(text, Culture.Chinese);
时间
var recognizeDateTime = DateTimeRecognizer.RecognizeDateTime("下午6点", Culture.Chinese);
温度
var recognizeTemperature = NumberWithUnitRecognizer.RecognizeTemperature("十度", Culture.Chinese);
大小
var recognizeDimension = NumberWithUnitRecognizer.RecognizeDimension("十米", Culture.Chinese);
货币
var recognizeCurrency = NumberWithUnitRecognizer.RecognizeCurrency(text, Culture.Chinese);
年龄
var recognizeAge = NumberWithUnitRecognizer.RecognizeAge(text, Culture.Chinese);
序号
var recognizeOrdinal = NumberRecognizer.RecognizeOrdinal(text, Culture.Chinese);
这是一个开源的项目,请看 Recognizers-Text/.NET at master · microsoft/Recognizers-Text
本文的界面使用 WPF 写的,代码放在 github 欢迎小伙伴访问
界面如下
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid Margin="10,10,10,10">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox x:Name="Text" AcceptsReturn="True" Height="60" TextWrapping="Wrap" />
<Button Margin="10,0,0,0" Grid.Column="1" Content="字节" Click="Button_OnClick" />
</Grid>
<Grid Grid.Row="1" Margin="10,10,10,10">
<ListView x:Name="ListView" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate DataType="local:ModelInfo">
<Grid Height="300" Width="200" Margin="10,10,10,10" Background="#C6C6C6">
<Grid Margin="10,10,10,10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock FontWeight="Bold" FontSize="30" Text="{Binding Title}" />
<TextBlock Grid.Row="1" Text="{Binding Content}" TextWrapping="Wrap" />
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Grid>
数据绑定的是 ModelInfo 里面包含两个值
public class ModelInfo
{
public ModelInfo(string title, string content)
{
Title = title;
Content = content;
}
public string Title { get; }
public string Content { get; }
}
在每次点击按钮的时候重新创建列表给 ListView 控件
private void Button_OnClick(object sender, RoutedEventArgs e)
{
var text = Text.Text;
var modelInfoList = new List<ModelInfo>();
RecognizeNumber(text, modelInfoList);
RecognizeOrdinal(text, modelInfoList);
RecognizeAge(text, modelInfoList);
RecognizeCurrency(text, modelInfoList);
RecognizeDimension(text, modelInfoList);
RecognizeTemperature(text, modelInfoList);
RecognizeDateTime(text, modelInfoList);
RecognizePhoneNumber(text, modelInfoList);
RecognizeIpAddress(text, modelInfoList);
RecognizeBoolean(text, modelInfoList);
ListView.ItemsSource = modelInfoList;
}
对应的几个方法就是判断如果存在对应的值就添加到列表
dotnet Microsoft.Recognizers.Text 超强大的自然语言关键词提取库的更多相关文章
- 推荐一款超强大的基于Angularjs的自动完成(Autocomplete)标签及标签组插件–ngTagsInput
前言 今天利用中午午休时间,给大家分享推荐一款基于Angularjs的自动完成(Autocomplete)标签及标签组插件--ngTagsInput,功能超强大的.不信,你试试就知道^_^... Au ...
- 未找到与约束 ContractName Microsoft.VisualStudio.Text.ITextBufferFactoryService RequiredTypeIdentity Microsoft.VisualStudio.Text.ITextBufferFactoryService
问题:vs2013在装了 之后,重启,打开VS提示: 未找到与约束 ContractName Microsoft.VisualStudio.Text.ITextBufferFactoryService ...
- 补丁惹的祸-ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出 问题: 重新安装了VS2012,结 ...
- VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
最近新换了系统还真是问题多多呀!! 系统更新补丁后打开 VS2012 ,新建C#项目的时候出现这个问题 VS2012 未找到与约束ContractName Microsoft.VisualStudio ...
- 未找到约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryServiceRequiredTypeIdentity匹配的导出的解决办法
未找到约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryServiceRequiredTypeIdentity Micros ...
- 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props”
未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props” ...
- VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService 未找到与约束ContractName,无法打开项目的解决方案 SQLyog 注册码
VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService 最近新换了系统还真是问题多多呀! ...
- NLP自然语言处理 jieba中文分词,关键词提取,词性标注,并行分词,起止位置,文本挖掘,NLP WordEmbedding的概念和实现
1. NLP 走近自然语言处理 概念 Natural Language Processing/Understanding,自然语言处理/理解 日常对话.办公写作.上网浏览 希望机器能像人一样去理解,以 ...
- 使用OPENROWSET、Microsoft.ACE.OLEDB实现大数据量的高效导入
首先说明使用的环境是:java和Sqlserver. 最近公司需要进行大数据量的导入操作.原来使用的是Apache POI,虽然可以实现功能,但是因为逻辑处理中需要进行许多校验,处理速度太慢,使用多线 ...
- 【mysql】关于InnoDB表text blob大字段的优化
最近在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,单表的存储空间已经达到了近100G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们必须要知道i ...
随机推荐
- 工作记录:Vue3.0新特性
简单对比 Vue2.x 与 Vue3.x 响应式 Vue2 使用Object.defineProperty劫持对象的属性 Vue3 使用Proxy 直接代理对象 由于Object.defineProp ...
- 记录--vue+three,制作iview大波浪特效
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.效果图 具体效果可参考iview官方界面iView - 一套高质量的UI组件库 大波浪效果,使用的是three.js的官方例子,需要先 ...
- C# WinForm 获取执行路径的几种常见方法
//1.获取模块的完整路径. string path1 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; Co ...
- mysql mysqldump 命令导出
1.导出指定表的数据 mysqldump -t database -u user -p --table_name1 table_name2 table_name3 >C:\db_script. ...
- 并发CPU伪共享及优化
伪共享 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字节,一般为32-256个字节.最常见的缓存行大小是64个字节.当多线程修改互相独立的变量时,如果这些变量共享 ...
- 【环境配置】vscode配置C C++开发和调试环境
按照本教程配置好之后,不再需要写任何tasks.json和launch.json文件,减轻记忆负担,即使是调试程序,也不用再写这些文件了,跟着做就能得到一个很好的集成开发环境 目录 msys2的安装与 ...
- 学习Source Generators之HelloWorld
介绍 源生成器是 C# 开发人员可以编写的一种新组件,允许执行两个主要操作: 检索表示正在编译的所有用户代码的编译对象. 可以检查此对象,并且可以编写适用于正在编译的代码的语法和语义模型的代码,就像现 ...
- 2024 VEXIQ 赛季笔(游)记 Pt.1
2024/03/07 老师让我们做机器初步思考了. 搞搞戒指,只要一个小夹子加上赛季的抬升吸环改一下就可以了,方便的一批. 于是夹子 10 分钟不到搞完了,现在是缝合怪时间. 但是老师下课不让我搞了 ...
- hadoop集群启动脚本文件myhadoop.sh
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start& ...
- Mybatis-Plus框架的BaseMapper的insert方法和自定义mapper里面的insert方法会用哪个
在Mybatis-Plus框架中,当一个接口继承了BaseMapper接口,并且绑定了一个xml文件时,如果这个接口和xml文件中都定义了相同的方法,那么在调用该方法时,会优先调用xml文件中的方法, ...