最近突然对python感兴趣,就学了起来。我可怜的计算机基础只有VB,而且学的时候这门课还特别水,仅仅了解了语法,考试基本上是背题过的。

现在自学python还是比较吃力。今天捣鼓了一下午,搞出了一个词频统计的程序,敲了三四十行代码,还是十分有成就感。本着输出是为了更好的理解知识的初心,我来谈谈我是怎么写的,用的那些方法。毕竟是刚接触的小白,很有地方走了弯路,用的可能不是很好的方法,很多理解上或许有很多偏差。 不过没关系,有大佬指出我错误的地方,我会很感激的;若有同小白的受到了启发,我会很开心的。

先说说词频统计我是怎么想的,用到了什么方法?再谈谈我遇到的困难和展现的实际效果。最后放出我的代码

词频统计肯定是要对字符串进行处理。将英文的单词,中文的词语给拧出来,还要统计他们出现的次数,最后再做个排序,通常是从高到低。英文进行分词不需要用到第三方库,直接使用".spite()"方法进行处理就行了。中文的分词要用到“jieba(结巴)”库,再敲一行代码就可以了。

words = jieba.lcut(txt) #words 是分开的一个一个词的集合,txt是要分词的文本

等等,既然我有两种分词的方式,一个是对英文的,另一个是对中文的,而且要写在一个程序里面。我需要做一个分支结构,谁知道我某天要拿中文还是英文来做词频统计呢?于是我用if else 语句做了一个简单的分支。

print("1.英文单词词频统计。\n2.中文词语频率统计。")

option = input("请选择要进行的词频统计类型,填数字:")

if option == 1:

.........

else:

做到这里,该想想到底该怎么进行统计。我要打开一份文件,怎么打开呢?其实也不难不过我发现英文和中文还是不一样的。请看代码。

txt = open( s ,"r") #s表示文件所在的路径。“r”表示只读,当然还有其他模式

txt = open( s ,"r",encoding='utf-8') #后面多了一串是为了可以对中文进行分词,英文不用写

顺便就用一个变量 s(或者其他)作为一个输入值,这样我打包之后就可以对各种文本进行词频统计。不过我发现,这只能导入txt文件,doc,pdf不行。所以还得多一步新建一个记事本。

怎么统计词频,当然是使用字典键值一一对应。把分好的词导入到词典里,使用遍历循环,若有相同的词,后面的值就加一,岂不妙哉?方法明晰了,实现则对于我这个小白来说有些困难。就把分好的一堆词叫做words,word表示一个词,当然还要建立一个词典使用for in语句,从words中取出每一个word,并在词典里进行判断。若word在词典里,那太好了,后面的值加一,若不在,那么新建一个索引(或者项,术语我忘记了,懒得查了),默认值为1。这样就可以进行统计了。代码如下:

for word in words:

if word not in cidian:

cidian[word] = 1

else:

cidian[word] = cidian[word] + 1

接下来就是排序,根据词频将单词或词语排列出来。

为了方便先将词典转换为列表。然后列表有一个sort方法(说来惭愧,具体原理我不太清楚),可以按值的大小从小到大排(之所以这么说是因为“升序”“降序”我傻傻分不清),然后在翻转过来就可以了。代码如下:

items = list(cidian.items()) #cidian 是词典

items.sort(key=lambda x: x[1], reverse=True)

最后用range函数打印出来就可以了,打印多少由你来定。代码就不放了,想看的就放在最后了。

简单的运行了一下,发现问题还不少。比如英文中奇怪的标点符号,大小写问题等等,中文中一堆单个的词。那么就要把他们清除掉,使用replace,lower等等。做个if语句如果,中文单词只有一个那么就不要统计了,有些同义的词语可以“合并同类项”这些就是多写几个if分支的问题了。最后使用pyinstaller进行打包搞定。不过打包之后的exe文件竟然有200多m那么大,我简直懵逼了。也不清楚为啥,我也只用了jieba一个库呀。希望有大佬能够解答。不到40行的代码,却有200兆。

我对哈佛大学幸福课的文本进行了统计,效果如下。

效果还可以,但还可以进行优化,比如把那些连词去掉,还有“我们”“你们”等给去掉。不过也可以看出老师多次强调“自尊”“积极”“快乐”“成功”等词。

好了,今天所有要分享的内容都在这里了,希望对python感兴趣的朋友们点个赞,留个言,共同探讨学习。

最后附上全代码。

print("该程序可以进行词频统计。\n请注意选择中文词语或者英文单词。")

print("1.英文单词词频统计。\n2.中文词语频率统计。")

# noinspection PyUnresolvedReferences

import jieba

cidian = {}

k = 1

while k > 0:

option = input("请选择要进行的词频统计类型,填数字:")

wenben = input("注意文件路径格式。\n例如:E:\\python学习\\03实战演练\\文本.txt\n请输入文件路径:")

if option == 1:

txt = open(wenben, "r").read()

txt = txt.lower(txt)

for n in '.,?!':

txt = txt.replace(n," ")

words = txt.split()

for word in words:

if word not in cidian:

cidian[word] = 1

else:

cidian[word] = cidian[word] + 1

else:

txt = open(wenben, "r", encoding='utf-8').read()

words = jieba.lcut(txt)

for word in words:

if len(word) == 1:

continue

else:

if word not in cidian:

cidian[word] = 1

else:

cidian[word] = cidian[word] + 1

items = list(cidian.items())

items.sort(key=lambda x: x[1], reverse=True)

num = eval(input("你想显示前多少个最高单词/词语:"))

for i in range(num):

word, count = items[i]

print("{0:<10}{1:>5}".format(word, count))

python词频统计时、文件放哪里_初学python,词频统计小实验相关推荐

  1. python 写入网络视频文件很慢_用Python将数据写入LMDB非常慢

    Creating datasets for training with Caffe I both tried using HDF5 and LMDB. However, creating a LMDB ...

  2. python中提取pdf文件某些页_人工智能|Python提取PDF中的文本并朗读

    题前的话 之前有老师在群里推荐这个,我看了一眼觉得还是蛮有趣的,然后就忘了--昨天又看到这个<宅男福利!我50行Python代码让小姐姐给你读Pdf>,今天于是开始自己尝试,谁知道pdfp ...

  3. python按行读取文件取消空白行_在Python中读取文件时忽略空行的最简单方法

    我将堆栈生成器表达式:with open(filename) as f_in: lines = (line.rstrip() for line in f_in) # All lines includi ...

  4. python创建多个文件夹合并_在python中如何将多个文件夹合并到一个文件夹中?

    我需要将多个文件夹合并到一个文件夹中,并考虑到它们基于时间的顺序,为此我尝试了:import os import shutil DestFolder = 'C:\\Users\\user\\Folde ...

  5. Python语言学习之文件夹那些事:python和文件夹的使用方法之详细攻略

    Python语言学习之文件夹那些事:python和文件夹的使用方法之详细攻略 目录 Python与文件夹那些事 1.创建/删除文件/文件夹 1.创建文件夹

  6. 学python哪个app比较好_初学python编程,有哪些不错的软件值得一用?

    初学python编程,有哪些不错的软件值得一用? 萧楚故人 发表于 2020-7-17 00:17:55 只看该作者 只看大图 倒序浏览 阅读模式 10 19832 下载好向圈APP可以快速联系圈友 ...

  7. python运行后按任意键退出_实现python版本的按任意键继续/退出

    某天在群内有同学问到,在python下我用input或者raw_input都得输入完后回车才能获取到输入的值,那如何实现任意键退出暂停等功能呢,我当时也没有多想,因为接触python时间也不算长,主要 ...

  8. python中提取pdf文件某些页_付费?是不可能的!处理 PDF 只需几行代码,彻底解放双手!...

    在日常工作中,PDF (Portable Document Format的简称,意为"可携带文档格式") 是我们比较常用的电子文档格式.PDF文件以 PostScript 语言图象 ...

  9. python下载文件并改名_用 Python 给下载的 B 站视频文件批量改名

    有好几位网友私下里问我如何学习平面设计?我告诉他们:如果只想自学的话,可以先到"哔哩哔哩"网站(俗称 B 站)找视频教程看看.要是觉得哪个教程不错,还可以下载到电脑或手机上随时随地 ...

最新文章

  1. java package private,Java中的public,protected,package-private和private有什么区别?
  2. python什么时候进入中国-python什么时候发明的
  3. vs需要迁移_这可能是目前最全面的无服务器迁移实践
  4. Unicode、UTF-8、Big Endian、Little Endian、GBK、UCS-2
  5. linux moveto回收站,linux添加回收站(脚本)
  6. 算法——Java实现栈
  7. 软件开发过程与项目管理(9.软件项目配置管理计划)
  8. java调用WebService接口工具
  9. selenium模拟刷百度流量源码
  10. Oracleji数据库、实例、用户、表空间、表之间的关系
  11. 指针变量占用的内存空间大小说明
  12. jiaba库之关键词提取(增量更新自定义语料)
  13. html手机端自动全屏,HTML5在手机端实现视频全屏展示方法
  14. 38、EST序列拼接流程
  15. 移动手机网站的用户设计需求
  16. centos7.9安装了微信,但腾讯公司不允许在Linux里登录微信帐号,白搞了半天。也有可能是那个微信安装包的问题吧
  17. 以女大学生相亲为例,给你讲明白数据挖掘算法
  18. 【CSS】css变量
  19. 功能齐全的网址导航源码附带交易系统
  20. 超强的QQ聊天理论(这算得上是QQ类的资源强贴了,收藏吧)

热门文章

  1. High Tech?High Touch!
  2. BotVS配置托管者-基于新浪云
  3. 256 量子比特,QuEra这家创业公司再创新绩
  4. Dockerfile创建镜像
  5. [哈尔滨工业大学LabWindows_CVI]实验学习二:函数发生器 和 选做
  6. gogole 全球IP地址
  7. case when then 中的条件里面加上 and or 的写法
  8. virtualbox安装与卸载
  9. 正厚知识 | 游戏,是未来的科技领域?
  10. 【秒杀软件原理】Iphone抢购器、秒杀软件,原理适用于其他网络上的秒杀、抢购