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

先看看下图的一个效果,下图是尝试识别一句话里面的数值信息

新建一个 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 超强大的自然语言关键词提取库的更多相关文章

  1. 推荐一款超强大的基于Angularjs的自动完成(Autocomplete)标签及标签组插件–ngTagsInput

    前言 今天利用中午午休时间,给大家分享推荐一款基于Angularjs的自动完成(Autocomplete)标签及标签组插件--ngTagsInput,功能超强大的.不信,你试试就知道^_^... Au ...

  2. 未找到与约束 ContractName Microsoft.VisualStudio.Text.ITextBufferFactoryService RequiredTypeIdentity Microsoft.VisualStudio.Text.ITextBufferFactoryService

    问题:vs2013在装了 之后,重启,打开VS提示: 未找到与约束 ContractName Microsoft.VisualStudio.Text.ITextBufferFactoryService ...

  3. 补丁惹的祸-ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService

    未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出 问题: 重新安装了VS2012,结 ...

  4. VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService

    最近新换了系统还真是问题多多呀!! 系统更新补丁后打开 VS2012 ,新建C#项目的时候出现这个问题 VS2012 未找到与约束ContractName Microsoft.VisualStudio ...

  5. 未找到约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryServiceRequiredTypeIdentity匹配的导出的解决办法

    未找到约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryServiceRequiredTypeIdentity Micros ...

  6. 未找到导入的项目“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” ...

  7. VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService 未找到与约束ContractName,无法打开项目的解决方案 SQLyog 注册码

    VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService   最近新换了系统还真是问题多多呀! ...

  8. NLP自然语言处理 jieba中文分词,关键词提取,词性标注,并行分词,起止位置,文本挖掘,NLP WordEmbedding的概念和实现

    1. NLP 走近自然语言处理 概念 Natural Language Processing/Understanding,自然语言处理/理解 日常对话.办公写作.上网浏览 希望机器能像人一样去理解,以 ...

  9. 使用OPENROWSET、Microsoft.ACE.OLEDB实现大数据量的高效导入

    首先说明使用的环境是:java和Sqlserver. 最近公司需要进行大数据量的导入操作.原来使用的是Apache POI,虽然可以实现功能,但是因为逻辑处理中需要进行许多校验,处理速度太慢,使用多线 ...

  10. 【mysql】关于InnoDB表text blob大字段的优化

    最近在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,单表的存储空间已经达到了近100G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们必须要知道i ...

随机推荐

  1. druid开启sql监控平台

    1.maven导入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid< ...

  2. FBNet/FBNetV2/FBNetV3:Facebook在NAS领域的轻量级网络探索 | 轻量级网络

    FBNet系列是完全基于NAS方法的轻量级网络系列,分析当前搜索方法的缺点,逐步增加创新性改进,FBNet结合了DNAS和资源约束,FBNetV2加入了channel和输入分辨率的搜索,FBNetV3 ...

  3. KingbaseES V8R3 集群运维案例 -- cluster.log无日志输出问题诊断

    案例说明: KingbaseES V8R3集群正常运行期间,现场发现cluster.log日志无任何信息输出,针对这一问题做了复现及提出解决方案.后现场检查发现,cluster.log文件曾被删除: ...

  4. Atcoder DP contest 题解

    动态规划(Atcoder DP 26题) on Atcoder on Luogu 本文同步发表于知乎专栏. Frog 1 $N$ 个石头,编号为 $1,2,...,N$.对于每个 $i(1 \leq ...

  5. Hadoop_08 Hadoop重装

    今日总结: 由于之前配置存在问题,今天学到后面之后发现很多bug,需要全部卸载重新配置Hadoop.ZooKeeper以及Hbase.

  6. Debug模式调试技巧

    Debug模式调试技巧 断点管理窗口  菜单栏方式 Run -> view breakpoints  Actions方式 双击shift调出Actions窗口,输入view breakpoint ...

  7. 新前言with留言板

    旧博客也是会用的,但是现在只用博客园写博客,平时csdn的东西也会凑凑热闹 欢迎各位julao来留言板留言 /* ID:lemondi1 LANG:C++ TASK:test */ #include ...

  8. #主席树,离散,扫描线#洛谷 3168 [CQOI2015]任务查询系统

    题目 分析 询问显然得预处理,考虑以优先级建权值线段树, 将优先级离散化处理,那么第\(k\)大可以用线段树来求 那任务怎么办,考虑时间用扫描线的方法,按照时间建新的线段树 把任务分成两部分,在两端差 ...

  9. 使用 bat 注册 ocx 控件

    注册 新建  reg.bat cd /d %~dp0 regsvr32 ./xxx.ocx 反注册 新建 unreg.bat cd /d %~dp0 regsvr32 /u ./xxx.ocx

  10. 【有奖互动】开发者版本新特性,你期待哪些更新?#HDC.Together2023#

    <hdc.together< span="">>华为开发者大会2023再次启航,将于8月4日~6日在中国松山湖举办,承载万千期待,开启崭新时代.聚焦新版本. ...