一、jieba功能用法
1.cut函数用法
jieba.cut(s,cut_all=False,HMM=True) #参数s为字符串;cut_all参数用来控制是否采用全模式;HMM参数为隐马尔科夫模型算法。
(注:HMM实际上是一个双重随机过程:底层是马尔科夫模型的概率状态转移过程,另一重是从底层状态到表面观察值的随机过程;实质就是隐藏了状态的马尔科夫模型,模型状态不能直接看见只能观察到由状态到符号的映射过程所产生的观察值序列。)
2.三种模式
2.1 全模式(以一个字为基准,筛选邻近并且可以组成词语的字进行组合显示)
示例:
import jieba
s="钓鱼要上岛上钓不上岛上钓不到"
seg_list=jieba.cut(s,cut_all=False) #cut_all=False表示全模式分词
print("Full Mode:","/".join(seg_list))
import jieba
s="钓鱼要上岛上钓不上岛上钓不到"
s1="钓鱼要上岛上钓,不上岛上钓不到"
seg_list,seg_list1=jieba.cut(s), jieba.cut(s1)#cut_all=True表示全模式分词;省略的话,默认为精准模式
print("Full Mode:","/".join(seg_list),"\nFull Mode1:","/".join(seg_list1))
import jieba
s="钓鱼要上岛上钓不上岛上钓不到"
seg_list=jieba.cut_for_search(s) #该模式适用于搜索引擎构建倒排序索引的分词
print("Full Mode:",",".join(seg_list))
分词结果:
3.拓展
jieba.cut和jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到每一个词语(Unicode),也可以用list(jieba,cut(s))转换为列表,当然还可以用集合的唯一性去除重复的词语set(jieba.cut(s)).
import jieba
s="钓鱼要上岛上钓不上岛上钓不到"
seg_list=jieba.cut_for_search(s)
for i in seg_list: #遍历
print(i,end=',')
a=set(jieba.cut_for_search(s)) #seg_list只能迭代一次;若该为set(seg_list)将得不到集合
print("\n",a)
二、词频统计
1.示例(筛选前:存在像‘的’、‘是’以及标点符号等无意义的符号):
import jieba
from collections import Counter
txt=open(r'C:\Users\jl\Desktop\人工智能的定义详解.txt').read() #读取文件
seg_list=jieba.cut(txt) #进行分词
for i in Counter(seg_list).most_common(10): #筛选分词后词频前10名;10的位置为可修改参数
print(i,end="\n")
import jieba
import matplotlib.pyplot as plt
from collections import Counter
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] #横坐标用中文显示
txt=open(r'C:\Users\jl\Desktop\人工智能的定义详解.txt').read() #读取文件
seg_list=[x for x in jieba.cut(txt) if len(x)>=2] #利用列表推导式,进行分词
lists=Counter(seg_list).most_common(10)#筛选分词后词频前10名;10的位置为可修改参数
String_x,Number_y=[],[]
for i in range(10):
String_x.append(lists[i][0])
Number_y.append(lists[i][1])
plt.bar(String_x,Number_y)
plt.show()
三、添加新词
jieba的词库里一般都是些常用到的词语。但有些情况需要统计某些专有名词,像地名、人名等,这时就用到了jieba的load_userdict()函数。
1.利用原结巴库分词的结果
import jieba
txt="公孙建军和上官建国是同一所大学的好朋友" #公孙建军和上官建国是人名
print('/'.join(jieba.cut(txt)))
从运行结果可以看出,果然将两个人名分开了,于是要创建自定义词典。
2. 利用分词词典
2.1 命令格式为:
jieba.load_userdict(file_name)
2.2 file_name为文件类对象或自定义词典的的路径;
2.3 词典格式:一个词占一行;每一行分为词语、词频(可省略)、词性(可省略)三部分,用空格分开,顺序不能颠倒。