特点

  • 支持三种分词模式:

    • 精确模式,试图将句子最精确地切开,适合文本分析;

    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。具体来说,分词过程不会借助于词频查找最大概率路径,亦不会使用HMM;

    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

  • 支持繁体分词

  • 支持添加自定义词典和自定义词

jieba.NET Core 用法

下载代码使用VS 2017 打开,或者使用VS Code 打开项目。

选择jieba.NET 为起始项目,Program.cs 代码如下:

    class Program{        static void Main(string[] args){Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);            var segmenter = new JiebaSegmenter();            var segments = segmenter.Cut("我来到北京清华大学", cutAll: true);Console.WriteLine("【全模式】:{0}", string.Join("/ ", segments));segments = segmenter.Cut("我来到北京清华大学");  // 默认为精确模式Console.WriteLine("【精确模式】:{0}", string.Join("/ ", segments));segments = segmenter.Cut("他来到了网易杭研大厦");  // 默认为精确模式,同时也使用HMM模型Console.WriteLine("【新词识别】:{0}", string.Join("/ ", segments));segments = segmenter.CutForSearch("小明硕士毕业于中国科学院计算所,后在日本京都大学深造"); // 搜索引擎模式Console.WriteLine("【搜索引擎模式】:{0}", string.Join("/ ", segments));segments = segmenter.Cut("结过婚的和尚未结过婚的");Console.WriteLine("【歧义消除】:{0}", string.Join("/ ", segments));Console.ReadKey();}}

运行程序结果如下:

JiebaSegmenter.Cut方法可通过cutAll来支持两种模式,精确模式和全模式。精确模式是最基础和自然的模式,试图将句子最精确地切开,适合文本分析;而全模式,把句子中所有的可以成词的词语都扫描出来, 速度更快,但是不能解决歧义,因为它不会扫描最大概率路径,也不会通过HMM去发现未登录词。

CutForSearch采用的是搜索引擎模式,在精确模式的基础上对长词再次切分,提高召回率,适合用于搜索引擎分词

词性标注

词性标注采用和ictclas兼容的标记法,关于ictclas和jieba中使用的标记法列表,请参考:词性标记。

在TestDemo.cs 中PosCutDemo 方法为词性标注。

        public void PosCutDemo(){            var posSeg = new PosSegmenter();            var s = "一团硕大无朋的高能离子云,在遥远而神秘的太空中迅疾地飘移";            var tokens = posSeg.Cut(s);Console.WriteLine(string.Join(" ", tokens.Select(token => string.Format("{0}/{1}", token.Word, token.Flag))));}

调用结果如下:

关键词提取

现在来尝试提取其中的关键词。jieba.NET提供了TF-IDF和TextRank两种算法来提取关键词,TF-IDF对应的类是JiebaNet.Analyser.TfidfExtractor,TextRank的是JiebaNet.Analyser.TextRankExtractor

        public void ExtractTagsDemo(){            var text =                "程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。";            var extractor = new TfidfExtractor();            var keywords = extractor.ExtractTags(text);            foreach (var keyword in keywords){Console.WriteLine(keyword);}}        public void ExtractTagsDemo2(){            var text = @"在数学和计算机科学/算学之中,算法/算则法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。算法中的指令描述的是一个计算,当其运行时能从一个初始状态和初始输入(可能为空)开始,经过一系列有限而清晰定义的状态最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、雅克·埃尔布朗和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。";            var extractor = new TfidfExtractor();            var keywords = extractor.ExtractTags(text, 10, Constants.NounAndVerbPos);            foreach (var keyword in keywords){Console.WriteLine(keyword);}}

ExtractTagsDemo 方法为提取所有关键词。

ExtractTagsDemo2 方法为提取前十个仅包含名词和动词的关键词

ExtractTagsWithWeight方法的返回结果中除了包含关键词,还包含了相应的权重值。

返回词语在原文的起止位置

        public void TokenizeDemo(){            var segmenter = new JiebaSegmenter();            var s = "永和服装饰品有限公司";            var tokens = segmenter.Tokenize(s);            foreach (var token in tokens){Console.WriteLine("word {0,-12} start: {1,-3} end: {2,-3}", token.Word, token.StartIndex, token.EndIndex);}}

调用 TokenizeDemo 方法会返回对应位置

新词加入

代码加入

            var segmenter = new JiebaSegmenter();            var segments = segmenter.Cut(@".NETCore2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布。");Console.WriteLine("【精确模式】:{0}", string.Join("/ ", segments));segmenter.AddWord("发布时间");segmenter.AddWord(".NETCore2.0");segments = segmenter.Cut(@".NETCore2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布。");Console.WriteLine("【精确模式】:{0}", string.Join("/ ", segments));

调用 segmenter.AddWord添加新词,这里添加了发布时间及.NETCore2.0

可以看到新加入的词被识别出来。

词典加入

词典格式如下:词典格式与主词典格式相同,即一行包含:词、词频(可省略)、词性(可省略),用空格隔开。词频省略时,分词器将使用自动计算出的词频保证该词被分出。

创新办 3 i
云计算 5凱特琳 nz
台中
机器学习 3深度学习 8linezero 2

然后使用segmenter.LoadUserDict() 方法,传入词典路径。

本文转自zsdnr  51CTO博客,原文链接:http://blog.51cto.com/12942149/1949721,如需转载请自行联系原作者

.NET Core中文分词组件jieba.NET Core相关推荐

  1. 3、Python 中文分词组件Jieba

    在自然语言处理中,分词是一项最基本的技术.中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语以字为基本书写单位,词语之间没有明显的区分标记,需要人为切分.现在开源的中文分词工具有 ...

  2. “结巴”中文分词:做最好的 Python 中文分词组件

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") C ...

  3. [工具]python中文分词---【jieba】

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") C ...

  4. 中文分词工具—Jieba

    中文分词-Jieba 是一款Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segm ...

  5. jieba中文分词组件

    目录 jieba简介 组件特点 安装方法 算法 使用jieba 分词 添加自定义词典 载入词典 调整词典 关键词提取 基于 TF-IDF 算法的关键词抽取 基于 TextRank 算法的关键词抽取 词 ...

  6. 当下流行的中文分词模块jieba

    当前流行的中文分词模块包括 Jieba 分词:Jieba 是用 Python 实现的开源中文分词库,支持三种分词模式:精确模式.全模式和搜索引擎模式,并且支持自定义词典. THULAC 分词:THUL ...

  7. Java分布式中文分词组件 - word分词

    Java分布式中文分词组件 - word分词 word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义.能准确识别英文.数字,以及日期.时间等 ...

  8. Java分布式中文分词组件 - word分词(转自 https //github com/ysc/word)

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...

  9. Java分布式中文分词组件 - word分词(转自:https://github.com/ysc/word)

    ###Java分布式中文分词组件 - word分词 ####word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义.能准确识别英文.数字,以 ...

最新文章

  1. 中国剩余定理(Chinese Remainder Theorem)
  2. selenium实例:unittest框架+PO开发模式
  3. Selenium3 + Python3自动化测试系列一——安装Python+selenium及selenium3 浏览器驱动
  4. 【theano-windows】学习笔记十五——受限玻尔兹曼机
  5. 腾讯2019秋招笔试真题
  6. Twitter Storm安装配置(Ubuntu系统)单机版
  7. 34Linux日期指令
  8. 9月16日见!vivo高管亲曝NEX 3 5G:99.6%屏占比确认
  9. [Swift]LeetCode831. 隐藏个人信息 | Masking Personal Information
  10. Azure Blob 存储简介
  11. 单片机c语言 课后答案,十天学会单片机C语言_郭天祥---课后习题答案
  12. 132 django模版文件的使用
  13. 语音增强——DNN(深度神经网络)频谱映射
  14. day04---禅道的使用
  15. Python爬虫练习-查询lol隐藏分
  16. 2.语法特性(组合数据类型)
  17. 肇庆学院计算机科学与技术专业多少分能进,2020肇庆学院录取分数线是多少-各专业分数线...
  18. git 默认的名字和账号
  19. MyBatis框架学习笔记02:使用MyBatis实现CRUD操作
  20. Win系统 - 关于 CPU C-States 省电模式,你需要知道的事情

热门文章

  1. Ajax跨域post请求后端无法获取登录态原因及解决办法
  2. 利用JS面向对象+模块化封装集AJAX请求、基本数据校验、URL参数截取等功能于一身的通用工具模块
  3. 安卓代码迁移:Make.exe: *** [***.o]Error 1
  4. C++文本操作.Vs.Python
  5. 华三实现vlan通过
  6. 002——php字符串中的处理函数(一)
  7. PHP函数——urlencode() 函数
  8. Java中FileInputStream和FileOutputStream类实现文件夹及文件的复制粘贴
  9. 批量删除Excel文档中的超链接
  10. 两条水位线的业务需求分析-Interval JOIN方案(转载+自己分析整理)