中文分词之结巴分词~~~附使用场景+demo(net)
常用技能(更新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.简单封装的帮助类:
using System.Linq;
using JiebaNet.Segmenter;
using System.Collections.Generic; namespace LoTLib.Word.Split
{
#region 分词类型
public enum JiebaTypeEnum
{
/// <summary>
/// 精确模式---最基础和自然的模式,试图将句子最精确地切开,适合文本分析
/// </summary>
Default,
/// <summary>
/// 全模式---可以成词的词语都扫描出来, 速度更快,但是不能解决歧义
/// </summary>
CutAll,
/// <summary>
/// 搜索引擎模式---在精确模式的基础上对长词再次切分,提高召回率,适合用于搜索引擎分词
/// </summary>
CutForSearch,
/// <summary>
/// 精确模式-不带HMM
/// </summary>
Other
}
#endregion /// <summary>
/// 结巴分词
/// </summary>
public static partial class WordSplitHelper
{
/// <summary>
/// 获取分词之后的字符串集合
/// </summary>
/// <param name="objStr"></param>
/// <param name="type"></param>
/// <returns></returns>
public static IEnumerable<string> GetSplitWords(string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
{
var jieba = new JiebaSegmenter();
switch (type)
{
case JiebaTypeEnum.Default:
return jieba.Cut(objStr); //精确模式-带HMM
case JiebaTypeEnum.CutAll:
return jieba.Cut(objStr, cutAll: true); //全模式
case JiebaTypeEnum.CutForSearch:
return jieba.CutForSearch(objStr); //搜索引擎模式
default:
return jieba.Cut(objStr, false, false); //精确模式-不带HMM
}
} /// <summary>
/// 获取分词之后的字符串
/// </summary>
/// <param name="objStr"></param>
/// <param name="type"></param>
/// <returns></returns>
public static string GetSplitWordStr(this string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
{
var words = GetSplitWords(objStr, type);
//没结果则返回空字符串
if (words == null || words.Count() < 1)
{
return string.Empty;
}
words = words.Distinct();//有时候词有重复的,得自己处理一下
return string.Join(",", words);//根据个人需求返回
}
}
}调用很简单:
string str = "bootstrap-datetimepicker 进一步跟进~~~开始时间和结束时间的样式显示";
Console.WriteLine("\n精确模式-带HMM:\n");
Console.WriteLine(str.GetSplitWordStr()); Console.WriteLine("\n全模式:\n");
Console.WriteLine(str.GetSplitWordStr(JiebaTypeEnum.CutAll)); Console.WriteLine("\n搜索引擎模式:\n");
Console.WriteLine(str.GetSplitWordStr(JiebaTypeEnum.CutForSearch)); Console.WriteLine("\n精确模式-不带HMM:\n");
Console.WriteLine(str.GetSplitWordStr(JiebaTypeEnum.Other)); Console.ReadKey();效果:
--------------------------
有人可能会说,那内容关键词提取呢?==》别急,看下面:
这种方式所对应的字典是它=》idf.txt
简单说下Constants==》
效果:
完整帮助类(最新看github):https://github.com/dunitian/TempCode/tree/master/2016-09-05
using System.Linq;
using JiebaNet.Segmenter;
using System.Collections.Generic;
using JiebaNet.Analyser; namespace LoTLib.Word.Split
{
#region 分词类型
public enum JiebaTypeEnum
{
/// <summary>
/// 精确模式---最基础和自然的模式,试图将句子最精确地切开,适合文本分析
/// </summary>
Default,
/// <summary>
/// 全模式---可以成词的词语都扫描出来, 速度更快,但是不能解决歧义
/// </summary>
CutAll,
/// <summary>
/// 搜索引擎模式---在精确模式的基础上对长词再次切分,提高召回率,适合用于搜索引擎分词
/// </summary>
CutForSearch,
/// <summary>
/// 精确模式-不带HMM
/// </summary>
Other
}
#endregion /// <summary>
/// 结巴分词
/// </summary>
public static partial class WordSplitHelper
{
#region 公用系列
/// <summary>
/// 获取分词之后的字符串集合
/// </summary>
/// <param name="objStr"></param>
/// <param name="type"></param>
/// <returns></returns>
public static IEnumerable<string> GetSplitWords(string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
{
var jieba = new JiebaSegmenter();
switch (type)
{
case JiebaTypeEnum.Default:
return jieba.Cut(objStr); //精确模式-带HMM
case JiebaTypeEnum.CutAll:
return jieba.Cut(objStr, cutAll: true); //全模式
case JiebaTypeEnum.CutForSearch:
return jieba.CutForSearch(objStr); //搜索引擎模式
default:
return jieba.Cut(objStr, false, false); //精确模式-不带HMM
}
} /// <summary>
/// 提取文章关键词集合
/// </summary>
/// <param name="objStr"></param>
/// <returns></returns>
public static IEnumerable<string> GetArticleKeywords(string objStr)
{
var idf = new TfidfExtractor();
return idf.ExtractTags(objStr, 10, Constants.NounAndVerbPos);//名词和动词
} /// <summary>
/// 返回拼接后的字符串
/// </summary>
/// <param name="words"></param>
/// <returns></returns>
public static string JoinKeyWords(IEnumerable<string> words)
{
//没结果则返回空字符串
if (words == null || words.Count() < 1)
{
return string.Empty;
}
words = words.Distinct();//有时候词有重复的,得自己处理一下
return string.Join(",", words);//根据个人需求返回
}
#endregion #region 扩展相关
/// <summary>
/// 获取分词之后的字符串
/// </summary>
/// <param name="objStr"></param>
/// <param name="type"></param>
/// <returns></returns>
public static string GetSplitWordStr(this string objStr, JiebaTypeEnum type = JiebaTypeEnum.Default)
{
var words = GetSplitWords(objStr, type);
return JoinKeyWords(words);
} /// <summary>
/// 提取文章关键词字符串
/// </summary>
/// <param name="objStr"></param>
/// <returns></returns>
public static string GetArticleKeywordStr(this string objStr)
{
var words = GetArticleKeywords(objStr);
return JoinKeyWords(words);
}
#endregion
}
}

还有耐心或者只看末尾的有福了~
web端的字典配置那是个烦啊,逆天把源码微调了下
使用方法和上面一样
web版演示:
结巴中文分词相关:
https://github.com/fxsjy/jieba
https://github.com/anderscui/jieba.NET
http://cppjieba-webdemo.herokuapp.com
中文分词之结巴分词~~~附使用场景+demo(net)的更多相关文章
- python中文分词:结巴分词
中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规 ...
- python 中文分词:结巴分词
中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规 ...
- python中文分词工具——结巴分词
传送门: http://www.iteye.com/news/26184-jieba
- 结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍
Segment Segment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现. 变更日志 创作目的 分词是做 NLP 相关工作,非常基础的一项功能. jieba-analysis 作 ...
- python 结巴分词简介以及操作
中文分词库:结巴分词 文档地址:https://github.com/fxsjy/jieba 代码对 Python 2/3 均兼容 全自动安装:easy_install jieba 或者 pip in ...
- ElasticSearch自定义分析器-集成结巴分词插件
关于结巴分词 ElasticSearch 插件: https://github.com/huaban/elasticsearch-analysis-jieba 该插件由huaban开发.支持Elast ...
- Simple: SQLite3 中文结巴分词插件
一年前开发 simple 分词器,实现了微信在两篇文章中描述的,基于 SQLite 支持中文和拼音的搜索方案.具体背景参见这篇文章.项目发布后受到了一些朋友的关注,后续也发布了一些改进,提升了项目易用 ...
- 北大开源全新中文分词工具包:准确率远超THULAC、结巴分词
最近,北大开源了一个中文分词工具包,它在多个分词数据集上都有非常高的分词准确率.其中广泛使用的结巴分词误差率高达 18.55% 和 20.42,而北大的 pkuseg 只有 3.25% 与 4.32% ...
- 中文分词接口api,采用结巴分词PHP版中文分词接口
中文分词,分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字.句和段能通过明显的分界符来简单划界,唯独词没有一个形式上 ...
随机推荐
- [APUE]进程控制(上)
一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- Storm如何保证可靠的消息处理
作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文主要翻译自Storm官方文档Guaranteeing messag ...
- excel 日期/数字格式不生效需要但双击才会生效的解决办法
原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...
- Xamarin+Prism开发详解五:页面布局基础知识
说实在的研究Xamarin到现在,自己就没设计出一款好的UI,基本都在研究后台逻辑之类的!作为Xamarin爱好者,一些简单的页面布局知识还是必备的. 布局常见标签: StackLayout Abso ...
- [systemtap手记]debian体系安装过程
Debian体系,本人测试用机 Ubuntu 11.10 uname -r 查看原本的内核版本为 3.0.0-12-generic 第一步: 安装systemtap包 $ sudo apt-get i ...
- PHP 数组浅析
PHP的数组具有如下特点:1.数组初始化时无需指定长度:2.数组中的元素无需相同类型:3.数组的长度可变4.可使用var_dump(参数)或者print_r( 参数) 函数查看数组变量.5.数组内的 ...
- 从Maya中把模型搬运至网页的过程
虽然利用threejs来在网页中渲染3d模型不是第一次折腾了,但是还是遇到了各种问题.总结下我所遇到的问题,希望能给正在使用threejs的小伙伴一个帮助. 一.所使用的软件与开发环境 Maya201 ...
- webpack解惑:require的五种用法
我之前在 <前端搭环境之从入门到放弃>这篇文章中吐槽过,webpack中可以写commonjs格式的require同步语法,可以写AMD格式的require回调语法,还有一个require ...
- ABP框架 - 日志
文档目录 本节内容: 服务端 获取Logger(记录器) Logger的基类 配置 Abp.Castle.Log4Net 包 客户端 服务端 ABP使用Castle Windsor的日志记录工具,它可 ...














