「写在前面的话」有关jieba入门的文章网上已有不少,笔者学习了一圈,恰逢今日创号简书,尝试写写一二,综述其核心,有不足不当之处请你指正。
【文章目录】
一、jieba是什么
二、jieba的特点
三、jieba的安装
四、jieba的用法
一、jieba是什么
jieba,结巴中文分词,一款优秀的Python第三方中文分词库,是自然语言分析(NLP)工具之一。它依据「词典」确定汉字间的关联概率,概率大的组成词,形成分词结果。
jieba出品地址:https://github.com/fxsjy/jieba
二、jieba的特点
jieba短小精悍,分词能力却不可小觑。它有三种分词模式,支持自定义词典,支持繁体分词。
三种分词模式为:
(一)精确模式
试图将句子最精确地切开,适合文本分析。
(二)全模式
将句子中所有可成词的词语都扫描出来,速度非常快,但不能解决歧义。
(三)搜索引擎模式
在精确模式基础上,对长词再次切分,提高召回率,适用搜索引擎分词。
三、jieba的安装
Python 2/3均兼容。通过 import jieba 来引用。
(一)全自动安装
easy_install jieba 或 pip install jieba 或 pip3 install jieba
(二)半自动安装
http://pypi.python.org/pypi/jieba/
下载解压后运行 python setup.py install
(三)手动安装
将 jieba 目录放置于当前目录或者 site-packages 目录。
(四)PyCharm 中安装
【File】-【Settings】-【Project Interpreter】-【+】-搜索jieba-【Install Package】
四、jieba的用法
(一)分词功能
1.返回可迭代generator类型
(1)jieba.cut(sentence, cut_all=False, HMM=True)
● sentence:待分词句子。unicode、UTF-8或GBK。不建议直接输入GBK字符串,可能会错误解码成 UTF-8。
● cut_all:分词模式。True为全模式,False为精确模式。默认精确模式。
● HMM:是否采用隐式马尔可夫模型HMM(Hidden Markov Model),默认采用。
(2)jieba.cut_for_search(sentence, HMM=True)
搜索引擎模式。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。参数同上。
代码示例
# -*- coding: utf-8 -*-
import jieba
"""----------jieba.cut(sentence, cut_all=False, HMM=True)------"""
"""
sentence 待分词的句子
cut_all 参数用来控制是否采用全模式
HMM 参数用来控制是否使用 HMM 模型
"""
seg = jieba.cut("中国是一个伟大的国家,中国人人会越来越好!")
print("jieba.cut的精确模式(默认):" + "/".join(seg))
print("-" * 20)
seg = jieba.cut("中国是一个伟大的国家,中国人人会越来越好!", cut_all = True)
print("jieba.cut的全模式:" + "/".join(seg))
print("jieba.cut返回的类型是:" + str(type(seg)))
print("-" * 20)
seg = jieba.cut_for_search("中国是一个伟大的国家,中国人人会越来越好!")
print("jieba.cut的搜索引擎模式:" + "/".join(seg))
print("jieba.cut_for_search返回的类型是:" + str(type(seg)))
输出结果
2.返回list类型
(1)jieba.lcut(*args, **kwargs)
也可用 jieba.lcut(sentence, cut_all=False, HMM=True)
cut_all:分词模式。True为全模式,False为精确模式。默认精确模式。
参数同上。
(2)jieba.lcut_for_search(*args, **kwargs)
也可用 jieba.lcut_for_search(sentence, HMM=True)
搜索引擎模式。参数同上。
代码示例
# -*- coding: utf-8 -*-
import jieba
"""----------jieba.cut(sentence, cut_all=False, HMM=True)------"""
"""
sentence 待分词的句子
cut_all 参数用来控制是否采用全模式
HMM 参数用来控制是否使用 HMM 模型
"""
seg = jieba.lcut("中国是一个伟大的国家,中国人人会越来越好!")
print("jieba.lcut的精确模式(默认):")
print(seg)
print("-" * 20)
seg = jieba.lcut("中国是一个伟大的国家,中国人人会越来越好!", cut_all = True)
print("jieba.lcut的全模式:")
print(seg)
print("jieba.lcut返回的类型是:")
print(type(seg))
print("-" * 20)
seg = jieba.lcut_for_search("中国是一个伟大的国家,中国人人会越来越好!")
print("jieba.lcut的搜索引擎模式:")
print(seg)
print("-" * 20)
print("jieba.lcut_for_search返回的类型是:")
print(type(seg))
输出结果
(二)调整词典
1.词典格式
参考默认词典dict.txt(该文件可能在以下路径文件夹中C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib\site-packages\jieba)
一词占一行,每行三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可动。如图:
2.词典载入
jieba.load_userdict(file_name)
file_name:为文件类对象或自定义词典的路径(若为路径或二进制方式打开的文件,则必须为UTF-8编码)。
3.词典调整
(1)add_word(word, freq=None, tag=None)
增加分词词语、词频(可省略)、词性(可省略)
(2)del_word(word)
删除分词词语
(3)suggest_freq(segment,tune=True)
可调节单个词语的词频,使其能(或不能)被分出来。
代码示例
# -*- coding: utf-8 -*-
import jieba
print('/'.join(jieba.cut('中国是一个伟大的国家,中国人人会越来越好!')))
print()
print("【载入自定义的词典,里面增加了:伟大的国家、越来越好】")
jieba.load_userdict("C:\\Users\\Administrator\\Desktop\\userdict.txt")
print('/'.join(jieba.cut('中国是一个伟大的国家,中国人人会越来越好!')))
print()
print("【动态增加词典中的词:一个伟大的国家】")
jieba.add_word("一个伟大的国家")
print('/'.join(jieba.cut('中国是一个伟大的国家,中国人人会越来越好!')))
print()
print("【动态删除词典中的词:越来越好】")
jieba.del_word("一个伟大的国家")
jieba.del_word("越来越好")
print('/'.join(jieba.cut('中国是一个伟大的国家,中国人人会越来越好!')))
print()
print("*" * 30)
print('/'.join(jieba.cut('中国是一个伟大的国家,中国人人会越来越好!')))
jieba.suggest_freq(('越', '来', '越'), False)
print('/'.join(jieba.cut('中国是一个伟大的国家,中国人人会越来越好!')))
jieba.suggest_freq(('越', '来', '越'), True)
print('/'.join(jieba.cut('中国是一个伟大的国家,中国人人会越来越好!')))
载入词典
输出结果
(三)关键词提取
1.基于 TF-IDF 算法
(1)jieba.analyse.extract_tags(sentence,topK=20, withWeight=False, allowPOS=())
● Sentence:为待提取的文本
● topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
● withWeight:为是否一并返回关键词权重值,默认值为 False
● allowPOS:仅包括指定词性的词,默认值为空,即不筛选
代码示例
# -*- coding: utf-8 -*-
import jieba.analyse
seg_extract_tags = jieba.analyse.extract_tags("中国是一个伟大的国家,中国人人会越来越好!")
print(seg_extract_tags)
seg_extract_tags = jieba.analyse.extract_tags("中国是一个伟大的国家,中国人人会越来越好!", topK=3)
print(seg_extract_tags)
seg_extract_tags = jieba.analyse.extract_tags("中国是一个伟大的国家,中国人人会越来越好!", topK=5, withWeight=True)
print(seg_extract_tags)
seg_extract_tags = jieba.analyse.extract_tags("中国是一个伟大的国家,中国人人会越来越好!", topK=5, allowPOS=('n'))
print(seg_extract_tags)
输出结果
(2)jieba.analyse.TFIDF(idf_path=None)
新建 TFIDF 实例,idf_path 为 IDF 频率文件。
示例可见jieba出品地址: https://github.com/fxsjy/jieba
(3)jieba.analyse.set_idf_path(file_name)
使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,file_name为自定义语料库的路径。
示例可见jieba出品地址: https://github.com/fxsjy/jieba
(4)jieba.analyse.set_stop_words(file_name)
使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径,file_name为自定义语料库的路径。
示例可见jieba出品地址: https://github.com/fxsjy/jieba
2.基于 TextRank 算法
(1)jieba.analyse.textrank(sentence,topK=20, withWeight=False,allowPOS=('ns', 'n', 'vn', 'v'))
● ns:地名。名词代码n和处所词代码s并在一起。
● n:名词。取英语名词 noun 的第一个字母。
● vn:名动词。指具有名词功能的动词,动词代码v和名词代码n并在一起。
● v:动词。取英语动词 verb的第一个字母。
参数以及用法同上。
(2)jieba.analyse.TextRank()
新建自定义 TextRank 实例。
示例可见jieba出品地址: https://github.com/fxsjy/jieba
(四)词性标注
import jieba.posseg
jieba.posseg.POSTokenizer(tokenizer=None)
新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
代码示例
# -*- coding: utf-8 -*-
import jieba.posseg as pseg
words = pseg.cut("中国是一个伟大的国家,中国人人会越来越好!")
for word, flag in words:
print('%s %s' % (word, flag))
输出结果
(五)返回词语在原文的起止位置
● tokenize(unicode_sentence, mode='default', HMM=True)
● sentence:待分词句子,只能为 Unicode
● mode:mode='default'为默认模式,mode='search'为搜索模式
●HMM:是否采用HMM(Hidden Markov Model),默认为True
代码示例
# -*- coding: utf-8 -*-
import jieba
print("【默认模式】")
result = jieba.tokenize(u'中国是一个伟大的国家,中国人人会越来越好!')
for tk in result:
print("word \t %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
print()
print("【搜索模式】")
result = jieba.tokenize(u'中国是一个伟大的国家,中国人人会越来越好!', mode='search')
for tk in result:
print("word \t %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
输出结果
(六)并行分词
将目标文本按行分隔后,将其分配到多个 Python 进程并行分词,然后归并结果,提升速度。仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。目前暂不支持 Windows。
jieba.enable_parallel() # 开启并行分词模式,参数为并行进程数
jieba.disable_parallel() # 关闭并行分词模式
示例可见jieba出品地址: https://github.com/fxsjy/jieba
(七)延迟加载初始化
jieba 采用延迟加载,import jieba 和 jieba.Tokenizer() 不会立即触发词典的加载。
import jieba
jieba.initialize() # 手动初始化(可选)
jieba.set_dictionary('data/dict.txt.big') # 可改变主词典的路径
(八)其他用法
详细请见: help(jieba)
(创号简书首文到此结束,本文集【小郴编程】还将持续发布有关Python学习系列文章,欢迎你来指导与交流!)
☺引用转载还请注明作者说明出处哟!☺