python计算机二级综合应用,提取《八十天环游地球》题目和词频统计。

问题描述:

python计算机二级综合应用,提取《八十天环游地球》题目和词频统计。

问题解答:

本人写的代码相比准确答案比较拙劣,仅提供一种思路,仅作参考。

第一问:

针对本问题,我以"章  "(两个英文空格)作为突破点,如果某一行中出现了这个关键点,说明他就是章节标题。

# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准

fi = open("八十天环游地球.txt", encoding="utf-8")
fo = open("八十天环游地球-章节.txt", "w", encoding="utf-8")
lines=fi.readlines()
for line in lines:
    if "章 " in line:
        fo.write(line)
        

fi.close()
fo.close()

第二问:

针对本问题,我首先分析了一下文件内容,以"章  "(两个英文空格)作为突破点,将其作为分割得到每一章的大部分内容,缺失了几个字,不影响整体的词频统计。打印输出包含了标题的第几章,所以我将章节题目以空格作为分割得到第几章的列表。lt1和lt2两个列表包含打印输出的内容。

# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准

import jieba
fi1 = open("八十天环游地球.txt", "r", encoding="utf-8")
fi2 = open("八十天环游地球-章节.txt", "r", encoding="utf-8")
ls=fi1.read().split("章 ")
lt1=[]
for i in ls[1:]:
    d={}
    i=jieba.lcut(i)
    for j in i:
        if len(j)>=2:
            d[j]=d.get(j,0)+1
            ls=list(d.items())
    ls.sort(key= lambda x : x[1],reverse=True)
    lt1.append(ls[0])
lines = fi2.readlines()
lt2=[]
for line in lines:
    line=line.strip("\n")
    line=line.split(" ")[0]
    lt2.append(line)
for i in range(len(lt2)):
    print(lt2[i]+" "+lt1[i][0]+" "+str(lt1[i][1]))

第一问的标准答案如下:

# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准

f = open("八十天环游地球.txt", encoding="utf-8")  # 读取源文件
fi = open("八十天环游地球-章节.txt", "w", encoding="utf-8")  # 打开新文件
for i in f:  # 遍历文本
    text = i.split(" ")[0]  # 章节中有空格进行分割 例如:第二章 路路通认为他总算找到了理想的工作
    if text[0] == "第" and text[-1] == "章":  # 取出第一段文本,如果首字符是第尾字符是章,代表是章节
        fi.write("{}\n".format(i.replace("\n", ""))) # 格式化保存
fi.close()
f.close()

第二问的标准答案如下:

# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准

import jieba

f1 = open("八十天环游地球.txt",'r',encoding="utf-8")
ls = f1.read().split('□ 作者:儒勒·凡尔纳')
f1.close()
Ls1 = []
for i in range(len(ls)-1):
    d = {}
    lt = jieba.lcut(ls[i])
    for word in lt:
        if 2 <= len(word):
            d[word] = d.get(word,0)+1
    items = list(d.items())
    items.sort(key = lambda x:x[1],reverse = True)
    Ls1.append(items[0])
f2 = open('八十天环游地球-章节.txt','r',encoding = 'utf-8')
Ls0 = []
for line in f2.readlines():
    Ls0.append(line.strip('\n').split(' ')[0])
for j in range(len(Ls0)):
    print('{} {} {}'.format(Ls0[j],Ls1[j][0],Ls1[j][1]))
f2.close()

 

总结下来,就是选择的分割点不一样,答案的第二问分割点选区的更好,而我的第一问的分割点选取的更好。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值