文档读取,词云,分词
1.词云的生成
安装wordcloud库,imageio库
若在线pip install wordcloud库失败,选择离线安装:(解决c++环境缺失的问题)在工作目录保存wordcloud.whl文件后,打开终端 pip install [文件路径]文件名进行安装
import jieba
from wordcloud import WordCloud
text = '''词语是词和语的合称,包括单词词组及整个词汇文字组成语句文章的最小组词结构形式。新词典词语丰富,信息量大。词是由语素组成的最小的造句单位。词语有2字、3字及4字的分类 '''
txt_list = jieba.lcut(text)
txt = ' '.join(txt_list)
print(txt)
w = WordCloud(
background_color = 'white', #背景颜色
font_path = 'msyh.ttc', #字体
width = 400, #宽
height = 300 #高
).generate(text)
w.to_file('词云.jpg')#保存词云
A.jpg
2.文本读取
import jieba
with open('build/novel/threekingdom.txt', 'r', encoding = 'utf-8')as f:
print(f.read)
另一种形式
txt = open('build/novel/threekingdom.txt', 'r', encoding = 'utf-8').read()
3.生成任意形状的词云
import jieba
import imageio
from wordcloud import WordCloud
mask = imageio.imread('china.jpg')
with open('build/novel/threekingdom.txt', 'r', encoding= 'UTF-8') as f:
data = f.read()
# print(data)
# print(len(data))
word_list = jieba.lcut(data)
word = " ".join(word_list)
#print(word_list)
print(len(word_list))
w = WordCloud(
background_color = 'white',
font_path = 'msyh.ttc',
width = 800,
height = 600,
mask = mask
# max_words = 40, # min_font_size = 80
# max_font_size = 80
).generate(word)
w.to_file('threekingdom.png')
threekingdom.png
4.排序
生成一个列表,然后随机随机打乱列表顺序
li = []
for i in range(10):
li.append(i)
print('生成的li:',li)
from random import shuffle
shuffle(li)
print('打乱顺序之后的li:', li)
对列表重新进行排序
这里采用两种方法:
1.使用 list对象的sort方法
li.sort()
print('使用sort方法进行排序之后:', li)
# reverse=True倒序排序
li.sort(reverse=True)
print('使用sort方法,指定reverse进行排序之后:', li)
- 使用内置函数sorted
li = sorted(li)
print('使用sorted函数排序之后', li)
li = sorted(li, reverse=True)
print('使用sorted函数, reverse=True 排序之后', li)
总结: sort和sorted的区别
- sort仅针对列表进行排序, 无返回值,会在原来的列表基础上修改
- sorted 是python中单独的内置函数,可以对可迭代(iterable)对象进行排序,不局限于list, 它不改表原生的数据,重新生成一个新的队列
5.函数
- 以 def 关键词开头,后接函数标识符名称和圆括号()
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明,函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def 函数名(参数):
function_suite
return [表达式]
实例:
def calculatNum(num):
sum = 0
for i in range(1, num + 1):
sum += i
return sum
num = int (input('请输入任意整数:'))
print('1到{}之间的累积和为{}'.format(num, calculatNum(num)))
stu_info_list = [
{'name': 'zhangsan', 'age': 18, 'addr': '浑南'},
{'name': 'lisi', 'age': 50, 'addr': '浑南'},
{'name': 'wangwu', 'age': 3, 'addr': '浑南'},
{'name': 'zhaoliu', 'age': 35, 'addr': '浑南'},
{'name': 'tianqi', 'age': 20, 'addr': '浑南'}
]
print('排序前', stu_info_list)
def sort_by_age(x):
return x['age']
stu_info_list.sort(key = sort_by_age)
print('排序后', stu_info_list)
6.匿名函数
python 使用 lambda 来创建匿名函数。
- lambda只是一个表达式
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda [arg1 [,arg2,.....argn]]:expression
实例:
sum_two_num = lambda x, y : x + y
print(sum_two_num(1, 5))#6
使用带有匿名函数的表达式进行排序
stu_info_list = [
{'name': 'zhangsan', 'age': 18, 'addr': '浑南'},
{'name': 'lisi', 'age': 50, 'addr': '浑南'},
{'name': 'wangwu', 'age': 3, 'addr': '浑南'},
{'name': 'zhaoliu', 'age': 35, 'addr': '浑南'},
{'name': 'tianqi', 'age': 20, 'addr': '浑南'}
]
stu_info_list1 = sorted(stu_info_list, key=lambda items:items['age'], reverse = True)
print(stu_info_list1)
利用上述所学实现,实例:三国人物出现频率top10分析
- 出现频率前20的词汇统计代码
import jieba
with open('build/novel/threekingdom.txt', 'r', encoding = 'utf-8')as f:
data = f.read()#读取文件
words_list = jieba.lcut(data)#分词
#print(words_list)
#构建一个容器,存储我们的数据
counts = {}
#遍历wordlist,筛选出人名
for word in words_list:
#print(word)
if len(word) <= 1:
#过滤无关词语
continue
else:
#向counts内更新值
counts[word] = counts.get(word, 0) + 1
#print(counts)
items = list(counts.items())
items.sort(key = lambda x:x[1], reverse = True)
#print(items)
for i in range(20):
word,count = items[i]
print('"{}"出现次数:{}'.format(word, count))