中文分词之结巴分词~~~附使用场景+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版中文分词接口
中文分词,分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字.句和段能通过明显的分界符来简单划界,唯独词没有一个形式上 ...
随机推荐
- ASP.NET路由模型解析
大家好,我又来吹牛逼了 ~-_-~ 转载请注明出处:来自吹牛逼之<ASP.NET路由模型解析> 背景:很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- SSH实战 · 唯唯乐购项目(上)
前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...
- ifconfig: command not found(CentOS专版,其他的可以参考)
ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) echo $PATH 解决方案1:先看看是不是 ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
- Linux学习之文件操作
Linux,一起学习进步- mkdir The mkdir command is used to create directories.It works like this: mkdir命令是用 ...
- 掌握javascript中的最基础数据结构-----数组
这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...
- 简记用ArcGIS处理某项目需求中数据的步骤
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目需求涉及如下几个步骤: a.矢量化 b.获取范围内要素 ...
- Openfiler配置RAC共享存储
将 Openfiler 用作 iSCSI 存储服务器,主要操作步骤如下: 1.设置 iSCSI 服务 2.配置网络访问 3.指定物理存储器并对其分区 4.创建新的卷组 5.创建所有逻辑卷 6.为每个逻 ...
- 手把手教你写一个RN小程序!
时间过得真快,眨眼已经快3年了! 1.我的第一个App 还记得我14年初写的第一个iOS小程序,当时是给别人写的一个单机的相册,也是我开发的第一个完整的app,虽然功能挺少,但是耐不住心中的激动啊,现 ...