python統計喜歡的小說主角出場次數


    這周老師布置了一項作業,讓我們回去將自己喜歡的小說里面的主角出場次數統計出來,我對這個充滿了興趣,但我遇到了三個問題:

(1)一開始選了一部超長的小說(最愛之一),但是運行時老是不行,老是顯示下圖錯誤:

(2)我一開始是像書本那樣直接把txt文件名打上去,類似於open(‘two.txt’,'r').read(),但總是出現一下一行字:

(3)三個字的人名總是會有幾個人只打了兩個字

一、撇開這些問題,開始寫代碼:

    我剛開始以為是小說太長了,運行不了,就找了一部短一些的小說,我最愛的小說——《我和你差之微毫的世界》

結果成功了

代碼如下:

import jieba
txt=open("d:\\《我和你差之微毫的世界》北傾.txt","r").read()
others={'有些','自己','已經','知道','時候','剛剛','一下','看着','沒有','像是','一個','一眼','好像','什么','聲音','這樣','起來','這么','回來','就是','微微','一聲',
        '這個','這才','目光','看見','覺得','過來','不是','怎么','現在','突然','一會','還是','幾分','一起','頓時','回去','眼神','安然','只是','原本','出去','似乎',
        '眼睛','下來','整個','手指','兩個','因為','一直','電話','語氣','問道','出來','心里','開始','門口','這里','那么','房間','那個','格外','燈光','時間','回答','一般','轉身',
        '幾乎','事情','坐在','說話','表情'}
       
words= jieba.lcut(txt)   #jieba將txt分成多個分詞
counts={}    #建立一個空字典
for word in words:    #這里的word是指遍歷從txt的第一個分詞到最后一個分詞
    if len(word)==1:   
        continue
    elif word=="小叔" or word=='溫少遠'or word=='溫少':
        rword="小叔"
    else:
        rword=word
    counts[rword]=counts.get(rword,0)+1
for word in others:
    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))

結果:

實在是太開心啦啦啦啦,雖然others那里耗費了很長時間,做出來還是很開心的。

二、解決問題(1)

      我還是對第一篇小說百思不得其解,上網百度了后才知道,原來是我第一篇小說另存為是選擇編碼方式不是utf-8,只要改成utf-8就可以了

我改了一下代碼,換成了第一部超長小說的統計,代碼就不貼了,類似的,但不知道為什么厲爵風只出現了厲爵(有待考證???):

三、解決問題(2)

上百度搜一下,找到了一個解決方法:把命令改為txt=open(‘d:\\two.txt’,'r').read()就可以了

原因:在python中‘\’為轉義字符,要想輸出‘\’,要么多加一個"\",寫成\\,要么在字符串前加r,txt=open(r'd:\\two.txt','r').read()

四、解決問題(3)

只要在程序里添加一個jieba.add_word()就可以自定義一個新的分詞了,但該新的分詞只對該程序有效,並不是永久添加

import jieba
jieba.add_word('厲爵風')
txt=open("d://two.txt","r",encoding='utf-8').read()
others={'有些','自己','已經','知道','時候','剛剛','一下','看着','沒有','像是','一個','一眼','好像','什么','聲音','這樣','起來','這么','回來','就是','微微','一聲','說道',
        '這個','這才','目光','看見','覺得','過來','不是','怎么','現在','突然','一會','還是','幾分','一起','頓時','回去','眼神','安然','只是','原本','出去','似乎',
        '眼睛','下來','整個','手指','兩個','因為','一直','電話','語氣','問道','出來','心里','開始','門口','這里','那么','房間','那個','格外','燈光','時間','回答','一般','轉身',
        '幾乎','事情','坐在','說話','表情'}
       
words= jieba.lcut(txt)   #jieba將txt分成多個分詞
counts={}    #建立一個空字典
for word in words:    #這里的word是指遍歷從txt的第一個分詞到最后一個分詞
    if len(word)==1:   
        continue
    elif word=="厲子霆" or word=='Len'or word=='LG':
        rword="LG"
    else:
        rword=word
    counts[rword]=counts.get(rword,0)+1
for word in others:
    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))

結果如圖:

 

 

 

小結:問題都解決啦,超級開心的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM