中文分词库 jieba

2019-08-14 17:11:31 浏览数 (1)

使用 python 的 jieba库可以将中文句子分割成一个一个词语, 在机器学习中,可用于生成中文的词向量。我们可以使用 pip 免费安装 jieba 库。

jieba 有三种分词模式:

  • 精确模式

把文本精确的切分开,不存在冗余的词语。是最常用的模式。

  • 全模式

把文本中所有可能的词语都扫描出来,有冗余。

  • 搜索引擎模式

在精确模式的基础上,对长的词语再次切分,有冗余。

代码语言:javascript复制
import jieba
#lcut()函数返回一个列表类型的分词结果
>>> jieba.lcut("中国是一个伟大的国家") #精确模式.第一次调用时会创建初始的分词词库
Building prefix dict from the default dictionary ...
Loading model from cache c:Tempjieba.cache
Loading model cost 0.771 seconds.
Prefix dict has been built succesfully.
['中国', '是', '一个', '伟大', '的', '国家']
代码语言:javascript复制
>>> jieba.lcut("中国是一个伟大的国家", cut_all =True)#全模式
['中国', '国是', '一个', '伟大', '的', '国家']
#'中国', '国是' 有冗余:‘国’字重复
代码语言:javascript复制
>>> jieba.lcut_for_search("中华人民共和国是伟大的")#搜索引擎模式,有冗余,长词再次分割
['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']

我们还可以向jieba的分词词典加入自定义的词:

代码语言:javascript复制
>>> jieba.add_word("雨女无瓜")
>>> jieba.lcut("为何带面具?雨女无瓜")
['为何', '带', '面具', '?', '雨女无瓜']

也可以删除分词词典中的某个词语:

代码语言:javascript复制
>>> jieba.del_word("雨女无瓜")
>>> jieba.lcut("为何带面具?雨女无瓜")
['为何', '带', '面具', '?', '雨女', '无瓜']

下面的例子介绍了如何用结巴库统计《西游记》中各个词语出现的次数,看看谁是主要角色:

代码语言:javascript复制
#中文词频统计
import jieba
with open(r"e:西游记.txt", "r", encoding="utf-8") as f:
    txt = f.read()
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1: #忽略标点符号和其它长度为1的词
        continue
    else:
        counts[word] = counts.get(word, 0)  1
items = list(counts.items()) #字典转列表
items.sort(key = lambda x : x[1], reverse=True) #按词频降序排列
N=20
for i in range(N):# top N
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word, count))
from matplotlib import pyplot as plt
plt.bar(range(0, 2*N,2), [x[1] for x in items[:N]], tick_label = [x[0] for x in items[:N]])
plt.title("《西游记》词频统计 ntop 20", fontsize =18)
plt.show()

通过忽略一些虚词,合并一些同一角色的不同名字 可以对上述代码进行优化。

0 人点赞