NLP(二)--中文处理jieba模块

#jieba模块
中文没有空格
jieba.cut方法接受三个参数的:
》需要分词的字符串
》cut_all参数用来控制是否采用全模式
》HMM参数用来控制是否使用HMM模型
jieba.cut_for_search方法接受两个参数
》需要分词的字符串
》是否使用HMM模型
import jieba  
text = '我来到北京清华大学'  
default_mode =jieba.cut(text)  
full_mode = jieba.cut(text,cut_all=True)  
search_mode = jieba.cut_for_search(text)  
  
print "精确模式:","/".join(default_mode)  
print "全模式:","/".join(full_mode)  
print "搜索引擎模式:","/".join(search_mode)  
  
精确模式: 我/来到/北京/清华大学  
全模式: 我/来到/北京/清华/清华大学/华大/大学  
搜索引擎模式: 我/来到/北京/清华/华大/大学/清华大学 

添加自定义词典

加载词典
  • 开发者可以指定自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率
  • JiebaSegmenter.LoadUserDict("user_dict_file_path")
  • 词典格式与主词典格式相同,即一行包含:词、词频(可省略)、词性(可省略),用空格隔开
  • 词频省略时,分词器将使用自动计算出的词频保证该词被分出

创新办 3 i
云计算 5
凱特琳 nz
台中
机器学习 3
调整词典
  • 使用JiebaSegmenter.AddWord(word, freq=0, tag=null)可添加一个新词,或调整已知词的词频;若freq不是正整数,则使用自动计算出的词频,计算出的词频可保证该词被分出来
  • 使用JiebaSegmenter.DeleteWord(word)可移除一个词,使其不能被分出来

3. 关键词提取

基于TF-IDF算法的关键词提取
  • JiebaNet.Analyser.TfidfExtractor.ExtractTags(string text, int count = 20, IEnumerable<string> allowPos = null)可从指定文本中抽取出关键词。
  • JiebaNet.Analyser.TfidfExtractor.ExtractTagsWithWeight(string text, int count = 20, IEnumerable<string> allowPos = null)可从指定文本中抽取关键词的同时得到其权重
  • 关键词抽取基于逆向文件频率(IDF),组件内置一个IDF语料库,可以配置为其它自定义的语料库。
  • 关键词抽取会过滤停用词(Stop Words),组件内置一个停用词语料库,这个语料库合并了NLTK的英文停用词和哈工大的中文停用词。
基于TextRank算法的关键词抽取
  • JiebaNet.Analyser.TextRankExtractorTfidfExtractor相同的接口。需要注意的是,TextRankExtractor默认情况下只提取名词和动词。
  • 以固定窗口大小(默认为5,通过Span属性调整)和词之间的共现关系构建图

4. 词性标注

  • JiebaNet.Segmenter.PosSeg.PosSegmenter类可以在分词的同时,为每个词添加词性标注。
  • 词性标注采用和ictclas兼容的标记法,关于ictclas和jieba中使用的标记法列表,请参考:词性标记
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))));
一团/m 硕大无朋/i 的/uj 高能/n 离子/n 云/ns ,/x 在/p 遥远/a 而/c 神秘/a 的/uj 太空/n 中/f 迅疾/z 地/uv 飘移/v

5. Tokenize:返回词语在原文的起止位置

  • 默认模式
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);
}
word 永和           start: 0   end: 2
word 服装           start: 2   end: 4
word 饰品           start: 4   end: 6
word 有限公司         start: 6   end: 10
  • 搜索模式
var segmenter = new JiebaSegmenter();
var s = "永和服装饰品有限公司";
var tokens = segmenter.Tokenize(s, TokenizerMode.Search);
foreach (var token in tokens)
{
    Console.WriteLine("word {0,-12} start: {1,-3} end: {2,-3}", token.Word, token.StartIndex, token.EndIndex);
}
word 永和           start: 0   end: 2
word 服装           start: 2   end: 4
word 饰品           start: 4   end: 6
word 有限           start: 6   end: 8
word 公司           start: 8   end: 10
word 有限公司         start: 6   end: 10

6. 并行分词(暂未实现)

7. 与Lucene.NET的集成

jiebaForLuceneNet项目提供了与Lucene.NET的简单集成,更多信息请看:jiebaForLuceneNet

8. 其它词典

jieba分词亦提供了其它的词典文件:

9. 分词速度

  • 全模式:2.5 MB/s
  • 精确模式:1.1 MB/s
  • 测试环境: Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz;围城.txt(734KB)

10. 命令行分词

Segmenter.Cli项目build之后得到jiebanet.ext,它的选项和实例用法如下:

-f       --file          the file name, (必要的).
-d       --delimiter     the delimiter between tokens, default: / .
-a       --cut-all       use cut_all mode.
-n       --no-hmm        don't use HMM.
-p       --pos           enable POS tagging.
-v       --version       show version info.
-h       --help          show help details.

sample usages:
$ jiebanet -f input.txt > output.txt
$ jiebanet -d | -f input.txt > output.txt
$ jiebanet -p -f input.txt > output.txt

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值