NLTK 词频统计(一) 词频统计,绘图,词性标注

原创 2017年07月29日 21:27:51

内容简介

  • 代码一,笔记简略版本
  • 代码二,词频统计与pandas集合,分词词性提取与词频统计结合

代码一

import FontCN_NLPtools as fts引用的是我自己写的一个类,是对我常用的一些方法的封装,code已经上传

# - * - coding: utf - 8 -*-
#
# 作者:田丰(FontTian)
# 创建时间:'2017/7/3'
# 邮箱:fonttian@Gmaill.com
# CSDN:http://blog.csdn.net/fontthrone
import sys

reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append("../")

import nltk
import FontCN_NLPtools as fts
# 解决乱码问题
import matplotlib as mpl

mpl.rcParams[u'font.sans-serif'] = [u'KaiTi']
mpl.rcParams[u'font.serif'] = [u'KaiTi']

# mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串

text_path = 'txt/lztest.txt'  # 设置要分析的文本路径
stopwords_path = 'stopwords\CNENstopwords.txt'  # 停用词词表

fontsTools = fts.FontCN_NLPtools(textPath=text_path, stopwordsPath=stopwords_path)
fontsTools.addUserWords([u'路明非'])

tokenstr = nltk.word_tokenize(fontsTools.getText(isAddWord=True))
# 全文总词数

print u"词汇表 :",
for item in tokenstr:
    print item,

print

print u"词总数 :",
print len(tokenstr)
# 共出现多少词
print u"共出现词数 :",
print len(set(tokenstr))
# 词汇条目排序表
print u"词汇条目排序表 :"
for word in sorted(set(tokenstr)):
    print word,
print

# 每个词平均使用次数
print u"每个词平均使用次数:",
print float(len(tokenstr)) / float(len(set(tokenstr)))
# 统计词频
fdist1 = nltk.FreqDist(tokenstr)
for key, val in sorted(fdist1.iteritems()):
    print key, val,
print
print u".........路明非出现次数..............."
print fdist1[u'路明非']

print
print u".........李嘉图出现次数..............."
print fdist1[u'李嘉图']

# 统计出现最多的前5个词
print
print u".........统计出现最多的前10个词..............."
fdist1 = nltk.FreqDist(tokenstr)
for key, val in sorted(fdist1.iteritems(), key=lambda x: (x[1], x[0]), reverse=True)[:10]:
    print key, val

# 前10个高频词的累积频率分布图
print u'...............前10个高频词的累积频率分布图...............'
fdist1.plot(10, cumulative=True)

演示效果
累积频率分布图

代码二,与pandas结合,生成统计柱形图,以及词性标注与词频统计的结合

pandas是一个好用的工具,我们可以直接将前面计算好的输入pandas绘图(当然pandas能做到的,matplotlib都能做到),之所以拿的这样一个例子是因为前段时间一个项目的demo这样用过,所以拿来举例,你也可以直接用matplotlib进行绘图.

# - * - coding: utf - 8 -*-
#
# 作者:田丰(FontTian)
# 创建时间:'2017/7/12'
# 邮箱:fonttian@Gmaill.com
# CSDN:http://blog.csdn.net/fontthrone
import sys
import matplotlib.pyplot as plt
import FontCN_NLPtools as fts
import nltk
import pandas as pd

# 解决matplotlib 与 pandas 的乱码问题
# 详情请看 http://blog.csdn.net/fontthrone/article/details/75042659
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
# mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
import seaborn as sns

sns.set_style("darkgrid", {"font.sans-serif": ['KaiTi', 'Arial']})

reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append("../")

text_path = u'txt/lztest.txt'  # 设置要分析的文本路径
stopwords_path = u'stopwords\CNENstopwords.txt'  # 停用词词表

fontsTools = fts.FontCN_NLPtools(textPath=text_path, stopwordsPath=stopwords_path)

print
fontsTools.addUserWords([u'路明非'])
lztext = fontsTools.getText(isAddWord=True)

tokenstr = nltk.word_tokenize(lztext)
fdist1 = nltk.FreqDist(tokenstr)

listkey = []
listval = []

print u".........统计出现最多的前30个词..............."
for key, val in sorted(fdist1.iteritems(), key=lambda x: (x[1], x[0]), reverse=True)[:30]:
    listkey.append(key)
    listval.append(val)
    print key, val, u' ',

df = pd.DataFrame(listval, columns=[u'次数'])
df.index = listkey
df.plot(kind='bar')
plt.title(u'关于龙族一的词频统计')
plt.show()

posstr = fontsTools.jiebaCutStrpos(NewText=lztext)
strtag = [nltk.tag.str2tuple(word) for word in posstr.split()]

cutTextList = []
for word, tag in strtag:
    # 获取动词,在jieba采取和NLPIR兼容的的词性标注,对应关系我会贴在最后
    if tag[0] == "V":
        cutTextList.append(word)

tokenstr = nltk.word_tokenize(" ".join(cutTextList))

fdist1 = nltk.FreqDist(tokenstr)

listkey = []
listval = []

print
print u".........统计出现最多的前30个动词..............."
for key, val in sorted(fdist1.iteritems(), key=lambda x: (x[1], x[0]), reverse=True)[:30]:
    listkey.append(key)
    listval.append(val)
    print key, val, u' ',

df = pd.DataFrame(listval, columns=[u'次数'])
df.index = listkey
df.plot(kind='bar')
plt.title(u'关于龙族一中动词的词频统计')
plt.show()

龙族中所有词汇的统计

龙族一中动词的词频统计

版权声明:转载请标明出处:http://blog.csdn.net/fontthrone

相关文章推荐

使用Python+NLTK实现英文单词词频统计

使用Python+NLTK实现英文单词词频统计使用PythonNLTK实现英文单词词频统计 应用场景 Fork Me 参考运行环境 流程步骤图 详细步骤 读取文件 过滤特殊符号以及还原常见缩写单词 分...
  • heykid
  • heykid
  • 2017-03-16 15:42
  • 1929

nltk(2)——频率分布&词操作

频率分布 函数FreqDist 函数FreqDist方法获取在文本中每个出现的标识符的频率分布。通常情况下,函数得到的是每个标识符出现的次数与标识符的map映射 标识符 出现次...

Python 3.6 利用NLTK 统计多个文本中的词频

#!/usr/bin/env python # encoding: utf-8""" @author: wg @software: PyCharm @file: word_frequency_stat...

词频统计包----nltk

来自 python自然语言处理

自己动手写word2vec (二):统计词频

在我之前写的word2vec的大概流程中,第一步的分词使用jieba来实现,感觉效果还不错。第二步. 统计词频统计词频,相对来讲比较简单一些,主要在Python自带的Counter类基础上稍作改进。值...

Python分词并进行词频统计

strs='1、大专以上学历,年龄在18-28岁之间;2、计算机相关专业、自动化、测控、生仪、机电、数学、物理等等理工科专业优先;' \ '3、热爱软件开发事业、有较强的逻辑思维能力,对IT...

NLTK学习之一:简单文本分析

nltk的全称是natural language toolkit,是一套基于python的自然语言处理工具集。1 NLTK的安装nltk的安装十分便捷,只需要pip就可以。pip install nl...
  • zzulp
  • zzulp
  • 2017-08-13 21:09
  • 1289

中文分词与词频统计实例

中文分词与词频统计实例

python jieba分词并统计词频后输出结果到Excel和txt文档

前两天,班上同学写论文,需要将很多篇论文题目按照中文的习惯分词并统计每个词出现的频率。 让我帮她实现这个功能,我在网上查了之后发现jieba这个库还挺不错的。具体代码如下。 #!/usr/bin/py...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)