Python文本处理:单词提取和统计,借助matplotlib绘图
1、首先安装matplotlib绘图库
在电脑运行窗口输入cmd,右击命令提示符,以管理员身份运行。
在窗口输入:pip install matplotlib 回车
然后等待加载完成,出现successfully,则安装完成。
2、文件操作
打开(导入)文件 open()函数,并返回文件对象,形式:
<变量名>=open(file,mode=‘r’)#file为文件名:“文件.txt”,mode文件打开模式;
文件操作:读取、写入、定位…;
关闭文件 close()
打开模式 | 执行操作 |
‘r’ | 以只读方式打开文本(默认))如果文件不存在,返回异 常FileNotFoundError |
‘w’ | 以写入的方式打开文件,文件不存在则创建,会覆盖已 存在的文件 |
‘a’ | 以写入模式打开,文件不存在则创建,如果文件存在, 则在末尾追加写入 |
‘x’ | 打开一个新文件来写数据。文件不存在则创建,如果数 据已经存在则返回异常FileExistsError |
‘b’ | 以二进制模式打开文件 |
‘t’ | 以文本模式打开(默认) |
‘+’ | 可读写模式(可添加到其它模式中使用) |
模式可以组合应用:如‘wb’表示写二进制数据,‘rt’表示读入文本文件方式;
读写文件内容的方法:
方法 | 功能 |
file.readall | 读入整个文件内容,返回一个字符串或字节流 |
file.readline(size=-1) | 从文件中读入一行内容,如果给出参数,读入该行前 size长度的字符串或字节流 |
file.readline(hint=-1) | 从文件中读入所有行,以每行为元素形成一个列表, 如果给出参数,读入hint行 |
file.read(size=-1) | 从文件读取size个字符,当未给定size或给定负值的 时候,读取剩余的所有字符,文件指针指向文件末尾 |
file.write(str) | 将字符串str写入文件 |
file.writelines(lines) | 将一个元素为字符串的列表写入文件 |
file.seek(offset,from) | 改变当前文件操作指针的位置,从from(0代表文件起 始位置,1代表当前位置,2代表文件末尾)偏移offset 个字节 |
示例:将文本文件逐行打印输出
reading=open("file name","rt")
for line in reading.readlines():
print(line)
reading.close
如果打开有编码的文件,如中文,需要使用codecs模块,设置编码方式:
import codecs
例:
f1=codecs.open('hongloumeng'.txt,"r","utf-8") #此处不能用t
3、matplotlib绘图
matplotlib是Python的一个2D绘图库,可生成绘图,直方图、散点图等,简单方便。
示例:
#导入matplotlib
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,100,10)
y=x/2
plt.figure()
plt.plot(x,y)
plt.xlabel('x') #设置纵坐标名称
plt.ylabel('y') #设置纵坐标名称
plt.title("y=x/2") #设置图的标题
plt.show() #现在图像
matplotlib的函数可在官网查看全部:
https://matplotlib.org/api/pyplot_summary.html
4、实例:文本单词提取并统计各个单词出现的次数,验证zipf定律
import matplotlib.pyplot as plt
import numpy as np
#读入文章
f=open("GeorgeR.R.Martin.txt","rt")
all=f.read()
al1=f.read()
f.close()
#创建一个字典,单词为键,单词出现的个数为相应的键值
count_word={}
#利用split()函数按空格划分单词,用lower()把单词的大写字母变成小写
for w in all.split():
w_lowercase=w.lower()
count_word[w_lowercase]=\
count_word.get(w_lowercase,0)+1
#用for索引获取字典的键值对,并用sort()函数排序
result=[(v,k) for k,v in count_word.items()]
result.sort()
#创建一个新列表,并按大到小储存每个单词出现的次数
count=[]
for v,k in result[::-1]:
count.append(v)
print(f"Word{k}, occurs {v} times")
#此语句用于打印各个单词出现的次数,由于太多了所以注释了
#画zipf图,y轴为单词出现的次数,x轴为名次
y=count
x=range(1,len(y)+1)
plt.figure()
plt.loglog(x,y) #.loglog(x,y)函数在x轴和y轴上绘制具有对数比例的图
plt.xlabel('rank')
plt.ylabel('coutn')
plt.title("Zip")
plt.show()