Python实现词频统计
词频统计是自然语言处理的基本任务,针对一段句子、一篇文章或一组文章,统计文章中每个单词出现的次数,在此基础上发现文章的主题词、热词。
1. 单句的词频统计
思路:首先定义一个空字典my_dict
,然后遍历文章(或句子),针对每个单词判断是否在字典my_dict
的key
中,不存在就将该单词当作my_dict
的key
,并设置对应的value
值为1;若已存在,则将对应的value
值+1。
#统计单句中每个单词出现的次数
news = "Xi, also general secretary of the Communist Party of China (CPC) Central Committee and chairman of the Central Military Commission, made the remarks while attending a voluntary tree-planting activity in the Chinese capital's southern district of Daxing."
def couWord(news_list): ##定义计数函数 输入:句子的单词列表 输出:单词-次数 的字典my_dict = {} #空字典 来保存单词出现的次数for v in news_list:if my_dict.get(v):my_dict[v] += 1else:my_dict[v] = 1return my_dict
print(couWord(news.split ()))
输出
{‘Xi,’: 1, ‘also’: 1, ‘general’: 1, ‘secretary’: 1, ‘of’: 4, ‘the’: 4, ‘Communist’: 1, ‘Party’: 1, ‘China’: 1, ‘(CPC)’: 1, ‘Central’: 2, ‘Committee’: 1, ‘and’: 1, ‘chairman’: 1, ‘Military’: 1, ‘Commission,’: 1, ‘made’: 1, ‘remarks’: 1, ‘while’: 1, ‘attending’: 1, ‘a’: 1, ‘voluntary’: 1, ‘tree-planting’: 1, ‘activity’: 1, ‘in’: 1, ‘Chinese’: 1, “capital’s”: 1, ‘southern’: 1, ‘district’: 1, ‘Daxing.’: 1}
以上通过couWord
方法实现了词频的统计,但是存在以下两个问题。
(1)未去除stopword
输出结果中保护’also’、‘and’、'in’等stopword(停止词),停止词语与文章主题关系不大,需要在词频统计等各类处理中将其过滤掉。
(2)未根据出现次数进行排序
根据每个单词出现次数进行排序后,可以直观而有效的发现文章主题词或热词。
改进后的couWord函数如下:
def couWord(news_list,word_list,N):#输入 文章单词的列表 停止词列表 输出:Top N的单词my_dict = {} #空字典 来保存单词出现的次数for v in news_list:if (v not in word_list): # 判断是否在停止词列表中if my_dict.get(v):my_dict[v] += 1else:my_dict[v] = 1topWord = sorted(zip(my_dict.values(),my_dict.keys()),reverse=True)[:N] return topWord
加载英文停止词列表:
stopPath = r'Data/stopword.txt'
with open(stopPath,encoding = 'utf-8') as file:word_list = file.read().split() #通过read()返回一个字符串函数,再将其转换成列表
print(couWord(news.split(),word_list,5))
输出
[(2, ‘Central’), (1, ‘voluntary’), (1, ‘tree-planting’), (1, ‘southern’), (1, ‘secretary’)]
2. 文章的词频统计
(1)单篇文章词频统计
通过定义读取文章的函数,对其进行大小写转换等处理,形成输入文章的单词列表。
def readFile(filePath): #输入: 文件路径 输出:字符串列表with open(filePath,encoding = 'utf-8') as file:txt = file.read().lower() #返回一个字符串,都是小写myTxt = txt.split() #转换成列表 return myTxt
filePath = r'Data/news/1.txt'
new_list = readFile(filePath) #读取文件
print(couWord(new_list,word_list,5))
输出
[(17, ‘rights’), (14, ‘human’), (8, ‘united’), (7, ‘china’), (6, ‘resolution’)]
(2)多篇文章词频统计
需要使用os.listdir
方法读取文件夹下的文件列表,然后对文件逐一进行处理。
import os
folderPath = r'Data/news' #文件夹路径
tmpFile = os.listdir(folderPath)
allNews = []
for file in tmpFile: #读取文件newsfile = folderPath + '//' + file #拼接完整的文件路径 \\ 转义字符allNews += readFile(newsfile) #把所有的字符串列表拼接到allText中print(couWord(allNews,word_list,5))
输出
[(465, ‘china’), (323, ‘chinese’), (227, ‘xi’), (196, “china’s”), (134, ‘global’)]
(3)中文文章的处理
对于中文文章的词频统计,首先要使用jieba
等分词器对文章进行分词,并且加载中文的停止词列表,再进行词频统计。
Python实现词频统计相关推荐
- python 英语词频统计软件_Python数据挖掘——文本分析
作者 | zhouyue65 来源 | 君泉计量 文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程. 一.语料库(Corpus) 语料库是我们要分析的所有文档的集合. ...
- Python英文词频统计(哈姆雷特)程序示例
今天继续给大家介绍Python相关知识,本文主要内容是Python英文词频统计程序示例,主要是对英文文本--<哈姆雷特>进行分词. 一.英文文本词频统计思路 想要对<哈姆雷特> ...
- python英文词频统计代码_python实现中文和英文的词频统计功能方法汇总
python的思维就是让我们用尽可能少的代码来解决问题.对于词频的统计,就代码层面而言,实现的方式也是有很多种的.之所以单独谈到统计词频这个问题,是因为它在统计和数据挖掘方面经常会用到,尤其是处理分类 ...
- python特定词频统计_词频统计方案与具体实现-elasticsearch、spark、python
方案一.基于ElasticSearch方式 方案二.基于Spark方式 方案三.基于Python方式 方案一.基于ElasticSearch方式 详见文章,里面列举了各种ElasticSearch的实 ...
- Python数据挖掘-词频统计-实现
词频:某个词在该文档中出现的内容 1.语料库搭建 import jieba jieba.load_userdict("D:\\Python\\Python数据挖掘\\Python数据挖掘实战 ...
- Python实现词频统计的两种方法
词频统计是指在文本中计算每个单词出现的次数,是文本处理中一个最基本的任务.在Python中,可以使用多种方法实现词频统计,包括使用字典.列表.Counter类等数据结构. 一.使用字典 其中,使用字典 ...
- python 小说词频统计_Python中文分词及词频统计
中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是同个含义,因此,中文分词相比英文 ...
- 【文本处理 词频统计】python 实现词频统计
自定义词频统计函数:wordcount # -*- encoding=utf-8 -*-import string import pandas as pdword_list=[] freq_list= ...
- python进行词频统计_如何利用Python进行文本词频统计
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 Python在自然语言处理这个方面,有其天然的优势: ...
- Python新闻联播词频统计
http://www.judymax.com/archives/1033 在本文中,我们将编写这样一个 Python 程序:从网络上抓取前一日<新闻联播>的文本稿,利用分词技术将它们拆散成 ...
最新文章
- java basicstroke_使用java.awt.BasicStroke动画化虚线
- 4G EPS 中建立 UE 和 MME 之间的 NAS(非接入服务)信令连接
- mysql定义外键_MySQL定义外键的方法
- 数字加字符串用,隔开
- Java中switch语句支持的类型
- mysql练习_创建库与列表、增加列表信息、列表查询(包含多列表查询)_月隐学python第23课
- 三角形一点到三边距离最小_初中数学:相似三角形以及重心、向量问题考点整理...
- Python利用matplotlib.animation和matplotlib.pyplot和ffmpeg录制动画并保存为MP4文件
- python并行for循环_Python并行执行for循环
- python画子图_Python使用add_subplot与subplot画子图操作示例
- php分解字符串_php怎么把字符串分解成字符
- teechart绘制实时曲线_关于PIII曲线
- 【实践】阿里妈妈流量反作弊算法实践
- 三菱伺服调试软件_【精品】三菱MR-J4系列伺服驱动器一键自整定操作流程
- ubuntu修改静态IP地址
- upc 6605 所罗门王的宝藏
- 这3个方法帮你终结拖延症,过轻快人生
- 【电源设计】11变压器在开关电源中的应用
- Failed to load module “canberra-gtk-module“
- 存储和虚拟化服务器的对接,储存虚拟化
热门文章
- Isolated and Exhausted:Attacking Operating Systems via Site Isolation in the Browser论文阅读笔记
- 一文讲透数据治理体系
- 结构体 计算平均成绩
- 一个IT从业者的课外读物
- php 正则匹配11位数字,php正则匹配数字
- 网购新条例是“打假”还是“打压”?
- java循环读取ftp服务器上面的文件
- less函数库(function)
- 分析一下西游记世界的地图
- html5 flask json文件读取,python – 使用d3和flask访问json文件很困难