任务说明:读取单个或多个文本内容(txt,word,pdf),对文章进行分词(中文),并统计每个词语出现的次数并按从大到小排序。同时通过停用词库排除停用词,并展示结果读取单个文本内容(txt,word,pdf),对文章进行分词(中文),并统计每个词语出现的次数并按从大到小排序。同时通过停用词库排除停用词。

需要掌握的知识:
(1)掌握自然语言分析的基本术语:词频,停用词
(2)jieba模块的使用
(3)collections模块Counter函数
(4)读取不同格式文本的方法

知识覆盖
(1)词频:指某一个给定的词语在该文件中出现的次数
停用词:停用词是指在信息检索中,对于结果或目的 无意义,无作用的词或词组。如‘的’,‘了’,‘是’等。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。
(2)jieba模块
Python中文分词组件
分词:
待分词的字符串可以是unicode或UTF-8字符串,GBK字符串。注意:不建议直接输入GBK字符串,可能会错误地解码成UTF-8

  1. jieba.cut ()方法接受三个输入参数:需要分词的字符串; cut_all参数用来控制是否采用全模式; HMM参数用来控制是否使用HMM模型
  2. jieba.cut_for_search() 方法接受两个参数:需要分词的字符串;是否使用HMM模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  3. jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
  4. jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
    更多详情及例子可参见:https://github.com/fxsjy/jieba

(3)读取不同格式文本的方法:
参见我的另一篇博客,嘿嘿:python读写不同格式文本方法

(4)词频统计:
jieba模块返回的是一个<class 'generator'>,我们可以把它理解成一个list对象,直接打印generator会得到一个地址,但对generator的处理会比list更快。
这里我们直接对使用jieba得到的generator对象使用
'空格'.join(generator对象) #将generator对象以空格连接生成一个新的字符串
这样我们就能得到一个以空格分割每个词语的字符串,可以通过自己定义词频统计函数或者使用collections库中的Counter函数就可以得到每个词的词频

对generator的详细说明建议参见廖雪峰python generator

(5)python词频排序方式:
我找到三种关于python排序的方式(都需要将数据做词频统计后并化为字典的形式),经过数据实验,其速度都差不多,大家可以按需使用,
1.python自带sorted函数
sorted函数的使用多,这里只介绍对字典和固定格式的排序

result=sorted(字典名.items(),key=lambda k:k[1],reverse=True)
#按照value值降序排列。reverse=True表示逆序。key=lambda k:k[1]表示需要用到参数key关键词,lambda是一个隐函数,是固定写法,k:k[1]表示利用第二个元素进行排序
#返回类型是列表里面嵌套元组

2.collections库Counter函数

import collections
sorted_words_dict = collections.Counter(字典名)   #统计词频
result = sorted_words_dict.most_common(100)        #前100出现频率最高的元素以及他们的次数,返回类型是列表里面嵌套元组

3.pythom堆排序模块heapq

import heapq
result=heapq.nlargest(100,字典名.items(),key=lambda k:k[1])   #返回前100出现频率最高的元素以及他们的次数,其余参数含义与sorted函数意义一致
#返回类型是列表里面嵌套元组

这几种排序方式在这里都只做简单介绍,建议重点掌握collections.Counter()相关的使用即可

代码及结果展示:
环境:我们将读取python文件同目录下的text.txt文本,对其进行分词(中文),并统计每个词语出现的次数并按从大到小排序。同时通过同目录下停用词库stop.txt排除停用词。
text.txt中的内容:

停用词库stop.txt中内容:

只需要与以上格式一致即可。

import jieba
import os
import collections
import heapq    #堆排序模块def count_word(classstr):    #自定义词频统计函数,接收参数str,返回词频字典result={}for word in classstr.split():if word not in result:result[word]=0result[word]+=1return resultdef delstopwordslist(classsstr):  #去掉str中与stop.txt中相同的词,接收参数str,返回strstopwords = [line.strip() for line in open('stop.txt', encoding='UTF-8').readlines()]outstr = ''.join([word for word in classsstr if word not in stopwords])return outstrif __name__ == '__main__':with open('text.txt', 'r',encoding='UTF-8')as f:  #读取text.txt文本中的内容fullText=f.read().strip()   #.read()表示全部读取,.strip()表示去除每一句开头和结尾的空格和换行符fullText=delstopwordslist(fullText)  #调用去停用词函数seg_list = jieba.cut(fullText)  sorted_words_dict = collections.Counter(seg_list) #利用Counter()函数进行词频统计#sorted_words_dict =count_word(' '.join(seg_list))   #利用自定义词频统计函数result=sorted_words_dict.most_common(100)  #利用Counter()返回对象的.most_common()方法获取排序后的列表#result=sorted(sorted_words_dict.items(),key=lambda k:k[1],reverse=True)  #sorted方式进行排序#result=heapq.nlargest(100,sorted_words_dict.items(),key=lambda k:k[1])  #heapq方式进行排序print(result)

运行结果:

单文本分析--词频统计相关推荐

  1. 01文本分析---词频统计(基于jieba分词)

    基于jiba库分词默认模式分词 一.效果: 1.输出分词和从0开始的一一映射文件 2.输出词频统计文件 3.输出分词文件 二.功能: 1.分词 2.词频统计 3.进行了简单的同义词合并 三.说明: 1 ...

  2. 【编译原理】Python实现对一个英文文本的词频统计

    利用Python实现对一个英文文本的词频统计.文本链接:https://www.philippinetimes.com/news/257886068/australia-blocks-chinese- ...

  3. 【文本处理 词频统计】python 实现词频统计

    自定义词频统计函数:wordcount # -*- encoding=utf-8 -*-import string import pandas as pdword_list=[] freq_list= ...

  4. java 分词词频_利用word分词来对文本进行词频统计

    标签: 命令行脚本的调用方法如下: 将需要统计词频的文本写入文件:text.txt chmod +x wfs.sh & wfs.sh -textFile=text.txt -statistic ...

  5. python文本txt词频统计_python实例:三国演义TXT文本词频分析

    0x00 前言 找不到要写什么东西了!今天有个潭州大牛讲师  说了个  文本词频分析 我基本上就照抄了一遍 中间遇到一些小小的问题 自我百度 填坑补全了  如下 : 效果演示 0x01   准备环境及 ...

  6. 【Python】对英文文本进行词频统计(分词、字典排序、文件读写)

    准备知识 1.python读取文件 推荐链接:Python读写txt文本文件 不想细究,直接上手的读取文件参考代码 #默认文件位置为当前python代码的路径(相对路径) #输出文件应为字符串类型 f ...

  7. c语言统计英文字母频率,C语言实现英文文本词频统计

    这几天写了一个基于C语言对文本词频进行统计的程序,开发及调试环境:mac集成开发环境Xcode:测试文本,马丁.路德金的<I have a dream>原文演讲稿. 主要运行步骤: 1. ...

  8. Python—— 组合数据类型(模块5: jieba库的使用)(实例:基本统计值计算文本词频统计)

    前言 本篇主要介绍组合数据类型,以基本统计值计算为例,介绍函数使用和各种类型定义.以文本词频统计为例,介绍Jieba库的使用. (从本篇开始,出现的一些库中函数介绍以及部分简单代码都将以图片形式呈现) ...

  9. Python实例--文本词频统计

    最近在MOOC跟着北京理工大学的嵩天老师学习Python(https://www.icourse163.org/learn/BIT-268001?tid=1003243006#/learn/annou ...

最新文章

  1. 设置树莓派的无线网卡为监听模式(monitor)
  2. CentOS6.5 安装 ntopng
  3. git fetch和git pull的区别_Git实战(实验楼)学习笔记 实验2 基本用法(下)
  4. arcgis api for js图层显示控制
  5. python turtle库setpos_Python:使用mathturtle库绘制切线图
  6. Java并发容器J.U.C
  7. 多并发编程基础 之进程 Process
  8. Win Server 8中的利器:微软在线备份服务
  9. java卡 apdu_将applet安装到java卡的APDU命令的顺序是什么?
  10. 关于PC上的护眼大师这个软件
  11. 实现导出excel,pdf功能
  12. 谈一谈凑单页的那些优雅设计
  13. SpringBoot框架的环境搭建与使用
  14. python-gif图生成
  15. 红利源头指向shopee市场,虾 扑 软件起到哪些重要作用呢?
  16. Python Numpy random.chisquare() 卡方分布
  17. Sequoia(基于JDBC的数据库集群中间件)用户手册
  18. java longlong_java Long long | 学步园
  19. 预期与实际运行结果的对比
  20. Nature:肠道微生物异常为何会导致肝病?

热门文章

  1. 母(父)爱是一把双刃剑
  2. 80老翁谈人生(6):一生追梦的历程
  3. 人工智能对我们的影响是什么?
  4. 千锋教育实训day02————java
  5. DNSPod十问沈添:低代码将让程序员集体失业?
  6. TP6------邮箱验证码发送邮件
  7. #Reading Paper# SASRec:Self-Attentive Sequential Recommendation
  8. linux中如何搭建本地软件仓库
  9. R语言制作自己的R包,详细过程
  10. 微信php页面你画我猜,微信你画我猜全部题目答案大全