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
  • 2916

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

#!/usr/bin/env python # encoding: utf-8""" @author: wg @software: PyCharm @file: word_frequency_stat...
  • u011389474
  • u011389474
  • 2017年03月16日 14:04
  • 2787

词频统计包----nltk

来自 python自然语言处理
  • fennvde007
  • fennvde007
  • 2014年05月16日 21:19
  • 4079

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

频率分布 函数FreqDist 函数FreqDist方法获取在文本中每个出现的标识符的频率分布。通常情况下,函数得到的是每个标识符出现的次数与标识符的map映射 标识符 出现次...
  • wang735019
  • wang735019
  • 2016年12月29日 21:54
  • 1116

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

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

Python分词并进行词频统计

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

Python 对文本先按词频统计,若相同按字典排序,后取TopN

Python Code:def count_words(s, n): dic = {} words = s.split(" ") for word in words: ...
  • Anonymous_cx
  • Anonymous_cx
  • 2016年09月10日 16:16
  • 396

用python统计词频脚本

  • 2012年04月02日 17:23
  • 1KB
  • 下载

Python: NLTK几个入门函数

nltk的几个常用函数
  • u013652219
  • u013652219
  • 2015年09月28日 18:53
  • 2841

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

nltk的全称是natural language toolkit,是一套基于python的自然语言处理工具集。1 NLTK的安装nltk的安装十分便捷,只需要pip就可以。pip install nl...
  • zzulp
  • zzulp
  • 2017年08月13日 21:09
  • 4860
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NLTK 词频统计(一) 词频统计,绘图,词性标注
举报原因:
原因补充:

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