python基础第三课

文档读取,词云,分词

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)
  1. 使用内置函数sorted
li = sorted(li)
print('使用sorted函数排序之后', li)
li = sorted(li, reverse=True)
print('使用sorted函数, reverse=True 排序之后', li)

总结: sort和sorted的区别

  1. sort仅针对列表进行排序, 无返回值,会在原来的列表基础上修改
  2. 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))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容