亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用Python統計瓦爾登湖的詞頻

系統 1909 0

在文本處理中,我們經常需要對文本中的單詞出現頻率做一個統計,本文以英文小說《瓦爾登湖》為例,統計一下作者最喜歡用什么單詞,他們各自的出現頻率如何。

首先需要《瓦爾登湖》的文本:點擊下載《瓦爾登湖》(https://pan.baidu.com/s/1o75GKZ4)


思路分析:

  1. 首先,要打開文件,把里面的內容寫到字符串里面。
  2. 接著,要對字符串進行分詞,分割成獨立的單詞。
  3. 最后,根據每個單詞進行詞頻統計。

把下載好的“Walden.txt”放到桌面,復制一下完整的路徑名,特別注意:

Windows系統下,默認的文件名路徑子級和父級之間可能是用反斜杠“ \?”表示的,而在Python中,子級和父級之間用正斜杠“ / ”表示。

文件打開的時候,如果出現以下錯誤:

            
              UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
            
          

說明文件編碼格式異常,解決辦法:在文件打開的語句中添加 encoding = '?utf-8 ',注意添加在open( )函數的最后。

            
              with open(path,'r') as text:
# 添加utf-8編碼支持,原語句改為:
with open(path,'r',encoding='utf-8') as text:
            
          

使用stringlist.split()函數進行分詞,使用stringlist.count()函數進行統計詞頻

代碼如下:

            
              path = 'C:/Users/xiaokai/Desktop/Walden.txt'

with open(path,'r',encoding='utf-8') as text:    # 讀入文本
    words = text.read().split()                  # 開始分詞
    print(words)
    for word in words:
        print('{}--{} times'.format(word,words.count(word)))    # 把單詞和詞頻分別打印出來
            
          

?運行結果

            
              tried.--1 times
Whatever--4 times
have--660 times
been--167 times
thy--23 times
failures--3 times
hitherto,--1 times
"be--1 times
            
          

分析問題:

發現輸出有點怪異,出現了 “tried. ”,“hitherto,” 這樣的單詞,還有更多的問題:

  1. 單詞前后跟了“,”,“.”,“?”等各種各樣的符號。
  2. 有許多單詞被重復統計了。
  3. 有一些單詞,例如‘“Some”和“some”是同一個單詞,但是因為“Some”首字母大寫也被認為是兩個單詞。

因此作出更多的改進:

  1. 去掉首尾連在一起的字符串,并且全部轉換成小寫字母。
  2. 創建一個單詞集合,集合的性質保證了不會出現重復的單詞,確保不會出現重復統計單詞的現象。
  3. 創建一個字典,key為文本里出現的單詞,value為單詞在文本中出現的頻率。
  4. 在字典中,根據詞頻順序打印鍵值對。

改進之后的代碼如下:

            
              import string

with open(path,'r',encoding='utf-8') as text:

    # 1. 首先進行分詞
    raw_words = text.read().split()

    # 2. 把每個單詞首尾連在一起的符號去掉,大寫字母統一成小寫
    words_list = [word.strip(string.punctuation).lower() for word in raw_words]

    # 3. 數據結構轉換成集合,這里重復的單詞會被自動丟棄
    words_set = set(words_list)

    # 4. 創建字典鍵值對:key為單詞,value為單詞出現的頻率
    # 冒號左邊為單詞,冒號右邊為詞頻
    words_dict = {keyword:words_list.count(keyword) for keyword in words_set}

# 5. 根據words_dict中value的值對字典進行排序輸出

# 這里采用了lambda表達式,lambda word: word[1]表示輸入一個word詞條,返回word[1](詞頻)
# word是一個詞條,word[0]是單詞,word[1]是單詞出現的頻率

for word in sorted(words_dict.items(), key = lambda word: word[1], reverse = True):
    print('{}--{} times'.format(word[0],word[1]))
            
          

代碼解釋:

  • strip()函數的作用是去除單詞首尾的符號,其中string.punctuation就是一個字符集,包含!@#¥%&*等符號,使用strip(string.punctuation)可以去除首尾的這些符號。
  • word.lower()函數把字母全部轉換成小寫。
  • sorted()函數對字典進行排序,默認對key進行排序,但這里對value進行排序,所以這里使用lambda表達式,在key = lambda word: word[1]中,返回值是word[1],也就是words_dict中的value。

參考博客:

Python strip()方法 | 菜鳥教程
http://www.runoob.com/python/att-string-strip.html

python字典按照value進行排序 - ketchup_醬 - 博客園
https://www.cnblogs.com/timtike/p/6562402.html


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲一区二区三区香蕉 | 激情在线视频 | 日韩亚射吧 | 亚洲精品麻豆一区二区 | 日本一区中文字幕 | 色视屏| 99久久精品国产一区二区成人 | 福利影院在线播放 | 99爱爱| 久久精品国产亚洲麻豆 | 成人在线观看国产 | 色拍拍欧美视频在线看 | 欧美一区二区三区网站 | 牛牛本精品99久久精品 | 国产一国产一级毛片视频在线 | 欧美性生活在线 | 亚洲精品一区二区伦理 | 精品国产日韩亚洲一区91 | 中文字幕在线观看免费视频 | 国产一级淫片a免费播放口欧美 | 在线理论视频 | 沧元图免费观看 | 亚洲欧美日韩中文综合在线不卡 | 亚洲自拍小视频 | 日本免费黄色录像 | 有码中文字幕在线观看 | 欧美成人免费毛片 | 国产中文| 日本精品在线观看视频 | 麻豆精品永久免费视频 | 伊人久久波多野结衣中文字幕 | 日本不卡视频在线观看 | 天天视频入口 | 天天综合天天看夜夜添狠狠玩 | 99久久免费观看 | 国产在线中文字幕 | 色天使色婷婷丁香久久综合 | 国产男女爱视频在线观看 | 欧美一级人与动毛片免费播放 | 天天躁日日躁成人字幕aⅴ 天天躁日日躁狠狠躁黑人躁 | 男人的天堂免费视频 |