zoukankan      html  css  js  c++  java
  • 复合数据类型,英文词频统计

    作业来源: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 requests
    from bs4 import BeautifulSoup
    from fake_useragent import UserAgent
    import re
    from nltk.corpus import stopwords
    import pandas as pd
    
    
    def get_text():
        url = 'http://novel.tingroom.com/jingdian/2857/78803.html'
        ua = UserAgent()
        headers = {'User_Agent': ua.random}
        html = requests.get(url,headers= headers) #请求得到链接
        html.encoding = 'utf-8' #编码
        soup = BeautifulSoup(html.text,'lxml') #操作html文档
        Eng_text = soup.find('div',class_='text').get_text() #获取text文本
        Eng_text = re.sub('<!-[sS]*?-->','',Eng_text)  #去text的注释
        Eng_text = Eng_text.replace('欢迎访问英文小说网http://novel.tingroom.com','').replace('只需30秒,测测你的英语词汇量!','') #去text后面的文本
        Eng_text = Eng_text.strip('	
    
    ').lstrip().rstrip() #去空行、空格
    
        #保存text文件
        with open('Eng_text.txt','w') as f:
            f.write(Eng_text)
    
        Eng_text = Eng_text.lower()  # 将所有大写转换为小写
        s = ',.?!";'
        for i in s:
            Eng_text = Eng_text.replace(i, ' ')  # 将所有其他做分隔符(,.?!)替换为空格
        Eng_text = Eng_text.split()  # 分隔出一个一个的单词
        InfoSet = set(Eng_text) #集合方式获得每个单词
        Count = {}
        for txt in InfoSet:
            Count.setdefault(txt, Eng_text.count(txt))  # 统计单词出现的次数
        words = stopwords.words('english') #英语的stopwords
        for word in words:
            Stopword = Count.pop(word,'none') #删除字典中的停用词,返回删除对象,没有则返回none
    
        Count = sorted(Count.items(), key=lambda x: x[1],reverse=True) #按values的值从大到小排序,返回列表,以数组存储键值对
        Top = Count[:20] #截取前20个
        print(Top)
    
        pd.DataFrame(data=Top).to_csv('TOP20.csv', encoding='utf-8') #将前20个保存成csv文件,excel打开
    if __name__ == '__main__':
        get_text()

  • 相关阅读:
    Kubernetes 集成研发笔记
    Rust 1.44.0 发布
    Rust 1.43.0 发布
    PAT 甲级 1108 Finding Average (20分)
    PAT 甲级 1107 Social Clusters (30分)(并查集)
    PAT 甲级 1106 Lowest Price in Supply Chain (25分) (bfs)
    PAT 甲级 1105 Spiral Matrix (25分)(螺旋矩阵,简单模拟)
    PAT 甲级 1104 Sum of Number Segments (20分)(有坑,int *int 可能会溢出)
    java 多线程 26 : 线程池
    OpenCV_Python —— (4)形态学操作
  • 原文地址:https://www.cnblogs.com/Mram/p/10542835.html
Copyright © 2011-2022 走看看