复合数据类型,英文词频统计
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753
1.列表,元组,字典,集合分别如何增删改查及遍历。
2.总结列表,元组,字典,集合的联系与区别。参考以下几个方面:
- 括号
- 有序无序
- 可变不可变
- 重复不可重复
- 存储与查找方式
列表:list1 = ['python',2019,'java',1997]
列表的数据项不需要具有相同的类型,创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可
list[index]:访问列表下标为index的值,赋值修改下标index的值 del list[index]:删除列表下标为index的值 list[ : ]:截取列表中的片段
len(list):返回列表的长度 max(list):返回列表中的最大值 min(list):返回列表中的最小值 list(seq):将元组转换成列表
list.append(obj):在列表末尾添加新的对象 list.count(obj):统计某个元素在列表中出现的次数
list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj):从列表中找出某个值第一个匹配项的索引位置 list.insert(index, obj):将对象插入列表
list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj)移除列表中某个值的第一个匹配项 list.sort(key=None, reverse=False)对原列表进行排序
元组:tup1 = ('python',2019,'java',1997)
元组与列表类似,不同之处在于元组的元素不能修改
创建元组,只需要在括号中添加元素,并使用逗号隔开即可
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用;
元组中的元素值不允许修改,tup[index]:访问元组下标为index的值,可通过tup = tup1+tup2对元组进行连接组合
元组中的元素值不允许删除,del tup:删除整个元组 tup[ : ]:截取元组中的片段
len(tup):返回元组的长度 max(tup):返回元组中的最大值 min(tup):返回元组中的最小值 tup(seq):将列表转换成列表
字典:dict = {'a': '1', 'b': '2', 'c': '3'}
字典是另一种可变容器模型,且可存储任意类型对象。
字典的键必须是唯一的,但值则不必
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中
dict['key']:访问字典中的值,赋值修改key对应的值 dict['key'] = value:添加键值对
del dict['key']:删除键 'key' dict.clear():清空字典 del dict :删除字典
len(dict):返回字典元素的个数 str(dict):输出字典,以可打印的字符串表示
dict.items():返回可遍历的(键, 值) 元组数组 pop(key[,default]):删除字典给定键 key 所对应的值,返回值为被删除的值
集合:set1= {value01,value02,...} 或者 set(value)
集合是一个无序的不重复元素序列,可以使用大括号 { } 或者 set() 函数创建集合
set1 - set2:集合set1中包含而集合set2中不包含的元素
set1 | set2:集合set1 或set2中包含的所有元素
set1 & set2:集合set1和set2中都包含了的元素
set1 ^ set2:不同时包含于set1和set2的元素
set.add(elmnt):添加元素 set.pop(): 随机移除一个元素 set.remove(item):移除集合中的指定元素
set.update:修改当前集合,可以添加新的元素或集合到当前集合中
3.词频统计
3.1下载一长篇小说,存成utf-8编码的文本文件 file
3.2通过文件读取字符串 str
3.3对文本进行预处理
3.4分解提取单词 list
3.5单词计数字典 set , dict
3.6按词频排序 list.sort(key=lambda),turple
3.7排除语法型词汇,代词、冠词、连词等无语义词
自定义停用词表
或用stops.txt
3.8输出TOP(20)
3.9可视化:词云
排序好的单词列表word保存成csv文件
import pandas as pd
pd.DataFrame(data=word).to_csv('big.csv',encoding='utf-8')
线上工具生成词云:
https://wordart.com/create
import re from nltk.corpus import stopwords from bs4 import BeautifulSoup import requests def excise(): url = 'http://novel.tingroom.com/jingdian/2814/77766.html' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} response = requests.get(url,headers=headers) response.encoding = 'utf-8' soup=BeautifulSoup(response.text,'lxml') a =soup.find('div',class_='text').get_text() a = re.sub('<!-[\s\S]*?-->','',a) a = re.sub('^\s*\n','',a).replace('\xa0','') a = a.splitlines()[:-4] a=''.join(a) a=re.sub('\[.*?\]','',a) s = ",.? ?':' !--\!_:" for s1 in s: a=a.replace(s1,' ') with open('oo.text','w') as file: file.write(a) a=a.lower() b = a.split() c = set(b) number = {} for i in c: number[i] = a.count(i) words = stopwords.words('english') for word in words: stopword = number.pop(word,'none') number = sorted(number.items(),key=lambda key:key[1],reverse=True) Top = number[:20] print(Top) pd.DataFrame(data=Top).to_csv('TOP20.csv', encoding='utf-8') if __name__ == '__main__': excise()