Python起步之字典案例(詞頻統計)

2021-08-04 03:26:42 字數 3067 閱讀 4696

通過的字典型別將一篇存放在文字檔案中英文文章中的所有單詞出現的次數進行統計(下面的程式只支援英文,因為漢語會牽扯到語義等問題,還有個問題是統計出來的大多是冠詞,或者是情態動詞,要想真正用這種思想來獲取文章大意還需進一步優化,但是這仍然是獲取文章大意的一種不錯的思路),並繪製柱狀統計圖:

# wordcount.py

# 統計一篇文章中各種單詞出現的頻率,並且輸出頻率最高的前十個,並繪製柱狀圖

import turtle

#設定全域性變數

count = 10 #詞頻顯示的個數

data = #建立乙個列表 記錄單詞詞頻陣列 作為y軸資料

words = #建立words列表,機率出現的片語 作為x軸資料

yscale = 6 #y軸顯示放大倍數 可以根據詞頻數量進行適當調節

xscale = 30 #x軸顯示放大倍數 可以根據count數量進行調節

#繪製柱狀圖

#從point1點到point2點繪製線段

def drawline(t,x1,y1,x2,y2):

t.penup()

t.goto(x1,y1)

t.pendown()

t.goto(x2,y2)

#在座標(x,y)處寫漢字

def drawtext(t,x,y,text):

t.penup()

t.goto(x,y)

t.pendown()

t.write(text)

#繪製柱體:

def drawrectangle(t,x,y):

x = x*xscale

y = y*yscale

drawline(t,x-5,0,x-5,y)

drawline(t,x-5,y,x+5,y)

drawline(t,x+5,y,x+5,0)

#批量繪製柱體

def drawbar(t):

for i in range(count):

drawrectangle(t,i+1,data[i])

#繪圖:

def drawgraph(t):

#繪製x/y座標軸線

drawline(t,0,0,360,0)

drawline(t,355,-3,360,0)

drawline(t,360,0,355,3)

drawline(t,0,300,0,0)

drawline(t,-3,295,0,300)

drawline(t,0,300,3,295)

#為x軸新增座標及其描述

for x in range(count):

if x == 0:

drawtext(t,-10,-20,'0')

x += 1 #右移一位,避開原點

drawtext(t,x*xscale-4,-20,(words[x - 1]))

drawtext(t,x*xscale-4,data[x-1]*yscale+10,data[x-1])

drawtext(t,355,-20,'words')

drawtext(t,-18,307,'numbers')

drawbar(t)

#開始統計詞頻:

#對文字的每一行統計詞頻的函式

def precessline(line, wordcounts):

#用空格代替標點

line = replacepunctuations(line)#如果不進行轉換會用多種標點存在,轉換後 可以統一用空格處理

#從每一行獲取乙個單詞

words = line.split()#將字串進行列表轉換

for word in words:

if word in wordcounts:

wordcounts[word] += 1

else:

wordcounts[word] = 1#相當於增添新的元素

#空格替換標點的函式

def replacepunctuations(line):

for ch in line:

if ch in '~@#$%^&*()_-+=<>?/,.:;{}|\'""':

line = line.replace(ch,' ')#用空格將標點替換

return line

#主函式:

def main():

#開啟檔案操作:

file = open(filename,'r')

#建立用於統計詞頻的空字典

wordcounts = {}

for line in file:

precessline(line.lower(),wordcounts)

#從字典中獲取資料對:(items() 函式以列表返回可遍歷的(鍵, 值) 元組陣列。)

pairs = list(wordcounts.items())

#列表中的資料對交換位置,資料對排序

items = [[x,y] for (y,x) in pairs]

items.sort()

#輸出count個詞頻的結果:

for i in range(len(items)-1,len(items)-count-1,-1):

print(items[i][1] + '\t' + str(items[i][0]))

#關閉檔案

file.close()

#根據詞頻結果繪製柱狀圖:

#設定圖形介面的屬性

turtle.title('詞頻統計柱狀圖')

turtle.setup(900,750,0,0)

t = turtle.turtle()

t.hideturtle()

t.width(3)

#繪製資料圖

drawgraph(t)

print('統計完成!')

if __name__ == '__main__':

main()

輸出結果:

文字詞頻統計是字典嗎 Python 文字詞頻統計

很多時候需要對一篇文章統計其中多次出現詞語,進而分析文章的內容,這就需要用到詞頻統計。詞頻統計就是累加問題,即對文件中每個詞設定乙個計數器,詞語每出現一次,相關計數器就加一次。def gettext text open ceshi.txt r read text text.lower for ch ...

python起步之安裝(一)

一 python安裝 3.然後安裝就可以用了。二 numpy,scipy,matplotlib安裝 根據個人需要我需要安裝numpy scipy以及matplotlib。is a python 2 and 3 compatibility library 這樣幾經周折,matplotlib就可以正常使...

Python起步之常見錯誤

error 1 file e python pystack.py line 50,in main st pystack nameerror name pystack is not defined 這是一類最常見的錯誤了,這一類錯誤可認為是命名錯誤,即程式中個別變數或者是類名,函式名,物件名沒有定義引...