栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python二级】红楼梦

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python二级】红楼梦

题目描述

文本文件“红楼梦. txt”中包含了《红楼梦》小说前20章内容,“ 停用词. txt”包含了需要排除的词语。请修改模板,实现以下功能。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

1.对“红楼梦. txt”中文本进行分词,并对人物名称进行归-化处理,仅归一化以下内容:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

凤姐、凤姐儿、凤丫头归-为凤姐
宝玉、二爷、宝二爷归-为宝玉
黛玉、颦儿、林妹妹、黛玉道归-为黛玉
宝钗、宝丫头归一为宝钗
贾母、老祖宗归-为贾母
袭人、袭人道归一为袭人
贾政、贾政道归一为贾政
贾链、琏二爷归一为贾琏
2.不统计“停用词.txt"文件中包含词语的词频(名字必须大于一个字)。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

3.提取出场次数不少于40次的人物名称,将人物名称及其出场次教按照递减排序,保存到result.csv文件中,出场次数相同的.则按照人物名称的字符顺序排序。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输出示例‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

宝玉,597
凤姐,296
一个,179
如今,132
黛玉,113
一面,112

import jieba

f = "红楼梦.txt"
sf = "停用词.txt"
fo=open(f,'r',encoding='utf-8')
txt=jieba.lcut(fo.read())
with open(sf,'r',encoding='utf-8') as f:
    m=f.read().splitlines()
txt0=[x for x in txt if x not in m]

counts={}
for word in txt0:
    if len(word)==1:
        continue
    elif word == '凤姐儿' or word == '凤丫头':
        rword = '凤姐'
    elif word == '二爷' or word == '宝二爷':
        rword = '宝玉'
    elif word == '颦儿' or word == '林妹妹' or word == '黛玉道':
        rword = '黛玉'
    elif word == '宝丫头':
        rword = '宝钗'
    elif word == '老祖宗':
        rword = '贾母'
    elif word == '袭人道':
        rword = '袭人'
    elif word == '贾政道':
        rword = '贾政'
    elif word == '琏二爷':
        rword = '贾琏'
    else:
        rword = word
    counts[rword] = counts.get(rword, 0) + 1
items=list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
with open('result.csv','a')as f:
    for i in items:
        key,value=i
        if value <40:
            break
        f.write(key+','+str(value)+'n')
        print(key+','+str(value))
简要说明:

这道题实际上是完成两个事情:1、把红楼梦文章里包含停用词的内容删去;2、统计人物出场次数,同时注意一个人物在书里会有很多叫法,然后把统计出的内容写在一个csv文件里。

实现第一步要做的事:1、把红楼梦用结巴分词分好放进名为txt列表里 2、用f.read().splitlines()方法,把停用词转化为一个列表,每个元素是一个停用词。3、用列表的自定义方式,对txt每一个元素x遍历,如果它不在停用词列表里,就放入新的列表txt0,这样就完成了停用词的删去。

实现第二步要做的事:定义一个空字典,然后遍历前面做好的txt0,如果元素长度为1,证明是标点或者空格,直接用continue跳过这个元素。如果是我们想要的人名,就作一些分类,并把rword改成归一的那个名字。然后结尾用count[rword]=count.get(rword,0)+1,去把名字和次数分别作为键和值放进这个字典里。

然后是排序(常见的列表排序方法),输出。key,value=i,就是把每个元组的第一个第二个元素分别赋值给key和value,然后是对value值的判断,大于等于40就输出。注意写文件的时候,不要漏掉逗号以及’n’。print()函数由于自带换行,就不用加’n’。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号