【Python 3+】jieba从零到壹小白级入门(含代码示例)

「写在前面的话」有关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)))

输出结果

image.png

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))

输出结果

image.png

(二)调整词典

1.词典格式

参考默认词典dict.txt(该文件可能在以下路径文件夹中C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib\site-packages\jieba)
一词占一行,每行三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可动。如图:

dict_txt.png

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('中国是一个伟大的国家,中国人人会越来越好!')))

载入词典

image.png

输出结果

image.png

(三)关键词提取

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)

输出结果

image.png

(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))

输出结果

image.png

(五)返回词语在原文的起止位置

● 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]))

输出结果

image.png

(六)并行分词

将目标文本按行分隔后,将其分配到多个 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学习系列文章,欢迎你来指导与交流!)
☺引用转载还请注明作者说明出处哟!☺

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352