jieba分词使用报告

关键词:windows平台下jieba安装、三种模式比较、自定义词典、停用词语料、词频统计、词云生成


jieba简介

Jieba是一个中文分词组件,可用于中文句子/词性分割、词性标注、未登录词识别,支持用户词典等功能。能较好实现中文分词,同时支持繁体分词


windows平台上安装jieba组件

  • 下载Jieba   
    官网地址:http://pypi.python.org/pypi/jieba/
  • 将其解压到自定义路径,如图所示:


    文件内容图示
  • 使用Doc命令进入jieba所在的文件目录
  • 键入命令:python setup.py install
    运行后图示

    此时jieba组件已将安装完成了

三种分词模式及比较

  1. 精确模式,试图将句子最精确地切开,适合文本分析;
  2. 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义,存在过度切分的问题;
  3. 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
    代码示例:
from os_file import Readfile
import jieba```

```text = "他是一名本科生,也是信息管理与信息系统的一个学生")```

```seg_list = jieba.cut(text, cut_all = True)
print( "Full Mode:\n" + '/' .join(seg_list))   #全模式```

```seg_list = jieba.cut(text, cut_all = False)
print('Default Mode:\n' + '/' .join(seg_list))   #精确模式```

```seg_list = jieba.cut_for_search(text)   #搜索引擎模式
print('Research Mode:\n' + '/'.join(seg_list))```
结果页:
```Full Mode:
他/是/一名/本科/本科生/也/是/信息/信息管理/管理/与/信息/信息系统/系统/的/一个/学生
Default Mode:
他/是/一名/本科生/也/是/信息管理/与/信息系统/的/一个/学生
Research Mode:
他/是/一名/本科/本科生/也/是/信息/管理/信息管理/与/信息/系统/信息系统/的/一个/学生```

粗略的看法:正则分区中英文,根据tire树使用有向无环图得到所有分词,通过动态规划得出最优解,使用HMM解析未登录新词(形成估计链最大概率的估计值)

**原理**:
* [jieba 源码解析][1]
[1]:http://midday.me/article/003023dc3f814bc493b37c50b2a9ee71
* [一文搞懂HMM(隐马尔可夫模型)][2]
[2]:http://www.niubua.com/2015/07/16/%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82hmm%EF%BC%88%E9%9A%90%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E6%A8%A1%E5%9E%8B%EF%BC%89/
***************
#### 两种方式修改分词方式
* 在线更改词语词频以达到词语切分的目的
代码示例:
```# -*- coding: utf-8 -*-```

```from __future__ import print_function, unicode_literals
import jieba```


```test = "吴国忠臣伍子胥"
print("/".join(jieba.cut(test)))
print(jieba.get_FREQ("吴国忠"))
print(jieba.get_FREQ("臣"))
print(jieba.get_FREQ("吴国"))
print(jieba.get_FREQ("忠臣"))
jieba.add_word('忠臣',456) #更改忠臣词频为456
print("/".join(jieba.cut(test)))```
结果页:
```C:\Python27\python.exe C:/Users/Administrator/Desktop/change_freq.py
Building prefix dict from the default dictionary ...
Loading model from cache c:\users\admini~1\appdata\local\temp\jieba.cache
Loading model cost 1.015 seconds.
Prefix dict has been built succesfully.
吴国忠/臣/伍子胥
14
5666
174
316
吴国/忠臣/伍子胥```

```Process finished with exit code 0```
上面可以看出,在未更改词频前,分词结果```吴国忠/臣/伍子胥```是不正确的,但为什么得到的是这样的结果呢?这里我们通过.get_FREQ(str)函数获取各个词语的词频,这里存在**「P(吴国忠) 乘P(臣) > P(吴国) 乘P(忠臣)」(14乘5666>174乘316)的情形,所以默认选择第一种分词形式,那么要改变这种情况就必须使后者大于前者,这里我们调整“忠臣”一词的词频,即改数大于14乘5666除以174。**
当然,这种写法仅仅对当前文件有效。
* 自定义词库达到更改默认分词的目的

代码示例:
```# -*- coding: utf-8 -*-
import jieba
test = "江州市长江大桥参加了长江大桥的通车仪式"
test = "/".join(jieba.cut(test))
print(test)```
结果页:
江州/市/长江大桥/参加/了/长江大桥/的/通车/仪式

加入字典后:
```# -*- coding: utf-8 -*-
import jieba
jieba.load_userdict('./self_dict.txt')
test = "江州市长江大桥参加了长江大桥的通车仪式"
test = "/".join(jieba.cut(test, HMM = False))
print(test)```
结果页:
江州/市长/江大桥/参加/了/长江大桥/的/通车/仪式
这里我们在**同一目录下自定义字典self_dict.txt,采用词语+词频的方式,对你想要划分的词赋较大的值,同时使用.load_userdict()函数实现对定义的词库进行载入**。
![自定义字典图示](http://upload-images.jianshu.io/upload_images/5871947-8dbe99bd0887f4d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
************
#### 词频统计与关键词提取
因为之后代码涉及对文件的读操作,这里先建立文件读取类:
代码示例:
```# -*- coding: utf-8 -*-
import os
class Readfile:
    def __init__(self, filename):
        self.filename = filename
    def get_text_file(self, filename):
        if not os.path.exists(filename):
            print("ERROR: file not exit: %s" % (filename))
            return None
        if not os.path.isfile(filename):
            print("ERROR: %s not a filename." % (filename))
            return None
        f = open(filename, 'r')
        content = f.read()
        f.close()
        return content```

关键词提取与词频:
代码示例:
```# -*- coding: utf-8 -*-
from jieba import analyse #导入统计分析必要的包
from os_file import Readfile #导入对文件操作的类
emp1 = Readfile("./word.txt") #类的实例化
text = emp1.get_text_file("./word.txt")
findWord = analyse.extract_tags(text, topK=5, withWeight=True) #topK定义权重前5,默认值为20
for wd, weight in findWord: #分别为关键词,权重
    print int(weight*10),wd #int(weight*10)使生成的数为整数,根据你的词总数可作调整```
word.txt内容:

![word.txt内容图示](http://upload-images.jianshu.io/upload_images/5871947-ee55d10a5653be99.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

结果页:
12 隔壁家
10 红太狼
9 雷锋
8 勤劳
7 朴实
>关键词说明:用统计学语言表达,就是在词频的基础上,要对每个词分配一个"重要性"权重。最常见的词("的"、"是"、"在")给予最小的权重,较常见的词("中国")给予较小的权重,较少见的词("蜜蜂"、"养殖")给予较大的权重。这个权重叫做"逆文档频率"(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比。
知道了"词频"(TF)和"逆文档频率"(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。

**原理**:
*  [TF-IDF与余弦相似性的应用(一):自动提取关键词][3]
[3]:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
****************
#### 定义停用词典
定义停用词原因
代码示例:
```# -*- coding: utf-8 -*-
from jieba import analyse
from os_file import Readfile
analyse.set_stop_words("stop_words.txt") #载入停用词表(上例加入该句)
emp1 = Readfile("./word.txt")
text = emp1.get_text_file("./word.txt")
findWord = analyse.extract_tags(text, topK=10, withWeight=True)
for wd, weight in findWord:
    print int(weight*10),wd```

stop_words.txt内容:(注意必须从第二行开始)

![stop_words.txt内容图示](http://upload-images.jianshu.io/upload_images/5871947-fa9fda83d8e7c3de.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


结果页:
13 隔壁家
11 红太狼
8 勤劳
8 朴实
8 善良

******************
#### 对分词进行综合运用(以《红楼梦》为例)
准备阶段:
* 准备《红楼梦》原文txt格式小说
* 准备较齐全的中文停用词词库
* 准备《红楼梦》语意库,推荐搜狗的《红楼梦》专用语句块,这里涉及文件转码,请自行百度,同时词频不宜过高,因为类似句组成词本身词频也不高。
代码示例:
```# -*- coding: utf-8 -*-
from os_file import Readfile
import jieba
import codecs
from jieba import analyse
analyse.set_stop_words("stop_words.data")
jieba.load_userdict('./hlmck.txt')
emp1 = Readfile("./hlm.txt")
text = emp1.get_text_file("./hlm.txt")
seg_list = jieba.cut(text, cut_all = False)
sentence = '/' .join(seg_list)
print('Default Mode:\n' + sentence)   #精确模式
f = codecs.open('./4.txt','w','utf-8') #将结果写入文件
f.write(sentence)
f.close()
findWord = analyse.extract_tags(text, topK=200, withWeight=True)#生成前200的关键字与词频
for wd, weight in findWord:
    print int(weight*1000),wd```
关键词部分结果:
145 宝玉
57 凤姐
56 贾母
55 黛玉
50 袭人
41 王夫人
38 老太太
35 宝钗
33 太太
32 贾琏
31 姑娘
31 奶奶
28 平儿
28 众人
27 说道
24 李纨
23 丫头
22 贾政
22 自然
21 紫鹃
20 薛姨妈
20 探春
这里我们发现依旧有一些量词,连词,需要你自己对停用词字典再调整,逐步完善。

生成词云:
* 这里借助https://timdream.org/wordcloud2.js/# 在线词云生成工具(注意调节你的词频大小)
![词云图示](http://upload-images.jianshu.io/upload_images/5871947-3d06cea669baaca2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
________
#### 超级注意事项
* 因为涉及到文件的读写,总会碰到中文编码乱码问题,这里我们使用EditPlus编辑器对所有要进行操作的txt文件统一更改为UTF-8格式,去除windows生成记事本时的[BOM][4]头文件,这里可以少走很多弯路。
[4]:http://baike.baidu.com/item/BOM/2790364
![image.png](http://upload-images.jianshu.io/upload_images/5871947-daece5fbda300eff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,724评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,104评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,142评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,086评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,076评论 5 370
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,914评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,220评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,871评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,318评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,834评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,951评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,574评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,162评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,162评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,383评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,349评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,652评论 2 343

推荐阅读更多精彩内容

  • 1.安装及入门介绍 推荐直接 pip install jieba 结巴中文分词涉及到的算法包括: (1)基于Tri...
    MiracleJQ阅读 13,233评论 0 5
  • 以下内容都是在工作中的一些小实践,代码部分是参考网上的已有的然后再自行根据情况修改过的。记载主要是想以后用的时候可...
    H2016阅读 2,488评论 0 7
  • 注:参考文档 一、在线词云图工具# (1)、使用### 在正式使用jieba分词之前,首先尝试用在线分词工具来将自...
    DearIreneLi阅读 6,002评论 1 8
  • 人活着的意义,存在意义?十万个为什么也解不开这个迷,人活在在迷雾之中。我不知道我为什么而来,也不知道我会因和而去,...
    青衫北月阅读 205评论 0 0
  • 38/100今日事件 1.整理督促泰国新产品的设计包装,尽快做到线上跟进,秀米推广, 2.整理1月份账目,负团结清...
    斯菲阅读 130评论 0 0