专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
CMG国际时讯  ·  记者·世界 | “深海掘金” ... ·  7 小时前  
战略前沿技术  ·  印度2025年军事转型:重塑武装部队的5项关 ... ·  20 小时前  
中国兵器工业集团  ·  兵器工业集团党组召开2025年警示教育会 ·  昨天  
战略前沿技术  ·  美空军参谋长透露F-47 性能及可能服役时间 ·  5 天前  
51好读  ›  专栏  ›  爬虫俱乐部

Python案例-词频统计 ——给我一个机会,让我走进你的心

爬虫俱乐部  · 公众号  ·  · 2018-06-06 13:26

正文

请到「今天看啥」查看全文



import os path = "E:/财大/爬虫俱乐部/推文/python-词频统计/日记"
files= os.listdir(path)
for file in files:
with open(path+ "/" +file, 'r' ) as f:        l=f.read()        wc=wordcount(l)        print(file,wc)

程序运行的结果如下图:

似乎这一方法完成了基本的词频统计。但仔细观察,该方法统计出的最高词频很多都是没有意义的人称代词,助动词、介词以及空字符串,这并不是我们希望看到的结果。因此,我们需要进一步完善我们的词频统计。

引入停用词表

在这一部分,笔者尝试根据本道题目的需求构建了一个简单的停用词表。停用词表的引入本质上还是建立一个词典,这个词典包括所有的停用词,这里,我们使用.fromkeys()方法创建一个新词典,字典的每个键都是自建停用词表的每一行的单词。我们来看看引入停用词表后,我们的输出结果会有怎样的变化,程序如下~:

首先,我们还是先构建一个词频统计函数wordcount(),其构建方法和第1部分的基本一致,只是在词典new_dict的构建中排除了停用词,这里不再赘述:第二步,接下来,我们通过构建停用词字典stopwords来引入停用词表:

##引入停用词表
import os stopwords = {}.fromkeys(line.strip() for line in open('E:/财大/爬虫俱乐部/推文/python-词频统计/英文停用词表.txt'))

构建好词频统计的函数之后,我们对指定目录下的所有文档分别进行词频统计,程序与第1部分一致。程序运行后的结果如下图:

加权词频统计

Ps.这一部分要前排感谢爬虫俱乐部前端Snowman的友情技术指导~

接下来进入正题:

虽然停用词表可以排除介词等内容,但并未体现每个单词的重要程度。基于TF-IDF思想,如果某个词在一篇文章中出现的频率(TF)高,但在一个文件集中出现的频率(IDF)较低,则这个词的重要程度较高。我们按照这一思想对我们的词频统计进行改进。

首先,构建词频统计函数wordcount_snow(str),其思路与第1-2节基本一致:

def wordcount_snow(strs):
    strlist=strs.replace(',',' ').replace('.',' ').replace('?',' ').replace('!',' ').replace('\n','').strip().lower().split(' '






请到「今天看啥」查看全文