文本词频统计实例
一 ”文本词频统计“问题分析
- 文本去噪及归一化
- 使用字典表达词频
f = open(r'C:\Users\XM\Desktop\typore快捷键.txt','r',encoding='utf8')
data = f.read().lower()
data_split = data.split(' ')
count_dict = {}
for word in data_split:
if word not in count_dict:
count_dict[word] = 1
else:
count_dict[word] += 1
def func(i):
return i[1]
lt = list(count_dict.items())
lt.sort(key=func)
lt.reverse()
for i in lt[0:10]:
print(f'{i[0]:^7}{i[1]^5}')
- 运行结果由大到小排序
- 观察单词出现次数
三、"《三国演义》人物出场统计"实例讲解
- 中文文本分词
- 使用字典表达词频
import jieba
f = open(r'C:\Users\XM\PycharmProjects\untitled\新建文本文档.txt','r',encoding='utf-8')
data = f.read()
data_jieba = jieba.lcut(data)
count_dict ={}
for i in data_jieba:
if len(i)==1:
continue
if i in {"将军", "却说", "荆州", "二人", "不可", "不能", "如此","丞相","商议","主公","军士","如何","左右"}:
continue
if '曰' in i :
i = i.replace('曰','')
if i not in count_dict:
count_dict[i]=1
else:
count_dict[i]+= 1
ls = list(count_dict.items())
def func(i):
return i[1]
ls.sort(key=func)
ls.reverse()
for i in ls[:10]:
print(f'{i[0]:^7}{i[1]:^5}')
孔明 1226
玄德 975
曹操 953
关公 510
张飞 358
吕布 300
军马 293
赵云 278
刘备 277
引兵 276
文件的使用
一 概述
- 文件的类型
- 文件的打开和关闭
- 文件内容的读取
- 数据的文件写入
二、文件的类型
2.1 文件的理解
文件是数据的抽象和集合
- 文件是存储在辅助存储器上的数据序列
- 文件是数据存储的一种形式
- 文件展现形态:文本文件和二进制文件
文本文件 vs. 二进制文件
- 文件文件和二进制文件只是文件的展示方式
- 本质上,所有文件都是二进制形式存储
- 形式上,所有文件采用两种方式展示
2.2 文本文件
文件是数据的抽象和集合
- 由单一特定编码组成的文件,如UTF-8编码
- 由于存在编码,也被看成是存储着的长字符串
- 适用于例如:.txt文件、.py文件等
2.3 二进制文件
文件是数据的抽象和集合
- 直接由比特0和1组成,没有统一字符编码
- 一般存在二进制0和1的组织结构,即文件格式
- 适用于例如:.png文件、.avi文件等
2.4 文本文件 vs. 二进制文件
"中国是个伟大的国家!"
- 文本形式:
中国是个伟大的国家!
- 二进制形式:
b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'
文件的读写操作
f = open(r'C:\Users\XM\Desktop\typore快捷键.txt','r')
data = f.read()
print(data)
f.close()
f = open(r'C:\Users\XM\PycharmProjects\untitled\ceshi.py','w')
f.write('123')
f.close()
3.1 文件路径
文件路径和名称:"D:/PYE/f.txt" 或 "D:\PYE\f.txt"
源文件同目录可省路径:"./PYE/f.txt" 或 "f.txt"
3.2 打开模式
文件的打开模式 | 描述 |
---|---|
'r' | 只读模式,默认值,如果文件不存在,返回FileNotFoundError |
'w' | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
'x' | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
'a' | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
'b' | 二进制文件模式 |
't' | 文本文件模式,默认值 |
'+' | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
- 文本形式、只读模式、默认值:
f = open("f.txt")
- 文本形式、只读模式、同默认值:
f = open("f.txt", "rt")
- 文本形式、覆盖写模式:
f = open("f.txt", "w")
- 文本形式、追加写模式+ 读文件:
f = open("f.txt", "a+")
- 文本形式、创建写模式:
f = open("f.txt", "x")
- 二进制形式、只读模式:
f = open("f.txt", "b")
- 二进制形式、覆盖写模式:
f = open("f.txt"):f = open("f.txt", "wb")
3.3 文件的关闭
<变量名>.close()
# 变量名为文件句柄
3.4 文件使用
# 文本形式打开文件
tf = open("f.txt", "rt")
print(tf.readline())
tf.close()
# 二进制形式打开文件
bf = open("f.txt", "rb")
print(bf.readline())
bf.close()
四、文件内容的读取
操作方法 | 描述 |
---|---|
.read(size=-1) | 读入全部内容,如果给出参数,读入前size长度,s = f.read(2) # 中国 |
.readline(size=-1) | 读入一行内容,如果给出参数,读入该行前size长度,s = f.readline() # 中国是一个伟大的国家! |
.readlines(hint=-1) | 读入文件所有行,以每行为元素形成列表如果给出参数,读入前hint行,s = f.readlines() # ['中国是一个伟大的国家!'] |
4.1 文件的全文本操作
4.1.1 遍历全文本:方法一
一次读入,统一处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read()
# 对全文txt进行处理
fo.close()
4.1.2 遍历全文本:方法二
按数量读入,逐步处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read(2)
while txt != "":
# 对txt进行处理
txt = fo.read(2)
fo.close()
4.2 文件的逐行操作
4.2.1 逐行遍历文件:方法一
一次读入,分行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo.readlines():
print(line)
fo.close()
4.2.2 逐行遍历文件:方法二
分行读入,逐行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo:
print(line)
fo.close()
五、数据的文件写入
操作方法 | 描述 |
---|---|
.write(s) | 向文件写入一个字符串或字节流,f.write("中国是一个伟大的国家!") |
.writelines(lines) | 将一个元素全为字符串的列表写入文件,ls = ["中国", "法国", "美国"];f.writelines(ls) # 中国法国美国 |
.seek(offset) | 改变当前文件操作指针的位置,offset含义如下: 0 – 文件开头; 1 – 当前位置; 2 – 文件结尾,f.seek(0) # 回到文件开头 |
写入一个字符串列表
fo = open("output.txt","w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
for line in fo:
print(line) # (没有任何输出)
fo.close()
写入一个字符串列表
fo = open("output.txt","w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
print(line) # 中国法国美国
fo.close()
word cloud库的使用
一 wordcloud库基本介绍
wordcloud是优秀的词云展示第三方库
- 词云以词语为基本单位,更加直观和艺术的展示文本
1.2 wordcloud库的安装
pip install wordcloud
(cmd命令行)
二、wordcloud库使用说明
2.1 wordcloud库基本使用
wordcloud库把词云当作一个WordCloud对象
- wordcloud.WordCloud()代表一个文本对应的词云
- 可以根据文本中词语出现的频率等参数绘制词云
- 绘制词云的形状、尺寸和颜色都可以设定
2.2 wordcloud库常规方法
w = wordcloud.WordCloud()
- 以WordCloud对象为基础
- 配置参数、加载文本、输出文件
方法 | 描述 |
---|---|
w.generate(txt) | 向WordCloud对象w中加载文本txt,w.generate("Python and WordCloud") |
w.to_file(filename) | 将词云输出为图像文件,.png或.jpg?x-oss-process=style/watermark格式,w.to_file("outfile.png") |
- 步骤1:配置对象参数
- 步骤2:加载词云文本
- 步骤3:输出词云文件
import wordcloud
w = wordcloud.WordCloud()
w.generate("Python and WordCloud")
c.to_file("pywordcloud.png")
2.3 配置对象参数
w = wordcloud.WordCloud(<参数>)
参数 | 描述 |
---|---|
width | 指定词云对象生成图片的宽度,默认400像素 |
height | 指定词云对象生成图片的高度,默认200像素 |
min_font_size | 指定词云中字体的最小字号,默认4号 |
max_font_size | 指定词云中字体的最大字号,根据高度自动调节 |
font_step | 指定词云中字体字号的步进间隔,默认为1 |
font_path | 指定字体文件的路径,默认None |
max_words | 指定词云显示的最大单词数量,默认200 |
stop_words | 指定词云的排除词列表,即不显示的单词列表 |
mask | 指定词云形状,默认为长方形,需要引用imread()函数 |
background_color | 指定词云图片的背景颜色,默认为黑色 |
# mask
from scipy.misc import imread
mk=imread("pic.png")
w=wordcloud.WordCloud(mask=mk)
2.4 wordcloud应用实例
import wordcloud
txt = "life is short, you need python"
w = wordcloud.WordCloud(background_color="white")
w.generate(txt)
w.to_file("pywcloud.png")
中文需要先分词并组成空格分隔字符串
import jieba
import wordcloud
txt = "Nick 是上海虹桥最帅的男人,没有之一,因为他就是最帅的"
w = wordcloud.WordCloud( width=1000,\
font_path="/Library/Fonts/Heiti.ttc",height=700)
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("pywcloud.png")
mask的使用(mask的图片需要背景为白色)
pip install imageio
pip install scipy
f = open(r'C:\Users\XM\PycharmProjects\untitled\新建文本文档.txt','r',encoding='utf-8')
txt = f.read()
mask = imread(r"C:\Users\XM\PycharmProjects\untitled\113.png")
w = wordcloud.WordCloud( width=1000,\
font_path=r"C:\Windows\Fonts\simhei",height=700,mask=mask,background_color='white')
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("pywcloud.png")