中文文本挖掘课程笔记之jieba分词(1)

来源:互联网 发布:c语言编程软件电脑版 编辑:程序博客网 时间:2024/05/18 01:32

        自然语言处理小白一枚,刚刚开始接触这一领域,记录下自己的课程笔记,便于以后查阅。积少成多,加油~

        学习了罗晨老师的中文文本挖掘课程对其中的jieba分词整理一下下。

一、jieba的安装与打开

        jieba是Python的一个分词库。首先要进行安装,键盘Windows+R --->输入cmd-->pip install jieba即可。

       安装Anaconda后,在程序中找到Anaconda下的Jupyter Notebook点击进入,如下图,此界面在jieba分词过程中不可关闭。打开此界面后,浏览器会自动转到jupyter界面。在浏览器打开的jupyter界面中进行分词程序的编辑。


jupyter界面如下图所示:点击右上角的new出现下拉菜单,点击Python root即可打开代码编辑页面。



二、结巴分词简单例程

      将所要分词的TXT文本和自定义词典直接拖拽到浏览器打开的jupyter的home页 点击upload即可将其加载进去。

      1、对TXT文本进行分词:

import jieba           #导入jieba
with open('text.txt','r')as f:    #打开所需分词文本text.txt
    for line in f:        
        seg=jieba.cut(line.strip(),cut_all = False)    #jieba分词
        print'/'.join(seg)    #其中join可以将分词结果变为列表格式。

结果如下:

/我/在/中国/传媒大学/学习/、/生活
王/领导/在/团建/之/日/发表/重要讲话
校园/里/有/一排/年轻/的/白杨/,/白杨/是/杨树/的/一个/种类
如果/放到/post/中将/出错
葫芦娃/有大娃/、/二娃/、/三娃/等
孙悟空/是/美猴王/,/也/是/孙行者/,/更是/泼/猴/,/后来/被/封为/斗/战胜/佛
孙行者/是/一个/和尚

        2、统计词频:

from collections import Counter  
total = []


with open('text.txt','r')as f:    
    for line in f:
        seg_list = jieba.lcut(line.strip(),cut_all = False) # jieba.lcut 可以直接输出列表。
        for word in seg_list:
            total.append(word)
            
c=Counter(total)        #这里一定要顶格写,否则就进入到上面的for循环里面,出错。
for item in c.most_common(5):      #数字5表示提取前5个高频词,可根据需要更改。
    print item[0],item[1]

结果如下:

是 4
, 4
、 3
的 2
有 2

       3、添加自定义词典

      词典为TXT文本,其格式:一个词一行,每行三部分:词语、词频(可省)、词性(可省)。其中每部分用空格分隔。其代码如下:

from collections import Counter
jieba.load_userdict('userdict.txt')    #核心jieba.load_userdict('name.txt')
with open('text.txt','r')as f:
    for line in f:
        seg_list = jieba.cut(line.strip(),cut_all = False)
        print'\'.join(seg_list)   #''里面的内容可以是任何符号,它放在分好的两个词之间用来分隔词。

      4、动态调整词典

      add_word(word,freq=None,tag=None)和del_word(word)可以在程序中动态修改词典(加词,或删词)。

      suggest_freq(segment,tune=True)可以调节每个单个词语的词频,使其能/不能被分出来。

例如:text.txt文本的第四行中“中将”被词典分为一个词,但其实“”和“”是分开的。但是词典里面也没有“中”和“将”,这时需要动态调整代码:

jieba.suggest_freq(('中','将'),tune=True)    #True表示希望分出来,False表示不希望分出来。

结果输出494,说明成功,可继续分词。

with open('text.txt','r')as f:
    for line in f:
        seg_list = jieba.cut(line.strip(),cut_all = False)
        print'/'.join(seg_list)

结果如下:“中”和“将”被分开:

/我/在/中国传媒大学/学习/、/生活
王/领导/在/团建/之/日/发表/重要讲话
校园/里/有/一排/年轻/的/白杨/,/白杨/是/杨树/的/一个/种类
如果/放到/post/中/将/出错
葫芦娃/有/大娃/、/二娃/、/三娃/等
孙悟空/是/美猴王/,/也/是/孙行者/,/更是/泼猴/,/后来/被/封为/斗战胜佛
孙行者/是/一个/和尚

      


------2016.8.31 23:10

 

0 0