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抽取指定词性的关键字进行统计分析。
参考网址: 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扩展包的底层数据。
    import_random
        数据挖掘工程师 @ aa
        336.8k
       
粉丝