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))

结果如图:

小结:问题都解决啦,超级开心的

原文地址:https://www.cnblogs.com/panqiaoyan/p/10615489.html