天天看點

複合資料類型,英文詞頻統計

作業來源: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()