UWP WinRT 使用系统自带的分词库对字符串文本进行分词
本文将和大家介绍在 UWP 应用,或其他能接入 WinRT 的应用里,使用系统自带的分词库,对中文、英文等等自然语言的字符串文本进行分词
开始之前需要说明的是,现在不仅仅 UWP 应用,其他的 UI 框架,如 WPF 或 WinForms 或者是 dotnet 控制台都是可以像接入 Win32 一样接入 WinRT 平台。详细请参阅 我的博客导航 的 WinRT 部分
本文将采用 UWP 作为例子,在 WPF 下调用的 API 也是相同的,许多代码都可以直接拷贝,不需要做更改
先新建一个 UWP 应用,由于本次采用的是 WinRT 提供的方法,直接就是平台自带提供,不需要安装额外的 NuGet 包
先看看分词的效果:
开始之前,先写一点有趣的界面方便进行测试,界面代码如下,本文所有的代码都可以在本文末尾找到下载方式
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBox x:Name="InputTextBox" Margin="10,10,10,10" IsSpellCheckEnabled="False" AcceptsReturn="True" TextWrapping="Wrap"></TextBox>
<Button Grid.Row="1" Margin="10,10,10,10" Click="Button_OnClick">分词</Button>
<TextBox x:Name="TextBox" Grid.Row="2" Margin="10,10,10,10" IsReadOnly="True" AcceptsReturn="True" TextWrapping="Wrap"></TextBox>
</Grid>
在点击分词按钮时,将执行分词逻辑,代码如下
private void Button_OnClick(object sender, RoutedEventArgs e)
{
var inputText = InputTextBox.Text;
if (string.IsNullOrEmpty(inputText))
{
return;
}
var stringBuilder = new StringBuilder();
var wordsSegmenter = new WordsSegmenter("zh-CN");
var wordSegmentList = wordsSegmenter.GetTokens(inputText);
stringBuilder.AppendLine($"单词数量:{wordSegmentList.Count}");
for (var i = 0; i < wordSegmentList.Count; i++)
{
var wordSegment = wordSegmentList[i];
stringBuilder.AppendLine($"[{i}] Start:{wordSegment.SourceTextSegment.StartPosition};Length={wordSegment.SourceTextSegment.Length} {wordSegment.Text}");
}
TextBox.Text = stringBuilder.ToString();
}
}
请自行引用以下命名空间
using System.Text;
using Windows.Data.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
以上代码就是通过 WinRT 提供的 WordsSegmenter 进行分词。由于世界上的语言文化特别多,而且不同的语言文化的规则可能存在冲突。想要实现比较好的效果,这里就需要传入期望采用哪个语言文化的规则进行分词。可以传入的
可以传入的语言文化字符串请参阅 BCP-47 标准文档
创建的过程中,由于不同的用户设备可能安装有不同的分词库,可能传入的语言文化对应的分词库是在当前设备上找不到的。判断传入的语言文化是否能找到,可以通过 WordsSegmenter 的 ResolvedLanguage 属性进行判断。此 ResolvedLanguage 属性是表示实际使用的分词库语言
var language = "zh-CN";
var wordsSegmenter = new WordsSegmenter(language);
if (wordsSegmenter.ResolvedLanguage == language)
{
// 证明本机安装了传入语言的分词库
}
如果传入的语言文化在本机没有找到,那么 ResolvedLanguage 将会是 "und" 字符串的值。这个 und 表示的是 undetermined 的意思。这个时候将采用通用语言文化无关规则进行分词
值得一提的是这里传入的语言文化是采用本机的语言文化库进行分词,传入中文语言文化不代表只能对中文字符串进行分词,而是采用中文语音文化的规则对文本字符串分词,可以支持中文英文和数字等等
创建了 WordsSegmenter 对象,即可通过 GetTokens 方法进行分词,分词时可以看到分出的每个单词和对应的词在字符串里面的偏移量
以上就是 WinRT 使用系统自带的语言文化分词库对文本进行分词的方法
可以通过如下方式获取源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin a59524fc6cc35669fbb186f1ea2221891a1546cb
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin a59524fc6cc35669fbb186f1ea2221891a1546cb
获取代码之后,进入 JojairyoleNucheyerewhilu 文件夹
更多博客请参阅 博客导航
UWP WinRT 使用系统自带的分词库对字符串文本进行分词的更多相关文章
- Notepad2替代系统自带的记事本
事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置,可以在系统自带的记事本中替换删除一些内容,记事本小巧,占用很少的资源,我很喜欢:但今天复制的内容中有很多数字和一些我不想要的内 ...
- 如何获取安卓系统自带应用的package和activity
之前在做appium自动化测试的时候,参考网上的例子,运行安卓系统自带的app,所以,就需要获取系统自带的package(包名)和activity.这里简单记录一下,不一定适合所有的系统应用. 运行环 ...
- 重装系统后如何删除系统自带的office2003
背景:操作系统重装后,系统自带的office2003版本太低不好使用,需要安装更高版本的如2010,但是卸载时提示“无法打开此修补程序包……”,从而无法卸载.经网上查询,采用以下解决办法: 在注册表中 ...
- C语言中使用系统自带的快排函数
题目 . 德才论 () 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取 ...
- Ios二维码扫描(系统自带的二维码扫描)
Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...
- Broadcom有线网卡在Windows 8/8.1/10下使用系统自带驱动会断网的解决办法
出处:qiuyi21.cnblogs.com 1.下载最新正式版驱动程序 上Broadcom官方网站http://www.broadcom.com/support/ethernet_nic/downl ...
- Android去掉listView,gridView等系统自带阴影
当我们使用listView的时候,拉到顶,或是拉到底部的时候,我们会发现有系统自带的阴影效果出现,不同手机出现的颜色可能还会不一样. 在以前我始终都有注意到此问题,一直以为是系统自带的,不能去掉.也没 ...
- Android调用系统自带的设置界面
Android有很多系统自带的设置界面,如设置声音,设置网络等. 在开发中可以调用这些系统自带的设置界面. 点击以下列表中的选项,就可以调出相应的系统自带的设置界面. 如点击“无线和网络设置”,可以调 ...
- 应用程序间跳转 (友盟SSO 授权 与系统自带的分享)
应用程序间跳转的应用场景 使用第三方用户登录,如微信登录,返回用户名和密码 需要用户授权,返回到调用程序,同时返回授权的用户名 应用程序推广,跳转到itunes并显示指定app下载页 第三方支付,跳转 ...
- 利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器)
利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器). 1.打开win7开始菜单,找到命令提示符选项,以管理员身份运行cmd.2.在命令行上输入:netsh wlan set ...
随机推荐
- HDU 2045:不容易系列之(3)—— LELE的RPG难题(动态规划)
一.原题链接 Problem - 2045 (hdu.edu.cn) 二.题面 人称"AC女之杀手"的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多"Cole&quo ...
- C#通过文件头判断flv文件
代码如下: private void button1_Click(object sender, EventArgs e) { string path = Application.StartupPath ...
- vue项目中添加水印效果
新建js文件:例如warterMark.js 'use strict' let watermark = {} let setWatermark = (str) => { let id = '1. ...
- 前端 Typescript 入门
前端 Typescript 入门 Ant design vue4.x 基于 vue3,示例默认是 TypeScript.比如 table 组件管理. vue3 官网介绍也使用了 TypeScript, ...
- https://codeforces.com/gym/496137
AB略. C:想复杂了. 只要判断最大的那个能不能继续吃即可. D:我的做法是建完全图然后跑生成树. 实际上可以这么考虑:和a[1]不同的直接连,相同的就和上一轮和a[1]不同的店去连可以O(n). ...
- 【Java基础知识】东软面试(一面)
01 面向对象的特征 封装:隐藏部分对象的属性和实现细节,以不同的访问级别来保护对象内部的数据,防止外部程序的不当访问,对外提供公开的接口.[私有的属性,共有的方法] 继承:子类自动共享父类数据和方法 ...
- MySQL数据过滤和搜索
操作符 AND操作符 mysql> SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 AND prod_p ...
- ET介绍——强大的MongoBson库
强大的MongoBson库 后端开发,统计了一下大概有这些场景需要用到序列化: 对象通过序列化反序列化clone 服务端数据库存储数据,二进制 分布式服务端,多进程间的消息,二进制 后端日志,文本格式 ...
- C#添加自定义控件
1.vs 控件工具箱添加选项卡 2.输入选项卡名称 我这里是Emgucv 3.点击选择项 4.点击浏览 找到Emgu.CV.Platform.NetFramework.dll 这是emgucv的C#控 ...
- kube-apiserver限流机制原理
本文分享自华为云社区<kube-apiserver限流机制原理>,作者:可以交个朋友. 背景 apiserver是kubernetes中最重要的组件,一旦遇到恶意刷接口或请求量超过承载范围 ...