分析哈姆雷特

G1-大数据背景下习近平新年贺词词频分析.pptx

  1. #e10.1CalHamlet.py
  2. def getText():
  3. txt = open("../dataset/shakespeare-hamlet.txt", "r").read()
  4. txt = txt.lower()
  5. for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
  6. txt = txt.replace(ch, " ") #将文本中特殊字符替换为空格
  7. return txt
  8. hamletTxt = getText()
  9. words = hamletTxt.split()
  10. counts = {}
  11. for word in words:
  12. counts[word] = counts.get(word,0) + 1
  13. items = list(counts.items())
  14. items.sort(key=lambda x:x[1], reverse=True)
  15. for i in range(10):
  16. word, count = items[i]
  17. print ("{0:<10}{1:>5}".format(word, count))

运行结果:

  1. the 993
  2. and 862
  3. to 683
  4. of 610
  5. i 547
  6. you 522
  7. a 509
  8. my 502
  9. it 415
  10. in 384

改进版:排除了部分停用词

excludes = {"the","and","of","you","a","i","my","in"}
def getText():
    txt = open("../dataset/shakespeare-hamlet.txt", "r").read()
    txt = txt.lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt = txt.replace(ch, " ")   #将文本中特殊字符替换为空格
    return txt
hamletTxt = getText()
words  = hamletTxt.split()
counts = {}
for word in words:            
    counts[word] = counts.get(word,0) + 1
for word in excludes:
    del(counts[word])    
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True) 
for i in range(10):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

三国演义词频统计

import jieba
excludes = {}#{"将军","却说","丞相"}
txt = open("../dataset/水浒传-UTF8.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:  #排除单个字符的分词结果
        continue
    else:
        counts[word] = counts.get(word,0) + 1
for word in excludes:
    del(counts[word])
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True) 
for i in range(15):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

改进版:同一人物的不同名字

import jieba
# excludes = {"将军","却说","荆州","二人","不可","不能","如此"}
txt = open("../dataset/水浒传-UTF8.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:
        continue
    elif word == "诸葛亮" or word == "孔明曰":
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word == "丞相":
        rword = "曹操"
    else:
        rword = word
    counts[rword] = counts.get(rword,0) + 1
# for word in excludes:
#     del(counts[word])
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True) 
for i in range(5):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))