pythonjieba分词_python结巴(jieba)分词

本文介绍了结巴分词器的特点和支持的分词模式,并通过实例演示了如何使用结巴分词器进行分词、添加自定义词典、提取关键词等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、特点

1、支持三种分词模式:

(1)精确模式:试图将句子最精确的切开,适合文本分析。

(2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。

(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

2、支持繁体分词

3、支持自定义词典

二、实现

结巴分词的实现原理主要有一下三点:

(1)基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)。

(2)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合。

(3)对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。

三、应用

我们来演示一下结巴分词的主要功能

1、分词

1 #-*- coding:utf-8 -*-

2

3

4 import jieba

5

6

7

8 '''

9 cut方法有两个参数

10 1)第一个参数是我们想分词的字符串

11 2)第二个参数cut_all是用来控制是否采用全模式

12 '''

13

14 #全模式

15 word_list = jieba.cut("今天天气真好。亲爱的,我们去远足吧!",cut_all=True)

16 print "全模式:","|".join(word_list)

17 #精确模式 , 默认就是精确模式

18 word_list = jieba.cut("今天天气真好。亲爱的,我们去远足吧!",cut_all=False)

19 print "精确模式:","|".join(word_list)

20 #搜索引擎模式

21 word_list = jieba.cut_for_search("今天天气真好。亲爱的,我们去远足吧!")

22 print "搜索引擎:","|".join(word_list)

2、添加自定义词典

虽然jieba有新词识别能力,但是自己添加新词可以保证更高的正确率。

开发者可以根据自己的需要添加自定义词典,以便包含jieba词库里没有的词。

例:小红今天我们还去以前经常去的地方远足吗?要不咱们换个地方吧!园小园怎么样?没问题小豆芽

自定义词典(cu.txt):

园小园 5

小豆芽 3 nr

一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),中间用空格隔开。

1 #-*- coding:utf-8 -*-

2 import jieba

3

4 jieba.load_userdict("./cu.txt")

5 word_list = jieba.cut("小红今天我们还去以前经常去的地方远足吗?要不咱们换个地方吧!园小园怎么样?没问题小豆芽")

6 print "|".join(word_list)

3、关键词提取

1)第一个参数(setence)为待提取的文本。

2)topK为返回几个TF/IDF权重最大的关键词,默认值为20,可以自己指定。

1 #-*- coding:utf-8 -*-

2 import jieba.analyse as al

3

4 content = open("./topk.txt","rb").read()

5 word_topk = al.extract_tags(content,topK=4)

6 print "|".join(word_topk)

4、词性标注

标注句子分词后每个词的词性,采用和ictclas兼容的标记法。

1 #-*- coding:utf-8 -*-

2 import jieba.posseg as pseg

3

4 words = pseg.cut("青岛北京是不错的地方")

5 for word in words:

6 print word.word,word.flag

运行结果:

青岛 ns

北京 ns

是 v

不错 a

的 uj

地方 n

5、并行分词(只能在linux系统上运行)

将要进行分词的文本按行分隔,把各行文本分配到多个python进程中去,然后归并结果,从而使分词速度提升。

基于python的multiprocessing模块,目前不支持windows系统。

#-*- coding:utf-8 -*-

import jieba

#开启并行分词模式,参数为参与并行分词的进程数

jieba.enable_parallel(2)

#关闭并行分词

#jieba.disable_parallel()

content = open("./topk.txt","rb")

words = jieba.cut(content)

print "|".join(words)

6、模块初始化机制的改变:lazy load (从0.28版本开始)

下载你所需要的词典,然后覆盖jieba/dict.txt或者用jieba.set_dictionary("")将其覆盖。

1 #-*- coding:utf-8 -*-

2

3 import jieba

4 jieba.set_dictionary("./dict.txt")

5 content = open("./content.txt","rb").read()

6 words = jieba.cut(content)

7 print "|".join(words)

7、Tokenize:返回词语在原文的起始位置

1)第一个参数为文本内容。

2)第二个参数mode可以不用默认模式,指定为“search”搜索引擎模式。

1 #-*- coding:utf-8 -*-

2 import jieba

3

4 result = jieba.tokenize(u'今天天气真好。亲爱的,我们去远足吧!')

5 for token in result:

6 print "word %s\t\t start: %d \t\t end:%d" % (token[0],token[1],token[2])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值