Python文本处理:单词提取和统计,借助matplotlib绘图

Python文本处理:单词提取和统计,借助matplotlib绘图

1、首先安装matplotlib绘图库
在电脑运行窗口输入cmd,右击命令提示符,以管理员身份运行。
Python文本处理:单词提取和统计,借助matplotlib绘图
在窗口输入:pip install matplotlib 回车
Python文本处理:单词提取和统计,借助matplotlib绘图
然后等待加载完成,出现successfully,则安装完成。
Python文本处理:单词提取和统计,借助matplotlib绘图
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()    #现在图像

Python文本处理:单词提取和统计,借助matplotlib绘图
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()