python英文與中文的詞頻統計

一、統計英文單詞,python

# 1.準備utf-8編碼的文本文件file(已在文件夾中定義了 一個名叫「head.txt.rtf」文本文件,詳情請見截圖)

def getTxt(): #3對文本預處理(包括)
    txt = open('head.txt.rtf').read()  #2.經過文件讀取字符串 str
    txt = txt.lower()#將全部的單詞所有轉化成小寫
    for ch in ",.!、!@#$%^'": #將全部除了單詞之外的符號換成空格
        txt.replace(ch, ' ')
    return txt

#四、分析提取單詞
txtArr = getTxt().split()
#五、單詞計數字典 counts = {} for word in txtArr: counts[word] = counts.get(word, 0) + 1 #六、將字典轉換爲列表 countsList = list(counts.items()) countsList.sort(key=lambda x:x[1], reverse=True) #8.輸出TOP(20) for i in range(20): word, count = countsList[i] print('{0:<20}{1:>10}'.format(word,count))

 

 

 

 

 

用到的知識點, split數組

str.split(str="", num=string.count(str)).
  • str -- 分隔符,默認爲全部的空字符,包括空格、換行(\n)、製表符(\t)等。
  • num -- 分割次數。
  • 實例:
    #!/usr/bin/python
    str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
    print str.split( );
    print str.split(' ', 1 );
    
    輸出:
    ['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
    ['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
    

     

counts.get(word, 0) + 1這個表達式表明的意思是,統計counts中的單詞數,若是有word,就+1,沒有word就返回0;這是一個統計單詞數的方法,雖然統計完後,沒有直接方法放到字典中,但它確實存在。

counts.items():以列表返回可遍歷的(鍵, 值) 元組數組
實例:
#!/usr/bin/python
# coding=utf-8
dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
print "字典值 : %s" %  dict.items()
# 遍歷字典列表
for key,values in  dict.items():
    print key,values

結果:字典值 : [('Google', 'www.google.com'), ('taobao', 'www.taobao.com'), ('Runoob', 'www.runoob.com')]
Google www.google.com
taobao www.taobao.com
Runoob www.runoob.com
 

 

countsList.sort(key=lambda x:x[1], reverse=True):在這道題中,顯然是排序,以從大到小的順序排列,但有了lambda x:x[1]之後,就是以元組中的第二個元素來進行排序,顯然第二個元素也會帶動第一個元素。這樣就能夠,將列表中每一個元組也排序了。後面的reverse = true是從大到小排列,false則反之。



range(start, stop[, step]):
  • start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價於range(0, 5);
  • stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  • step:步長,默認爲1。例如:range(0, 5) 等價於 range(0, 5, 1)
>>>range(10)        # 從 0 開始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)     # 從 1 開始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)  # 步長爲 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)  # 步長爲 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 負數
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]

 

print('{0:<20}{1:>10}'.format(word,count)):這個語法的意思是,將word空出20個佔位符,count佔10個佔位符;而大於號與小於號決定word與count是居左仍是劇右。-------------------------------------------------------------------------------------------------------------------
相關文章
相關標籤/搜索