中文分词之结巴分词~~~附使用场景+demo

常用技能(更新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

先说下注意点,结巴分词他没有对分词进行一次去重,我们得自己干这件事;字典得自行配置或者设置成输出到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
    }
}

  

结巴中文分词相关:

https://github.com/fxsjy/jieba

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

http://cppjieba-webdemo.herokuapp.com

时间: 2024-10-18 12:06:41

中文分词之结巴分词~~~附使用场景+demo的相关文章

python 中文分词:结巴分词

中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法 安装(Linux环境) 下载工具包,解压后进入目录下,运行:python setup.py install 模式 默认模式,试图将句子最精确地切开,适合文本分析 全模式,把句

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

关于结巴分词 ElasticSearch 插件: https://github.com/huaban/elasticsearch-analysis-jieba 该插件由huaban开发.支持Elastic Search 版本<=2.3.5. 结巴分词分析器 结巴分词插件提供3个分析器:jieba_index.jieba_search和jieba_other. jieba_index: 用于索引分词,分词粒度较细: jieba_search: 用于查询分词,分词粒度较粗: jieba_other:

ictclas,ansj,结巴分词,StanfordNLP中文分词以及所用词性标注集

NLPIR(ICTCLAS),参见java实现NLPIR(ICTCLAS)分词:http://www.bubuko.com/infodetail-665665.html,词性标注使用北大词性标注集.在Linux系统中的使用方法:http://jingyan.baidu.com/article/9158e0004251b4a2541228e5.html ansj分词,非常好用,ansj-seg把分词.词性标注.新词发现.关键词提取这些功能的接口,都抽取出来了,方便我们选择其中一部分使用,这点尤其在

python中文分词,使用结巴分词对python进行分词

在采集美女站时,需要对关键词进行分词,最终采用的是python的结巴分词方法. 中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法 安装(Linux环境) 下载工具包,解压后进入目录下,运行:python setup.py i

Python 结巴分词

今天的任务是对txt文本进行分词,有幸了解到"结巴"中文分词,其愿景是做最好的Python中文分词组件.有兴趣的朋友请点这里. jieba支持三种分词模式: *精确模式,试图将句子最精确地切开,适合文本分析: *全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义: *搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词. 主要采用以下算法: *基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图

python3.6下安装结巴分词需要注意的地方

近期,在安装结巴分词的时候遇到一些问题,纠结了好一阵,跟大家分享下,希望能有所帮助.先说下安装环境: windows7, 64位系统 python3.6,python3.5在结巴分词的官方github上,描述了关于结巴分词(jieba)的安装步骤 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python

为Elasticsearch添加中文分词,对比分词器效果

http://keenwon.com/1404.html Elasticsearch中,内置了很多分词器(analyzers),例如standard (标准分词器).english(英文分词)和chinese (中文分词).其中standard 就是无脑的一个一个词(汉字)切分,所以适用范围广,但是精准度低:english 对英文更加智能,可以识别单数负数,大小写,过滤stopwords(例如"the"这个词)等:chinese 效果很差,后面会演示.这次主要玩这几个内容:安装中文分词

Python 结巴分词 关键词抽取分析

关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来.这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语.因此,目前依然可以在论文中看到关键词这一项. 除了这些,关键词还可以在文本聚类.分类.自动摘要等领域中有着重要的作用.比如在聚类时将关键词相似的几篇文档看成一个团簇,可以大大提高聚类算法的收敛速度:从某天所有的新闻中提取出这些新闻的关键词,就可以大致了解那天发生了什么事情:或者将某段时间内几个人的微博拼成一篇长文本,然后抽取关键词就可以知道他

结巴分词

去除停用词 链接1 链接2 结巴分词github 地址 加入自己的词典