python单词词频字典_Python字典使用--词频统计的GUI实现
字典是针对非序列集合而提供的一种数据类型,字典中的数据是无序排列的。
字典的操作
为字典增加一项
dict[key] = value
students = {"Z004":"John","T002":"Peter"}
students
Out[23]: {'T002': 'Peter', 'Z004': 'John'}
students["S007"] = "Susan"
students
Out[25]: {'S007': 'Susan', 'T002': 'Peter', 'Z004': 'John'}
访问字典中的值
dict[key] 返回key对应的值value
dict.get(key,default)--返回字典中key对应的值,若未找到key,则返回default值,default值可不写
删除字典中的一项
del dict[key]
字典的遍历
遍历字典的键key
for key in dict.keys():print(key)
遍历字典的值value
for value in dict.values():print(value)
遍历字典的项
for item in dict.items():print(item)
是否一个键在字典中
注:值不能判断
in 或者 not in
删除字典项目
dict.clear()--删除字典中的所有项目
dict.pop(key)--删除并返回字典中key对应的值
直接赋值、浅拷贝、深拷贝
直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
字典浅拷贝实例:
>>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
深度拷贝需要引入 copy 模块:
>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})
http://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
示例:词频统计
第一步:输入文章
第二步:建立用于词频计算的空字典
第三步:对文本的每一行计算词频,如果文章长度一般,则不需用一次读一行,一次便可读完。
第四步:从字典中获取数据对到列表中
第五步:对列表中的数据对交换位置,并从大到小进行排序
第六步:输出结果
下图所示为程序输出结果及输出的统计结果
汉字的词频统计、排除特定词集合的程序后续更新...
普通版本
def getText():
txt=open('hamlet.txt','r').read()
txt=txt.lower()
for ch in "~@#$%^&*()_-+=<>?/,.:;{}[]|\'""":
txt=txt.replace(ch,' ')
return txt
hamletTxt=getText()
words=hamletTxt.split()
counts={}
sumcount = 0
for word in words:
counts[word]=counts.get(word,0)+1
sumcount = sumcount + 1
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(10):
word,count=items[i]
print('{0:<10}{1:>5}'.format(word,count))
#将统计结果写入文本文件中
outfile = open('词频统计结果.txt', "w")
lines = []
lines.append('单词种类:'+str(len(items))+'\n')
lines.append('单词总数:'+str(sumcount)+'\n')
lines.append('词频排序如下:\n')
lines.append('word\tcounts\n')
s= ''
for i in range(len(items)):
s = '\t'.join([str(items[i][0]), str(items[i][1])])
s += '\n'
lines.append(s)
print('\n统计完成!\n')
outfile.writelines(lines)
outfile.close()
排除特定词库
#排除词库
excludes = ['the','and','to','of','i','a','in','it','that','is',
'you','my','with','not','his','this','but','for',
'me','s','he','be','as','so','him','your']
def getText():
txt=open('hamlet.txt','r').read()
txt=txt.lower()
for ch in "~@#$%^&*()_-+=<>?/,.:;{}[]|\'""":
txt=txt.replace(ch,' ')
return txt
hamletTxt=getText()
words=hamletTxt.split()
counts={}
sumcount = 0
for word in words:
counts[word]=counts.get(word,0)+1
sumcount = sumcount + 1
counts_ex = counts.copy()
for key in counts.keys():
if key in excludes:
counts_ex.pop(key)
items=list(counts_ex.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(10):
word,count=items[i]
print('{0:<10}{1:>5}'.format(word,count))
#将统计结果写入文本文件中
outfile = open('词频统计结果.txt', "w")
lines = []
lines.append('单词种类:'+str(len(items))+'\n')
lines.append('单词总数:'+str(sumcount)+'\n')
lines.append('词频排序如下:\n')
lines.append('word\tcounts\n')
s= ''
for i in range(len(items)):
s = '\t'.join([str(items[i][0]), str(items[i][1])])
s += '\n'
lines.append(s)
print('\n统计完成!\n')
outfile.writelines(lines)
outfile.close()
GUI版本
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
from tkinter import filedialog
from tkinter import messagebox as mBox
#获取原文内容
def getText(DIR):
txt=open(DIR,'r').read()
return txt
txt.close()
#打开文件
def __opendir():
srcText.delete('1.0', tk.END) # 先删除所有
# 打开文件夹对话框
fname = filedialog.askopenfilename(filetypes=( ("Text file", "*.txt*"),("HTML files", "*.html;*.htm")))
entryvar.set(fname) # 设置变量entryvar,等同于设置部件Entry
if not fname:
mBox.showwarning('警告', message='未选择文件夹!') # 弹出消息提示框
#显示需要统计的文本
Txt=getText(fname)
srcText.insert(tk.END, Txt)
srcText.update()
#手动输入文件名时回车键触发
def srcEnter(event=None):
fname=DirEntry.get()
if not fname:
mBox.showwarning('警告', message='请选择文件!') # 弹出消息提示框
Txt=getText(fname)
srcText.insert(tk.END, Txt)
srcText.update()
#词频统计
def wordFrequence():
fname=DirEntry.get()
if not fname:
mBox.showwarning('警告', message='请选择文件!') # 弹出消息提示框
txt=getText(fname)
#对原文进行小写,标点符号转换处理
txt=txt.lower()
for ch in '!"#$%&*()+,.-;:<=>?@[]\^_{}|`':
txt=txt.replace(ch,' ')
#词频统计
words=txt.split()
counts={} #用空字典存储统计结果
for word in words:
counts[word]=counts.get(word,0)+1
#词频排序
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
#输出排序结果
num=0
for i in range(len(counts)):
word,count=items[i]
num=i*count+num
dstText.insert(tk.END, '单词种类:')
dstText.insert(tk.END, str(len(items)))
dstText.insert(tk.END, '\n')
dstText.insert(tk.END, '单词总数:')
dstText.insert(tk.END, str(num))
dstText.insert(tk.END, '\n')
dstText.insert(tk.END, '词频排序如下:\n')
dstText.insert(tk.END, '#word:\t\t#counts:\n')
for i in range(len(counts)):
word,count=items[i]
dstText.insert(tk.END, word)
dstText.insert(tk.END, '\t\t')
dstText.insert(tk.END, count)
dstText.insert(tk.END, '\n')
def savefile():
# 打开文件夹对话框
dirname = filedialog.askdirectory()
outvar.set(dirname) # 设置变量entryvar,等同于设置部件Entry
if not dirname:
mBox.showwarning('警告', message='请选择保存位置!') # 弹出消息提示框
fname=dirname+'\词频统计结果.txt'
outfile = open(fname, "w")
outfile.writelines(dstText.get(1.0,tk.END))
outfile.close()
mBox.showinfo('词频统计', '统计结果保存成功!')
def dstEnter(event=None):
dirname=outvar.get()
if not dirname:
mBox.showwarning('警告', message='请选择保存位置!') # 弹出消息提示框
fname=dirname+'\词频统计结果.txt'
outfile = open(fname, "w")
outfile.writelines(dstText.get(1.0,tk.END))
outfile.close()
mBox.showinfo('词频统计', '统计结果保存成功!')
# Create instance
win = tk.Tk()
# Add a title
win.title("词频统计GUI")
# Disable resizing the GUI
win.resizable(0,0)
#---------------窗口控件介绍------------------#
#打开文件对话框
SelDirButton = ttk.Button(win, command=__opendir, text='选择文件目录:')
SelDirButton.grid(row=0, column=0,sticky=tk.W,pady=3,padx=3)
#文件的目录显示
entryvar = tk.StringVar()
DirEntry=ttk.Entry(win, width=30,textvariable=entryvar)
DirEntry.grid(row=1, column=0,sticky=tk.W,pady=3,padx=3)
DirEntry.bind('', func=srcEnter)
#文件内容的显示
srcText = scrolledtext.ScrolledText(win,width=30,height=30)#内容输出框
srcText.grid(row=2, column=0,columnspan=1,sticky=tk.W,pady=3,padx=3)
#词频统计按钮
CalcuButton = ttk.Button(win, command=wordFrequence, text='词频统计')
CalcuButton.grid(row=0, column=1,sticky=tk.W,pady=3,padx=3)
#统计结果显示
dstText = scrolledtext.ScrolledText(win,width=30,height=30)#内容输出框
dstText.grid(row=2, column=1,columnspan=2,sticky=tk.W,pady=3,padx=3)
#保存文件按钮
SavefileButton = ttk.Button(win, command=savefile, text='统计结果保存到:')
SavefileButton.grid(row=0, column=2,sticky=tk.W,pady=3,padx=3)
#保存文件目录
outvar = tk.StringVar()
saveEntry=ttk.Entry(win, width=30,textvariable=outvar)
saveEntry.grid(row=1, column=1,columnspan=2,sticky=tk.W,pady=3,padx=3)
saveEntry.bind('', func=dstEnter)
#======================
# Start GUI
#======================
win.mainloop()
用Python实现一个词频统计(词云+图)
第一步:首先需要安装工具python 第二步:在电脑cmd后台下载安装如下工具: (有一些是安装好python电脑自带有哦) 有一些会出现一种情况就是安装不了词云展示库 有下面解决方法,需看请复制链接 ...
Python3.7 练习题(二) 使用Python进行文本词频统计
# 使用Python进行词频统计 mytext = """Background Industrial Light & Magic (ILM) was starte ...
利用python实现简单词频统计、构建词云
1.利用jieba分词,排除停用词stopword之后,对文章中的词进行词频统计,并用matplotlib进行直方图展示 # coding: utf-8 import codecs import ma ...
(改进)Python语言实现词频统计
需求: 1.设计一个词频统计的程序. 2.英语文章中包含的英语标点符号不计入统计. 3.将统计结果按照单词的出现频率由大到小进行排序. 设计: 1.基本功能和用法会在程序中进行提示. 2.原理是利用分 ...
python实现简易词频统计-源码
需求:给瓦尔登湖文章统计单词出现的频率 思路:首先读取文件并以空格分割得到列表,然后利用for循环遍历列表中的元素并把去掉列表元素中的符号,第三步去掉相同的元素,将列表转换为一个字典,最后按照键值对升 ...
python:Hamlet英文词频统计
#CalHamletV1.py def getText(): #定义函数读取文件 txt = open("hamlet.txt","r").read() txt ...
用Python来进行词频统计
# 把语料中的单词全部抽取出来, 转成小写, 并且去除单词中间的特殊符号 def words(text): return re.findall('[a-z]+', text.lower()) def ...
Python 词频统计
利用Python做一个词频统计 GitHub地址:FightingBob [Give me a star , thanks.] 词频统计 对纯英语的文本文件[Eg: 瓦尔登湖(英文版).txt]的英文 ...
spark ---词频统计(二)
利用python来操作spark的词频统计,现将过程分享如下: 1.新建项目:(这里是在已有的项目中创建的,可单独创建wordcount项目) ①新建txt文件: wordcount.txt (文件内 ...
随机推荐
js eventhandler
1.获取所有eventhandler 使用 getEventHandler(target) 2.target.addEventHandler(type,handler,userCapture?) 3. ...
307.	Range Sum Query - Mutable
题目: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclu ...
Jetty学习(一)
最近做一个项目,需要动态添加与移除servlet容器的http端口,并且启动都是嵌入式的.因此,果断选择了Jetty. 在模块化方面,Jetty是做的相当给力的一个容器,对 ...
20 个非常棒的jQuery内容滑动插件
Wow Slider WOW Slider是一款小巧易用的网页滑块设计.该软件内置大量的模版和工具,让你轻松设计出完美的视觉效果.他还可以帮助用户在短时间内创造出梦幻般的滑块,而无需编码和图像编辑, ...
福州大学软件工程1816 | W班 第8次作业[团队作业,随堂小测——校友录]
作业链接 团队作业,随堂小测--校友录 评分细则 本次个人项目分数由两部分组成(博客分满分40分+程序得分满分60分) 博客和程序得分表 评分统计图 千帆竞发图 总结 旅法师:实现了更新,导出,查询, ...
Fork/Join框架
java 5开始引入了Executor和ExecutorService接口以及实现这两个接口的类之后,使得java在并发支持上得到了进一步的提升.执行器框架(Executor Framework)将任 ...
phpize安装php扩展CURL
进入php源码包curl扩展目录 cd php-/ext/curl phpize ./configure --with-php-config=/usr/local/webserver/php/bin/ ...
Day36 数据库的操作
视图操作: 1.左连接查询 select * from person left join dept on person.dept_id = dept.did 2. 右连接 3. 内连接 inner ...
小峰servlet/jsp(2)
一.jsp javaBean组件引入
python单词词频字典_Python字典使用--词频统计的GUI实现相关推荐
- python 命名字典_python字典命名
广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! usrbinpython dict = {: zhang, age: 27} ...
- python输入文字、成为字典_Python 字典(Dictionary)操作详解
一.创建字典 字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} ...
- python字典_Python 字典
1.什么是 dict(字典) 上一章节,我们学习了列表(List) 和 元组(tuple) 来表示有序集合. 而我们在讲列表(list)的时候,我们用了列表(list) 来存储用户的姓名. name ...
- python deepcopy报错_python 字典对象赋值之deepcopy遭遇的问题及解决过程(lxml惹的祸)...
今天在写一段代码的时候,需要对字典进行传值操作. 一般情况下字典a = 字典b,意味着是传引用,b发送改变的情况下a也会发生改变. 我的字典如下 a={'testcase': {'attributes ...
- dictionary在python中什么意思_Python 字典(Dictionary)操作详解
Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = { ...
- python 存储字典_python 字典存储
Python学习笔记--元组.列表和字典的使用笔记 Python学习笔记--元组.列表和字典的使用笔记 最近开始学习python语言,所以在学习中做了一些记录,这次讲的是元组.列表和字典的基础操作和区 ...
- python复制字典_python字典复制
python学习系列--深拷贝和浅拷贝 概念 普通情况下,复制一个对象是不会新开辟内存空间的,只是把新的对象名称指向原有的内存地址,这种操作其实不是算是拷贝,只是新的引用.把新的对象置于新的内存空间中 ...
- python定义空字典_python字典空值
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为defaul ...
- python构造字典_python字典构造
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 1 dict()构造函数可以返回一个空的字典in : d = dict() in ...
最新文章
- 维塔与 Magic Leap 的MR游戏发布概念片
- 关于JAVA项目中CLASSPATH路径详解
- c语言中go的作用,go语言与c语言的相互调用
- windows 客户端的Navicat PL/SQL 连接Oracle 数据库
- 前端学习(1913)vue之电商管理系统电商系统之创建user分支并把代码推到码云
- 树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】
- 怎么创建PHP函数,如何创建 PHP 函数
- 英特尔吃iPhone 7 Modem芯片订单可能逾5成 挹注15亿美元营收
- (14)System Verilog 常量const详解
- 智能家居助手后台系统原型/智慧家居后台管理系统/应用分析/页面分析/设备分析/用户管理/运营管理/权限管理/系统设置/问题反馈/商城管理/消息管理/用户画像/公告管理/账号画像/留存用户/数据埋点
- 倒计时 1 天 | 年前不学习,年后无加薪!区块链开发者们不要纠结了!(内含赠票福利)...
- vs code 前端如何以服务器模式打开 [安装服务器] server insteall
- 对网页渲染的初步认识
- 信号与系统研讨(一)匹配滤波器
- Nature指数全球城市科研排名:北京第一,上海第五,南京第八
- 史上最强的融资方案商业计划书
- 安全牛联合世平信息共同发布《数据防泄密 (DLP) 业务应用指南》
- 知识产权代理行业公司竞争分析
- 如何完美解决catia出现-运行异常,单击“确定终止”-问题
- 若有以下定义和语句:double r=99, *p=r;*p=r; 则以下正确的叙述是 A) 以下两处的*p含义相同,都说明给指针变量p赋值 B) 在“double r=99, *p=r;“中,
热门文章
- python中if not x: 和 if x is not None: 和 if not x is None的使用和区别(这里面有一个坑)
- 【112期分享】5款知识竞答PPT模板免费下载
- 煤矿无线广播系统解决方案
- js将数组中的字符串按照第二个字符的大小排序(sort排序)
- 时间管理_四象限法则
- Cisco VPN出现Error 56的解决办法
- 无人值守的 Windows 安装程序隐式应答文件搜索顺序
- 红帽linux授权,红帽开发者可得到一套免费Red Hat Enterprise Linux 许可证
- 翻译接口java_微软翻译api的java实现
- 简单实用算法——字节位序反转