您的位置:首页 > 编程语言 > Python开发

Python简单文本分析朱自清写《匆匆》的情感状态

2019-01-19 10:57 771 查看
版权声明:转载请注明出处! https://blog.csdn.net/ddxygq/article/details/86549941

目录

1、jieba中文分词的三种常用模式

2、简单文本分析朱自清写《匆匆》的情感状态

分词结果

下面统计词频

分词是自然语言处理(NLP)中最底层、最基本的模块,分词精度的好坏将直接影响文本分析的结果。有好多大型的分词系统(比如北京理工大学张华平博士开发的中文分词系统:ICTCLAS,是一个很优秀的分词系统),这里介绍Python中使用的小巧、强大的jieba中文分词。

首先获得jieba包:

[code]C:\Users\26015> pip install jieba

下载后,就能加载使用了。

1、jieba中文分词的三种常用模式

(1) 精确模式:试图将句子最精确地切开,适合文本分析;

(2) 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义问题;

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

注:同时结巴分词支持繁体分词和自定义字典方法。

首先需要导入模块:import jieba

(1)、精确模式

[code]>>> test = '小天于2014年毕业于北京大学'
>>> cut1 = jie.cut(test)

>>> cut1 = jieba.cut(test)
>>> type(cut1)
<class 'generator'>
>>> print('精确模式分词结果:',' '.join(cut1))

精确模式分词结果:小天于 2014 年 毕业 于 北京大学

这里的' '.join()函数指用空格分开cut1里面的元素,是个字符串连接函数。

举个小小的例子予以说明;

[code]>>> a1 = 'abc'
>>> a2 = 'def'
>>> '/'.join(a1+a2)
'a/b/c/d/e/f'

如果加一个参数cut_all = False

[code]>>> cut1 = jieba.cut(test,cut_all = False)
>>> print(' '.join(cut1))

小天于 2014 年 毕业 于 北京大学

可以看出cut_all = False这个参数加与没加都一样,它是个默认参数。

(2)、全模式

[code]>>> cut1 = jieba.cut(test,cut_all = True)
>>> print('全模式分词结果:',' '.join(cut1))

全模式分词结果: 小 天 于 2014 年 毕业 于 北京 北京大学 大学

显然,全模式不管分词后意思会不会有歧义,只管快速分出所有可能的词,不适合做文本分析。

(3)、搜索引擎模式

[code]>>> cut1 = jieba.cut_for_search(test)
>>> print('搜索引擎模式分词结果:',' '.join(cut1))

搜索引擎模式分词结果: 小天于 2014 年 毕业 于 北京 大学 北京大学

搜索引擎模式也会给出所有可能的分词结果,但是搜索引擎模式对于词典中不存在的词,比如一些很少见、新词,却能给出正确的分词结果。

2、简单文本分析朱自清写《匆匆》的情感状态

这是网上下载的《匆匆》原文:

由于Python不像R语言那样强大的可视化功能,R中还能画个词云什么的。所以,这里对《匆匆》里面每段话统计词频,取每段话词频最高的前五个词。导入必要的分次及词频统计包:

[code]import jieba
import jieba.analyse

发现开始时候将朱自清这个大作家分开了,应该是一个完整的人名词。就要加入自定义词典:自己新建一个add_dict.txt文档,里面写上朱自清即可。以后遇到类似需要人工加词典,只需要每行放一个词即可。

注意:add_dict.txt默认ANSI编码,需要另存为utf-8编码格式;

[code]import jieba
import jieba.analyse
path1 = 'D:\\Program Files\\python\\codes\\匆匆.txt'
#添加自定义词典,解决默认词典没有特殊词的问题
path2 = 'D:\\Program Files\\python\\codes\\add_dict.txt'
jieba.load_userdict (path2)
a = open(path1,'r')
dat = a.readline()
while(dat):
   dat = jieba.cut(dat,cut_all = False)
   print('/'.join(dat))
   dat = a.readline()
a.close()

分词结果

 

下面统计词频

[code]import jieba
import jieba.analyse

path1 = 'D:\\Program Files\\python\\codes\\匆匆.txt'
#添加自定义词典,解决默认词典没有特殊词的问题
path2 = 'D:\\Program Files\\python\\codes\\add_dict.txt'
jieba.load_userdict (path2)
a = open(path1,'r')
dat = a.readline()
while(dat):
   #提取前topK = n个关键词
   tags = jieba.analyse.extract_tags(dat,topK = 5)
   print(' '.join(tags))
   dat = a.readline()

a.close()

分词并提取词语结果:

匆匆
朱自清
时候 一去不复返 杨柳 桃花 燕子
日子潸潸 里算 八千多 流里
过去 太阳 日子 叹息 匆匆
赤裸裸 痕迹 徘徊 匆匆 罢了
一去不复返 聪明 日子 为什么 告诉

给我们反映的信息就是:

日子  过去  一去不复返  罢了

 

情感状态:

《匆匆》表达了作者对时间过去的感叹与无奈!

 

Python的jieba中文分词就简单介绍到这里,关于Python中基于jieba分词在文本分类中的应用会在后面慢慢介绍!每次学习一点点,学的轻松,写的轻松!

我的个人博客网站

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: