> 文档中心 > 【自然语言处理】-jieba库学习笔记(二)

【自然语言处理】-jieba库学习笔记(二)


jieba三种分词方法

精确模式

精确模式将句子最精确的切分开,每个词都只有一种含义。

import jiebaseg_list1=jieba.cut("人生最宝贵的是生命,人生最需要的是学习,人生最愉快的是工作,人生最重要的是友谊。",cut_all=False)print("Default Mode:"+"/".join(seg_list1))
Default Mode:人生//宝贵///生命//人生//需要///学习//人生//愉快///工作//人生//重要///友谊/

全模式

全模式把句子中所有的可以成词的词语都扫描出来, 会出现一词多用、一词多意。

seg_list2=jieba.cut("我来自长沙某高校,是一名平平无奇的大学一年级的好学生。",cut_all=True)print("Full Mode:"+"/".join(seg_list2))
Full Mode:/来自/长沙//高校///一名/平平/无奇//大学/一年/一年级/年级//好学/学生/

搜索引擎模式

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

seg_list3=jieba.cut_for_search("自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。")print("Search Mode:"+",".join(seg_list3))
Search Mode:自然,语言,自然语言,处理,,计算,算机,科学,计算机,计算机科学,领域,,人工,智能,人工智能,领域,,,一个,重要,方向,,,研究,,实现,,,计算,算机,计算机,之间,,自然,语言,自然语言,进行,有效,通信,,各种,理论,,方法,

添加自定义词典


于是我整理了一下四川方言锦集
自定义词典文件的词汇格式是一个词占一行,每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
四川方言

#不添加自定义词典seg_list4=jieba.cut("莫来头,反正你都开腔叫我老汉儿了,幺儿乖。莫摆龙门阵了,你假巴意思学一下,不然明天考试就洗白了。")print("/".join(seg_list4))#载入词典jieba.load_userdict("四川方言.txt")seg_list5=jieba.cut("莫来头,反正你都开腔叫我老汉儿了,幺儿乖。莫摆龙门阵了,你假巴意思学一下,不然明天考试就洗白了。")print("/".join(seg_list5))

效果差别

/来头//反正///开腔///老汉/////////摆龙门阵////假巴/意思//一下//不然/明天/考试//洗白//。莫来头//反正///开腔///老汉儿///幺儿////摆龙门阵////假巴意思//一下//不然/明天/考试//洗白//

词性标注

jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。

import jieba.posseg as psegwords=pseg.cut("我爱北京天安门")for word,flag in words:    print("%s %s"%(word,flag))
我 r爱 v北京 ns天安门 ns

并行分词

注意:输入参数只接受 unicode

#默认模式result = jieba.tokenize(u'好好学习天天向上')for tk in result:    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
word 好好学习 start: 0  end:4word 天天向上 start: 4  end:8
#搜索模式result = jieba.tokenize(u'好好学习天天向上', mode='search')for tk in result:    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
word 好好 start: 0  end:2word 好学 start: 1  end:3word 学习 start: 2  end:4word 好好学 start: 0  end:3word 好好学习 start: 0  end:4word 天天 start: 4  end:6word 向上 start: 6  end:8word 天天向上 start: 4  end:8

统计次数出现最多的词语

浪潮之巅介绍为例(也可以随便找一个文本文档)

# -*- coding: utf-8 -*-import jiebatxt = open("浪潮之巅.txt", "r", encoding='utf-8').read()words = jieba.lcut(txt)     # 使用精确模式对文本进行分词counts = {}     # 通过键值对的形式存储词语及其出现的次数for word in words:    if len(word) == 1:    # 单个词语不计算在内 continue    else: counts[word] = counts.get(word, 0) + 1    # 遍历所有词语,每出现一次其对应的值加 1items = list(counts.items())items.sort(key=lambda x: x[1], reverse=True)    # 根据词语出现的次数进行从大到小排序for i in range(3):    word, count = items[i]    print("{0:5}".format(word, count))

出现次数较多的词
出现次数较多的词