测试C#分词工具jieba.NET

news2024/11/18 11:23:37

  jieba.NET是jieba中文分词的C#版本,后者是优秀的Python中文分词组件GitHub中得到超过3万星。jieba.NET支持中文分词、关键词提取、词性标注等功能,本文主要测试其中文分词的功能基本用法。
  新建测试项目,在NuGet管理器中添加jieba.NET。

在这里插入图片描述

  jieba.NET程序集中与分词相关的主要是JiebaSegmenter.Cut函数和JiebaSegmenter. CutForSearch函数,这两个函数都以字符串作为分词输入,不像之前盘古分词支持流式输入。

 public IEnumerable<string> Cut(string text, bool cutAll = false, bool hmm = true)
public IEnumerable<string> CutForSearch(string text, bool hmm = true)

  基于这两个函数,jieba.NET支持多种分词模式(介绍来自参考文献3):全模式(把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义)、精确模式(试图将句子最精确地切开)、搜索引擎模式(在精确模式的基础上,对长词再次切分,提高召回率)。这三种方式的代码其实都比较简单,如下所示:

     //精确分词模式
	 using (TextReader tr = File.OpenText(txtPath.Text))
     {
         var segmenter = new JiebaSegmenter();
         var segments = segmenter.Cut(tr.ReadToEnd());
         txtResult.Text=string.Join("/ ", segments);
     }
   
     //全模式
     using (TextReader tr = File.OpenText(txtPath.Text))
      {
          var segmenter = new JiebaSegmenter();
          var segments = segmenter.Cut(tr.ReadToEnd(),cutAll:true);
          txtResult.Text=string.Join("/ ", segments);
      }
	
	 //搜索引擎模式
	 using (TextReader tr = File.OpenText(txtPath.Text))
     {
         var segmenter = new JiebaSegmenter();
         var segments = segmenter.CutForSearch(tr.ReadToEnd());
         txtResult.Text=string.Join("/ ", segments);
     }

  精确分词模式的效果如下图所示:在这里插入图片描述
  全模式分词的效果如下所示,与精确分词相比,全模式把所有可能的分词都返回了,如“少数国家”一次,静默分词返回的是“少数”和“国家”,而全模式返回的是“少数”、“数国”、“国家”。
在这里插入图片描述
  搜索引擎模式的分词效果如下图所示,与上面两种方式相比也有不同之处:
在这里插入图片描述
  测试代码比较简单,值得说明的是jieba.NET的分词速度(全模式:2.5 MB/s
精确模式:1.1 MB/s),测试盘古分词时,导入几十K的文本分词就会卡死,而采用jieba.NET则速度特别快就可以返回分词结果。

  jieba.NET还支持并行分词及提取关键词等功能,后续会继续测试这些功能的基本用法。

参考文献:
[1]https://github.com/linezero/jieba.NET
[2]https://www.jianshu.com/p/6f47b670fcb0
[3]https://github.com/anderscui/jieba.NET
[4]https://github.com/JimLiu/Lucene.Net.Analysis.PanGu
[5]https://github.com/apache/lucenenet
[6]https://blog.csdn.net/lijingguang/article/details/127262360
[7]https://blog.51cto.com/u_15834522/5766716
[8]https://www.cnblogs.com/dacc123/p/8431369.html
[9]https://blog.csdn.net/wangkun9999/article/details/1574114

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot --- 运维篇

一、打包与运行 1.1、程序打包与运行&#xff08;Windows版&#xff09; 所谓打包指将程序转换成一个可执行的文件&#xff0c;所谓运行指不依赖开发环境执行打包产生的文件。 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做packag…

虹科HiveMQ与MQTT:构建互联汽车的新架构

前言 随着汽车的互联程度越来越高&#xff0c;汽车制造商和互联汽车平台提供商通过使用物联网技术&#xff0c;提供新服务并从车辆收集有价值的遥测数据&#xff0c;以此来增加营收。从高效的车队管理和汽车共享到预测性维护和高级驾驶员辅助系统&#xff0c;未来移动出行的可…

Packet Tracer – 访问控制列表演示

Packet Tracer – 访问控制列表演示 拓扑图 目标 第 1 部分&#xff1a;验证本地连接和测试访问控制列表 第 2 部分&#xff1a;删除访问控制列表和重复测试 背景信息 在本练习中&#xff0c;您将观察如何使用访问控制列表 (ACL) 阻止 ping 访问远程网络上的主机。 从配置…

大数据Doris(二十七):Broker Load导入HDFS数据到Doris表

文章目录 Broker Load导入HDFS数据到Doris表 一、创建Doris表 二、准备HDFS数据 三、准备Broker Load语句

【Springcloud】Feign远程调用

文章目录 1、RestTemplate远程调用2、基于Feign远程调用3、Feign的自定义配置4、Feign性能优化5、Feign的最佳实践思路6、案例 1、RestTemplate远程调用 在说基于Feign远程调用之前&#xff0c;先看一下RestTemplate发起远程调用的问题&#xff1a; String url "http:…

船新SpringBoot 3.1正式发布,新特性真香

Spring Boot 3.1 正式发布 Spring Boot 3.0 发布半年左右&#xff0c;Spring Boot 3.1 正式发布了&#xff1a; 同时发布更新的还有 2.7.x 版本&#xff0c;同时&#xff0c;2.6.x 版本线已经停止维护了&#xff0c;最新支持版本如下图所示&#xff1a; 2.7.x 这也是目前唯一正…

Python条件判断

目录 1. 语法 2. 常见用法 2.1. 比较符判断 2.2. 逻辑符判断 2.3. 成员符判断 2.4. 三目运算 1. 语法 记住3个关键字&#xff1a;if&#xff08;表示如果&#xff09;、elif&#xff08;再如果&#xff09;、else&#xff08;否则&#xff09; if [条件1]&#xff1…

数据链路层概述

1.数据链路层概述 笔记来源&#xff1a; 湖科大教书匠&#xff1a;数据链路层概述 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 数据链路层在网络体系结构中的地位 主机具有体系结构的各个层次&#xff0c;路由器只需具有体系就够的最下面三…

chatgpt赋能python:Python“+”-了解Python中最常用的运算符

Python “” - 了解Python中最常用的运算符 Python是一种高级编程语言&#xff0c;用于开发各种应用程序&#xff0c;从Web应用和桌面应用到数据分析和科学计算。Python是一种简单易学&#xff0c;可读性强的语言&#xff0c;拥有丰富的库和工具。 在Python中&#xff0c;“”…

桥接模式解密:跨越鸿沟,桥接抽象与实现

一、概要 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们都可以独⽴的变化。其核心思想就是解耦&#xff0c;在面向对象编程中&#xff0c;抽象和实现是通过继承关系来实现的&#xff0c;但这…

《C和指针》读书笔记(第八章 数组)

目录 0 内容简介1. 一维数组1.1 数组名1.2 下标引用1.3 指针与下标1.4 指针的效率1.5 数组和指针1.6 作为函数参数的数组名1.7 声明数组参数1.8 初始化1.9 不完整的初始化1.10 自动计算数组长度1.11 字符数组的初始化 2. 多维数组2.1 存储顺序2.2 数组名2.3 下标2.4 指向数组的…

爆火出圈的chatGPT,到底是什么东东?

爆火出圈的chatGPT&#xff0c;到底是什么东东&#xff1f; 前言 2022年 11 月 30 日&#xff0c;OpenAI 实验室创始人兼 CEO Sam Altman 宣布发布聊天机器人模型&#xff1a;ChatGPT。ChatGPT 可以模仿人类的说话风格回答问题。很快&#xff0c;ChatGPT 火爆社交圈&#xff…

Linux音频和视频命令速查表

在Linux系统中&#xff0c;有许多命令可以帮助我们处理音频和视频文件&#xff0c;从基本的播放和转码&#xff0c;到编辑和处理音频、视频流。 本文将提供一个Linux音频和视频命令速查表&#xff0c;帮助您快速查找并了解各种常用的命令及其用法。 音频命令 播放音频文件 a…

堆和堆排序

目录 堆的概念 堆的实现 堆的存储结构 堆的插入操作 堆的删除操作 堆的创建 向上调整建堆和向下调整建堆 堆排序 堆的应用 - topK问题 堆的概念 “堆”是计算机科学中一种数据结构&#xff0c;可以看作是一棵完全二叉树。通常满足堆的性质&#xff1a;父节点的值总是…

【Linux】进程控制 — 进程程序替换 + 实现简易shell

文章目录 &#x1f4d6; 前言1. 进程程序替换1.1 程序替换的概念&#xff1a;1.2 为什么要程序替换&#xff1a;1.3 程序替换的原理&#xff1a; 2. 六个exec替换函数2.1 execl函数&#xff1a;2.2 execv函数&#xff1a;2.3 execlp函数&#xff1a;2.4 execvp函数&#xff1a;…

chatgpt赋能python:Python[:2]——简介和应用

Python [:2]——简介和应用 Python [:2]是一种流行的编程语言&#xff0c;其简单易用的语法使其成为许多人的首选编程语言之一。Python [:2]的迅速增长已经超越了其他编程语言&#xff0c;并且它正在成为各行各业中最有前途的编程语言之一。 Python 基础 Python [:2]的语法非…

MSQL系列(三) Mysql实战-索引最左侧匹配原则原理

Mysql实战-索引最左侧匹配原则原理 前面我们讲解了索引的存储结构&#xff0c;我们知道了BTree的索引结构&#xff0c;索引的叶子节点是严格排序的&#xff0c;就像你看到的 底层叶子节点 15->18->20->30->49->50等等 这样做有什么好处呢&#xff1f; 这就引出…

利用qsort排序

一、简单排序10个元素的一维数组 #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6031) #include<stdio.h> #include<stdlib.h> void print_arr(int arr[], int sz) {int i 0;for (i 0; i < sz; i){printf("%d ", arr[i]);}printf("…

WMS服务启动

WMS服务启动 1、SystemServer.java#startOtherServices(t)中启动2、WindowManagerService.java#main创建初始化3、简易时序图4、相关线程 1、SystemServer.java#startOtherServices(t)中启动 WMS属于SystemServer启动众多的系统服务中的一个&#xff0c;WindowManagerService中…

社会工程学技术框架解读

社会工程学技术其实就是利用各种心理进行技术上的欺骗。 尽管许多社会工程学大师都是无师自通,依赖自己的天赋悟性、聪明才智和临场应变能力不断演绎着社会工程学艺术,然而,社会工程学仍然具有一些通用的技术流程与共性特征。Social-Engineer 网站创始人克里斯哈德纳吉对其加…