常用技能(更新ing):http://www.cnblogs.com/dunitian/p/4822808.html#skill

技能总纲(更新ing):http://www.cnblogs.com/dunitian/p/5493793.html

在线演示:http://cppjieba-webdemo.herokuapp.com

完整demo:https://github.com/dunitian/TempCode/tree/master/2016-09-05

逆天修改版:https://github.com/dunitian/TempCode/blob/master/2016-09-05/jieba.NET.0.38.2.zip

先说下注意点,结巴分词他没有对分词进行一次去重,我们得自己干这件事;字典得自行配置或者设置成输出到bin目录

应用场景举例(搜索那块大家都知道,说点其他的)

——————————————————————————————————————————————————

言归正传:看一组民间统计数据:(非Net版,指的是官方版)

net版的IKanalyzer盘古分词好多年没更新了,所以这次选择了结巴分词(这个名字也很符合分词的意境~~结巴说话,是不是也是一种分词的方式呢?

下面简单演示一下:

1.先引入包:

2.字典设置:

3.简单封装的帮助类:

  1. using System.Linq;
  2. using JiebaNet.Segmenter;
  3. using System.Collections.Generic;
  4.  
  5. namespace LoTLib.Word.Split
  6. {
  7. #region 分词类型
  8. public enum JiebaTypeEnum
  9. {
  10. /// <summary>
  11. /// 精确模式---最基础和自然的模式,试图将句子最精确地切开,适合文本分析
  12. /// </summary>
  13. Default,
  14. /// <summary>
  15. /// 全模式---可以成词的词语都扫描出来, 速度更快,但是不能解决歧义
  16. /// </summary>
  17. CutAll,
  18. /// <summary>
  19. /// 搜索引擎模式---在精确模式的基础上对长词再次切分,提高召回率,适合用于搜索引擎分词
  20. /// </summary>
  21. CutForSearch,
  22. /// <summary>
  23. /// 精确模式-不带HMM
  24. /// </summary>
  25. Other
  26. }
  27. #endregion
  28.  
  29. /// <summary>
  30. /// 结巴分词
  31. /// </summary>
  32. public static partial class WordSplitHelper
  33. {
  34. /// <summary>
  35. /// 获取分词之后的字符串集合
  36. /// </summary>
  37. /// <param name="objStr"></param>
  38. /// <param name="type"></param>
  39. /// <returns></returns>
  40. public static IEnumerable<string> GetSplitWords(string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
  41. {
  42. var jieba = new JiebaSegmenter();
  43. switch (type)
  44. {
  45. case JiebaTypeEnum.Default:
  46. return jieba.Cut(objStr); //精确模式-带HMM
  47. case JiebaTypeEnum.CutAll:
  48. return jieba.Cut(objStr, cutAll: true); //全模式
  49. case JiebaTypeEnum.CutForSearch:
  50. return jieba.CutForSearch(objStr); //搜索引擎模式
  51. default:
  52. return jieba.Cut(objStr, false, false); //精确模式-不带HMM
  53. }
  54. }
  55.  
  56. /// <summary>
  57. /// 获取分词之后的字符串
  58. /// </summary>
  59. /// <param name="objStr"></param>
  60. /// <param name="type"></param>
  61. /// <returns></returns>
  62. public static string GetSplitWordStr(this string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
  63. {
  64. var words = GetSplitWords(objStr, type);
  65. //没结果则返回空字符串
  66. if (words == null || words.Count() < 1)
  67. {
  68. return string.Empty;
  69. }
  70. words = words.Distinct();//有时候词有重复的,得自己处理一下
  71. return string.Join(",", words);//根据个人需求返回
  72. }
  73. }
  74. }

调用很简单:

  1. string str = "bootstrap-datetimepicker 进一步跟进~~~开始时间和结束时间的样式显示";
  2. Console.WriteLine("\n精确模式-带HMM:\n");
  3. Console.WriteLine(str.GetSplitWordStr());
  4.  
  5. Console.WriteLine("\n全模式:\n");
  6. Console.WriteLine(str.GetSplitWordStr(JiebaTypeEnum.CutAll));
  7.  
  8. Console.WriteLine("\n搜索引擎模式:\n");
  9. Console.WriteLine(str.GetSplitWordStr(JiebaTypeEnum.CutForSearch));
  10.  
  11. Console.WriteLine("\n精确模式-不带HMM:\n");
  12. Console.WriteLine(str.GetSplitWordStr(JiebaTypeEnum.Other));
  13.  
  14. Console.ReadKey();

效果:

--------------------------

有人可能会说,那内容关键词提取呢?==》别急,看下面:

这种方式所对应的字典是它=》idf.txt

简单说下Constants==》

效果:

完整帮助类(最新看github):https://github.com/dunitian/TempCode/tree/master/2016-09-05

  1. using System.Linq;
  2. using JiebaNet.Segmenter;
  3. using System.Collections.Generic;
  4. using JiebaNet.Analyser;
  5.  
  6. namespace LoTLib.Word.Split
  7. {
  8. #region 分词类型
  9. public enum JiebaTypeEnum
  10. {
  11. /// <summary>
  12. /// 精确模式---最基础和自然的模式,试图将句子最精确地切开,适合文本分析
  13. /// </summary>
  14. Default,
  15. /// <summary>
  16. /// 全模式---可以成词的词语都扫描出来, 速度更快,但是不能解决歧义
  17. /// </summary>
  18. CutAll,
  19. /// <summary>
  20. /// 搜索引擎模式---在精确模式的基础上对长词再次切分,提高召回率,适合用于搜索引擎分词
  21. /// </summary>
  22. CutForSearch,
  23. /// <summary>
  24. /// 精确模式-不带HMM
  25. /// </summary>
  26. Other
  27. }
  28. #endregion
  29.  
  30. /// <summary>
  31. /// 结巴分词
  32. /// </summary>
  33. public static partial class WordSplitHelper
  34. {
  35. #region 公用系列
  36. /// <summary>
  37. /// 获取分词之后的字符串集合
  38. /// </summary>
  39. /// <param name="objStr"></param>
  40. /// <param name="type"></param>
  41. /// <returns></returns>
  42. public static IEnumerable<string> GetSplitWords(string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
  43. {
  44. var jieba = new JiebaSegmenter();
  45. switch (type)
  46. {
  47. case JiebaTypeEnum.Default:
  48. return jieba.Cut(objStr); //精确模式-带HMM
  49. case JiebaTypeEnum.CutAll:
  50. return jieba.Cut(objStr, cutAll: true); //全模式
  51. case JiebaTypeEnum.CutForSearch:
  52. return jieba.CutForSearch(objStr); //搜索引擎模式
  53. default:
  54. return jieba.Cut(objStr, false, false); //精确模式-不带HMM
  55. }
  56. }
  57.  
  58. /// <summary>
  59. /// 提取文章关键词集合
  60. /// </summary>
  61. /// <param name="objStr"></param>
  62. /// <returns></returns>
  63. public static IEnumerable<string> GetArticleKeywords(string objStr)
  64. {
  65. var idf = new TfidfExtractor();
  66. return idf.ExtractTags(objStr, 10, Constants.NounAndVerbPos);//名词和动词
  67. }
  68.  
  69. /// <summary>
  70. /// 返回拼接后的字符串
  71. /// </summary>
  72. /// <param name="words"></param>
  73. /// <returns></returns>
  74. public static string JoinKeyWords(IEnumerable<string> words)
  75. {
  76. //没结果则返回空字符串
  77. if (words == null || words.Count() < 1)
  78. {
  79. return string.Empty;
  80. }
  81. words = words.Distinct();//有时候词有重复的,得自己处理一下
  82. return string.Join(",", words);//根据个人需求返回
  83. }
  84. #endregion
  85.  
  86. #region 扩展相关
  87. /// <summary>
  88. /// 获取分词之后的字符串
  89. /// </summary>
  90. /// <param name="objStr"></param>
  91. /// <param name="type"></param>
  92. /// <returns></returns>
  93. public static string GetSplitWordStr(this string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
  94. {
  95. var words = GetSplitWords(objStr, type);
  96. return JoinKeyWords(words);
  97. }
  98.  
  99. /// <summary>
  100. /// 提取文章关键词字符串
  101. /// </summary>
  102. /// <param name="objStr"></param>
  103. /// <returns></returns>
  104. public static string GetArticleKeywordStr(this string objStr)
  105. {
  106. var words = GetArticleKeywords(objStr);
  107. return JoinKeyWords(words);
  108. }
  109. #endregion
  110. }
  111. }

还有耐心或者只看末尾的有福了~

web端的字典配置那是个烦啊,逆天把源码微调了下

使用方法和上面一样

web版演示:

https://github.com/dunitian/LoTCode/blob/master/PawChina/PawChina/PawChina.UI/Areas/PawRoot/assets/js/note.js

https://github.com/dunitian/LoTCode/blob/master/PawChina/PawChina/PawChina.UI/Areas/PawRoot/Controllers/PartialViewController.cs

结巴中文分词相关:

https://github.com/fxsjy/jieba

https://github.com/anderscui/jieba.NET

http://cppjieba-webdemo.herokuapp.com

中文分词之结巴分词~~~附使用场景+demo(net)的更多相关文章

  1. python中文分词:结巴分词

    中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规 ...

  2. python 中文分词:结巴分词

    中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规 ...

  3. python中文分词工具——结巴分词

    传送门: http://www.iteye.com/news/26184-jieba

  4. 结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍

    Segment Segment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现. 变更日志 创作目的 分词是做 NLP 相关工作,非常基础的一项功能. jieba-analysis 作 ...

  5. python 结巴分词简介以及操作

    中文分词库:结巴分词 文档地址:https://github.com/fxsjy/jieba 代码对 Python 2/3 均兼容 全自动安装:easy_install jieba 或者 pip in ...

  6. ElasticSearch自定义分析器-集成结巴分词插件

    关于结巴分词 ElasticSearch 插件: https://github.com/huaban/elasticsearch-analysis-jieba 该插件由huaban开发.支持Elast ...

  7. Simple: SQLite3 中文结巴分词插件

    一年前开发 simple 分词器,实现了微信在两篇文章中描述的,基于 SQLite 支持中文和拼音的搜索方案.具体背景参见这篇文章.项目发布后受到了一些朋友的关注,后续也发布了一些改进,提升了项目易用 ...

  8. 北大开源全新中文分词工具包:准确率远超THULAC、结巴分词

    最近,北大开源了一个中文分词工具包,它在多个分词数据集上都有非常高的分词准确率.其中广泛使用的结巴分词误差率高达 18.55% 和 20.42,而北大的 pkuseg 只有 3.25% 与 4.32% ...

  9. 中文分词接口api,采用结巴分词PHP版中文分词接口

    中文分词,分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字.句和段能通过明显的分界符来简单划界,唯独词没有一个形式上 ...

随机推荐

  1. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  2. RecyclerView使用大全

    RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recyler ...

  3. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  4. 使用CSS3实现一个3D相册

    CSS3系列我已经写过两篇文章,感兴趣的同学可以先看一下CSS3初体验之奇技淫巧,CSS3 3D立方体效果-transform也不过如此 第一篇主要列出了一些常用或经典的CSS3技巧和方法:第二篇是一 ...

  5. category中重写方法?

    问:可以在category中重写方法吗? 答:代码上可以实现 在category中重写方法,但在实际开发中,不建议这样做.如果确实需要重写原有方法也建议使用子类进行重写. category是为了更方便 ...

  6. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库

    说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...

  7. [原] KVM 虚拟化原理探究(4)— 内存虚拟化

    KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...

  8. 手把手教你写一个RN小程序!

    时间过得真快,眨眼已经快3年了! 1.我的第一个App 还记得我14年初写的第一个iOS小程序,当时是给别人写的一个单机的相册,也是我开发的第一个完整的app,虽然功能挺少,但是耐不住心中的激动啊,现 ...

  9. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  10. 【代码笔记】iOS-获得当前的月的天数

    一,代码. #import "ViewController.h" @interface ViewController () @end @implementation ViewCon ...