本文要点
jieba扩展包有3种分词的算法:
1/普通分词
缺点:
需要手工过滤停用词、无意义词、电话号码、符号等。
也就是说我们需要定义一个停用词列表,然后对切分出来的词进行遍历,
如果命中了停用词列表,则删除该词。
优点:
能较为全面的保留所有关键字(只要不是停用词,任何词性的词都会被保留)
代码:
import jieba
jieba.cut(string,cut_all=False,HMM=True) # 全模式/精确模式
jieba.cut_for_search(string,HMM=True) # 搜索引擎模式
jieba.load_userdict(file_name) # 加载用户自定义的词库,
jieba.add_word('石墨烯') # 增加自定义词语
jieba.del_word('自定义词') # 删除自定义词语
jieba.suggest_freq(segment,tune=True) # 可调节单个词语的词频,使其能(或不能)被分出来。
2/基于TF-IDF算法
我们只需要告诉组件停用词库,它将自己载入词库并使用它。
import jieba
jieba扩展包中,有自己的逆向文档语料库和停用词语料库,
但是如果你在用的时候发现提取关键词的效果并不好,你可以替换成自己的语料库。
jieba.analyse.set_stop_words('xxxx.txt')
jieba.analyse.set_idf_path("idf.txt.big")
jieba.analyse.extract_tags(sentence,topK=20,withWeight=False,allowPOS=None)
extract_tags()函数是基于TF-IDF算法进行关键词提取的。
该函数共有4个参数:
<1>sentence:待提取关键词的文本
<2>topK:为返回几个 TF-IDF 权重最大的关键词,默认值为20,权重最大的K个词语
<3>withWeight:是否一并返回关键词权重值,默认值为 False
<4>allowPOS:仅包括指定词性的词,默认值为空
停用词过滤有限,也需要手工处理部分数字、符号;
它通过词频抽取关键字,对同一篇文章的词频统计不具有统计意义,多用于宏观上的观测。
因为在TF-IDF这种算法中,一个词是不是关键词,并不仅仅是由在一篇文章的词频决定的,
还需要考虑该词在预料库中其他文章中的普遍程度。
在一篇文章中出现的次数说,并不一定就是关键词。
这就解释了为啥运用TF-IDF算法得到的关键词并不具有词频的统计意义,而是代表该词对于这篇文章的重要程度,是一种宏观上的观测。
3/基于TextRank算法
大概效果同TF-IDF,通过限定词性过滤无关字符,能得到较为工整的关键字结果。
import jieba
jieba.analyse.set_stop_words('xxxx.txt') # 停用词库
jieba.analyse.textrank(content,
topK=20,
withWeight=False,
allowPOS=['ns','n','vn','v'])
textrank()函数和TF-IDF的extract_tags()函数几乎相同,
区别在于:extract_tags()函数中的allowPOS参数默认为空,你需要的时候再去添加
而textrank()函数默认过滤词性,allowPOS=('ns','n','vn','v')
最后:
我们应该根据我们具体的目标去采用合适的分词算法。
1)对某一篇文章进行关键字Map,我们选择普通分词,并自行过滤关键词,或添加自定义词库。
2)对采集的一批样本进行关键字分析,我们可以选择TF-IDF,对所有的关键字进行词频统计,并绘制出关键字云图。
3)如果我们要分析一批样本中用户的分类,用户的行为,用户的目的,我们可以选择TextRank抽取指定词性的关键字进行统计分析。
1/前言
参考网址: https://www.jianshu.com/p/883c2171cdb5
在自然语言处理中,为了能更好地处理句子,往往需要把句子拆开分成一个一个的词语,
这样能更好的分析句子的特性,这个过程叫就叫做分词。
中文分词是自然语言处理中经常遇到的场景,比如我们想知道某篇文章的评论中,哪些词出现的比较多。
那么我们就需要进行分词,然后进行词频统计。
由于中文句子不像英文那样天然自带分隔,并且中文存在各种各样的词组,从而使中文分词具有一定的难度。
不过,中文分词并不追求完美,而是通过关键字识别技术,抽取句子中最关键的部分,从而达到理解句子的目的。
也就是说:中文分词并不需要把每个词都完美的切分开,而是通过关键词识别技术,把最关键的部分抽取出来。
2/jieba扩展包
jieba是目前最好的python中的中文分词模块(或者称扩展包)。
jieba这个库在中文分词界非常出名,支持简、繁体中文,用户还可以加入自定义词典以提高分词的准确率。
jieba库有自带的语料库和停用词库,
用户可以导入自己的语料库和停用词库,这样可以填充jieba自带的语料库和停用词库的不足。
jieba主要有以下3种切词模式:
<1>全模式
cut_all=True
把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
也就是说:全模式不管三七二十一,把词语全部切分开,它不会试图去理解语句,所以速度很快。
jieba.cut(string,cut_all=True,HMM=True),返回生成器,需要用list()转换成列表。
jieba.lcut(string,cut_all=True,HMM=True),直接返回列表
<2>精确模式
cut_all=False
精确模式:试图将句子最精确地切开,适合文本分析;
jieba.cut(string,cut_all=False,HMM=True),返回生成器,需要用list()转换列表。
jieba.lcut(string,cut_all=False,HMM=True),返回列表列表。
<3>搜索引擎模式
在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
jieba.cut_for_search(string,HMM=True)返回生成器,需要用list()转换
jieba.lcut_for_search(string,HMM=True)返回列表
3/jieba.cut()函数和jieba.cut_for_search()函数
<1>jieba.cut(str,cut_all=False,HMM=True),函数接受3个参数:
1)需要分词的字符串str:(unicode 或 UTF-8 字符串、GBK 字符串)
2)cut_all:是否使用全模式,默认值为False,及精确模式
3)HMM:用来控制是否使用HMM模型,默认值为True
<2>jieba.cut_for_search(str,HMM=True)函数,搜索引擎模式,函数接受2个参数
1)需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
2)HMM:用来控制是否使用HMM模型,默认值为True
4/全模式&&精确模式
import jieba
jieba.cut(str,cut_all=True,HMM=True)
5/搜索引擎模式
import jieba
jieba.cut_for_search(str,HMM=True)
6/HMM模型
隐马尔可夫模型,是一种基于概率的统计分析模型,用来描述一个系统隐形状态的转移和隐形状态的表现概率,
在jieba中,对于没有收录到jieba词库的词,使用了汉字成词能力的HMM模型和viterbi算法
7/繁体字分词
8/创建自定义词库(这些词是没有收录到jieba自带的词库中的,为了切分词的效果,我们自行加入,二者联合使用)
我们在使用jieba库的时候,默认是使用jieba扩展包自带的词库(收录词库和停用词库)。
如果我们使用jieba自带的词库,传入字符串之后,发现分词效果不是很好,
有的词我们预期要切分开但是没有切分开,或者我们不想切开反而给切开了
在这种情况下,我们可以自定义一个补词库,自定义词库和jieba扩展包自带的词库联合使用,
这样分词效果更加。
jieba扩展包会优先使用自定义词库,开发者可以指定自定义的词库,以便包含jieba词库里没有收录的词,
格式如下,一行是一个词,分成3部分,后2部分可以省略,用空格隔开,如下:
词语 词频(可省略) 词性(可省略)
创新办 3 i
云计算 5
凱特琳 nz
虽然jieba有新词识别能力(HMM模型的功劳),但自行添加新词可以保证更高的正确率。
词频越高则成词概率越大,但是不宜过大。
具体词频应该设置为多少目前没有公式
9/载入自定义词库
使用 jieba.load_userdict(file_name) 即可载入自定义词库,file_name是自定义词典文件的路径
10/修改自定义词库,包括添加新的词语,修改词频,词性
使用jieba.add_word(word,freq=None,tag=None)和jieba.del_word(word)可在程序中动态修改词典。
jieba.add_word('石墨烯') # 增加自定义词语
jieba.add_word('凱特琳',freq=42,tag='nz') #设置词频和词性
jieba.del_word('自定义词') # 删除自定义词语
使用 suggest_freq(segment,tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
以上的add_word() del_word() suggest_frq()函数,
只是在执行代码的时候,临时修改而已,并没有修改jieba扩展包的底层数据。
今天的文章NLP:jieba中文分词分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/22120.html