jieba 分词

一.介绍:

jieba:

“结巴”中文分词:做最好的 Python 中文分词组件

“Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module.

完整文档见 :

GitHub: https://github.com/fxsjy/jieba

特点

  • 支持三种分词模式:
    • 精确模式,试图将句子最精确地切开,适合文本分析;
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

二.功能介绍及例子

  1.分词主要功能:

             先介绍主要的使用功能,再展示代码输出。jieba分词的主要功能有如下几种:

      1. jieba.cut:该方法接受三个输入参数:需要分词的字符串; cut_all 参数用来控制是否采用全模式;HMM参数用来控制是否适用HMM模型

      2. jieba.cut_for_search:该方法接受两个参数:需要分词的字符串;是否使用HMM模型,该方法适用于搜索引擎构建倒排索引的分词,粒度比较细。

      3. 待分词的字符串可以是unicode或者UTF-8字符串,GBK字符串。注意不建议直接输入GBK字符串,可能无法预料的误解码成UTF-8,

      4. jieba.cut 以及jieba.cut_for_search返回的结构都是可以得到的generator(生成器), 可以使用for循环来获取分词后得到的每一个词语或者使用

      5. jieb.lcut 以及 jieba.lcut_for_search 直接返回list

      6. jieba.Tokenizer(dictionary=DEFUALT_DICT) 新建自定义分词器,可用于同时使用不同字典,jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射。

  2.简单模式:

    2.1.精确模式(返回结果是一个生成器,对大量数据分词很重要,占内存小):

 

import jieba

s = '我想大口吃肉大碗喝酒!!!'
cut=jieba.cut(s)
print(cut)
#精确模式
print('精确模式输出:')
print(','.join(cut))

         输出为:

jieba 分词_第1张图片

 

2.2.全模式(返回结果也是生成器,特点是把文本分成尽可能多的词):

import jieba

s = '我想大口吃肉大碗喝酒!!!'
print('全模式:')
result=jieba.cut(s, cut_all=True)
print(result)
print(' '.join(result))

    输出为:

jieba 分词_第2张图片

 2.3.搜索引擎模式:

import jieba

s = '我想大口吃肉大碗喝酒!!!'
print('搜索引擎模式:')
result=jieba.cut_for_search(s)
print(result)
print(','.join(result))
输出为:

jieba 分词_第3张图片

  2.4:单个字模式:不用jieba,直接用list(sentence)  即可

train_df = pd.read_csv(dir)[:10].Report
def seg(sentence):
    return list(sentence.strip())
word_list = train_df.apply(seg)

》》》
2    [行, 驶, 没, 有, 顿, 挫, 的, 感, 觉, 原, 地, 换, 挡, 有, 闯, ...
3           [举, 起, 车, 辆, 在, 左, 前, 轮, 这, 边, 的, 缸, 体, 上]
4    [家, 庭, 用, 车, 可, 以, 入, 手, 的, 维, 修, 保, 养, 价, 格, ...

3.获取词性:每个词都有其词性,比如名词、动词、代词等,结巴分词的结果也可以带上每个词的词性,要用到jieba.posseg

     分词及输出词性:

import jieba.posseg as psg

s = '我想大口吃肉大碗喝酒!!!'
print('分词及词性:')
result=psg.cut(s)
print(result)
print([(x.word,x.flag) for x in result])
输出为

    过滤词性,如获取名词: 直接加个条件判断就行了

import jieba.posseg as psg

s = '我想大口吃肉大碗喝酒!!!'
print('分词及词性:')
result=psg.cut(s)
print(result)
#筛选为名词的
print([(x.word,x.flag) for x in result if x.flag=='n'])

  输出为

  jieba 分词_第4张图片

  jieba 分词_第5张图片

4.并行分词在文本数据量非常大的时候,为了提高分词效率,开启并行分词就很有必要了。jieba支持并行分词,基于python自带的multiprocessing模块,但要注意的是在Windows环境下不支持。

# 开启并行分词模式,参数为并发执行的进程数
jieba.enable_parallel(5)

# 关闭并行分词模式
jieba.disable_parallel()

如:

jieba 分词_第6张图片

  5.获取出现频率Top n的词(有些词无实际意义,可筛选): Counter.most_common(num)

from collections import Counter
words_total=open('1',encoding='utf-8').read()
c = Counter(words_total).most_common(20)
print (c)

  6.使用用户字典提高分词准确性:

jieba分词器还有一个方便的地方是开发者可以指定自己的自定义词典,以便包含词库中没有的词,虽然jieba分词有新词识别能力,但是自行添加新词可以保证更高的正确率。

使用命令:

jieba.load_userdict(filename) # filename为自定义词典的路径。在使用的时候,词典的格式和jieba分词器本身的分词器中的词典格式必须保持一致,一个词占一行,每一行分成三部分,一部分为词语,一部分为词频,最后为词性(可以省略),用空格隔开。

jieba 分词_第7张图片

  7.关键词抽取: jieba.analyse,extract_tags   或者   jieba.analyse.textrank

jieba 分词_第8张图片

jieba 分词_第9张图片

 

 

github:https://github.com/fxsjy/jieba

参考:https://www.baidu.com/s?ie=UTF-8&wd=jieba%20posseg

你可能感兴趣的:(jieba)