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 ...
随机推荐
- 记录--axios和loading不得不说的故事
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 loading的展示和取消可以说是每个前端对接口的时候都要关心的一个问题.这篇文章将要帮你解决的就是如何结合axios更加简洁的处理loa ...
- Linux安装Oracle12C及一些参考
目录 安装 系统配置 安装前装备 安装依赖包 创建用户和组 修改内核参数 修改系统资源限制 创建安装目录及设置权限 设置oracle环境变量 安装Oracle 一些参考 compat-libstdc+ ...
- mysql where子句 区分 大小写
解决办法 使用binary关键字,此时就能区分大小写了 SELECT * FROM `tb_test` WHERE BINARY COL_1='abc'
- CSS样式中的各种居中方式
1.水平居中 将margin-left和margin-right属性设置为auto,从而达到水平居中的效果. 代码: margin:0 auto; 2.文字水平垂直居中 利用line-height设为 ...
- #树状数组,离散#C 波动序列
分析 设\(dp[i][j][0/1/2/3]\)表示前\(i\)个位置当前选的数为\(j\), 且选择的是第一行/第二行/第三行不下降/第三行不上升, 状态转移方程显然,用线段树或者树状数组维护一下 ...
- JDK 14的新特性:文本块Text Blocks
目录 举个例子 Indentation编排 Escaping转义 formatted格式化 总结 说起来,Text Blocks是在JDK13中以第一次预览版本引入的.现在在JDK14中是第二次预览版 ...
- OpenHarmony 社区运营报告(2023 年 10 月)
● 截至2023年10月,OpenHarmony社区共有51家共建单位,累计超过6200名贡献者产生24.2万多个PR,2.3万多个Star,6.1万多个Fork,59个SIG. ● OpenHa ...
- OpenHarmony应用开发—ArkUI组件集合
介绍 本示例为 ArkUI 中组件.通用.动画.全局方法的集合. 效果预览 使用说明: 1.点击组件.通用.动画.全局方法四个按钮或左右滑动切换不同视图. 2.点击二级导航(如通用属性.通用事件等), ...
- 6. Eigenvalues and Eigenvectors
Keys: What are Eigenvalues and Eigenvectors? How to find Eigenvalues and Eigenvectors? Applications ...
- Seaborn时间线图和热图
lineplot() 绘制与时间相关性的线图. sns.lineplot( x=None, y=None, hue=None, size=None, style=None, data=None, pa ...