怎样获取中国大学MOOC字幕 并制作笔记/可搜索的文档

声明

本文中所涉及的图片以及其他材料内容,均为相关MOOC字幕获取过程当中的操作截图或代码示例,不代表个人的立场、观点。本文的核心内容是技术操作的相关说明。

求求管理员别卡我了,期末季好不容易写了一篇嘤嘤嘤我太难了(=___=)

前言

对于一个开卷的在线考试来说,最大的好处就是计算机可以帮助我们搜索。
但是数据库总是要建的吧~
于是我做了一个尝试,也就是把MOOC字幕整理成可搜索的文档。

第一步:获得一手资料

首先我发现了这样的经验
然而时间有一点久远,今年MOOC的投入必然加大了,不至于把资料还摆在触手可及的位置上。

另外:而且按Ctrl+Shift+I就可以进入Network界面了,哪有那么麻烦

然后就各种搜索发现了神器,见这位开源巨佬的GitHub仓库

没学过Python,按作者说的和自己的理解,下载后在项目文件下输入

pyinstaller Mooc.spec
python -m Mooc

然后至少选择标清(否则没有这个文件),即可发现对应的文件夹下出现了字幕文件*.srt

第二步:汇总.srt字幕文件

经过一系列bat和wsl shell的尝试,最终发现都不如直接解散文件夹来的利索。

为了解散一个文件夹下所有的子文件夹

  • 先进入这个文件夹,按Ctrl+F或直接点工具栏搜索框
  • 在搜索框里填*.* 就会搜索出当前文件夹下的所有文件和子文件夹
    在这里插入图片描述
  • 空白处右键,选择按类型排序,同类的文件排在一起,随后就可以多选文件夹之外的所有文件,无论是解散文件夹还是操作所有子目录下的文件,都是很方便的。
    在这里插入图片描述

文件名按照要求要涂掉了……

第三步:格式清洗

为了防止操作过程失手,我们采用复制一套副本的方式。比如这样:
在这里插入图片描述

名称的清洗

在此之前,由于名称都有一个奇怪的前缀。这是由中国大学MOOC网站的周学制划分的。所以还得将其整理一下。
别用正则了,多麻烦啊 使用VSCode的多行光标,用很直观、人性化的操作方式快捷操作几十行,未尝不可

这个图片虽然有碍观瞻……,但是为了说明怎么使用多行光标,,,
在这里插入图片描述

对于更名,由于排序方式(比如10会排在2前面这种智障 问题)、编码(中文很容易乱)的问题说实话就是不会脚本,使用脚本将已经清洗好的名称依次重命名,会出现很多麻烦

于是这里采用了手动粘贴……不过因为文件夹里的顺序和name文件是一致的,所以问题也不太大。很快就粘完了。

文件的清洗

这时候,更麻烦的问题出现了……
如何清洗这样的文件?
在这里插入图片描述
为了清洗固定结构(幸好是固定的啊!!)的.srt文件,我们编写了如下的C++程序

#include <bits/stdc++.h>
using namespace std;
vector<string> name;
int main()
{
    freopen("name.txt", "r", stdin);
    string tmp; int t, l = 0, cnt = 0;
    while (getline(cin, tmp))
        name.push_back(tmp);
    ifstream fin("[1.1.1]--1.课程开设时代背景.srt", ios::in);
    ofstream fout("cooked.txt", ios::app);
    if (!fin) cout << "open wrong" << endl;
    while (!fin.eof())
    {
        fin >> t;
        fin.ignore('\n');
        if (t <= l) 
        	cout << name[cnt++] << endl;;
        getline(fin, tmp);//即是能启动,到这里也不会读入
        getline(fin, tmp);
        fout << tmp;
        fin.ignore('\n');
    }
    return 0;
}

但即便是单个文件(如程序中给出的那个),也不能很好地读入到如下的C++文件当中。
合并后的直接就无法启动。大数据量是致命的。

Vim的奇偶行删除法

所幸文件仅有几十个 =______=
又是一个……体现我超低智商的操作。

当时被气蒙了,没有想到vim是可以打开几万行的文件的啊!!!那就先合并再操作吧~尽管那样的话没有标题,也算有得有失吧(每个文件结尾插入4行#,然后再删减的时候,既可以保留结束符#,也可以保证奇偶结构不被破坏)

这个结构
可以先删除偶数行,再删除奇数行
于是,简化成了三条指令,即

vim [文件名]
:%normal jdd #删除偶数行
:%normal jkdd #删除奇数行

第四步:合并文件

如果事先做了这一步,那么清洗数据本来是一件很简单的事情。可惜……

有章节号的方案

一个简单的bat:

@echo off
chcp 65001								#保证中文可用
set work_path=%cd%						#为了正则查找/r模式可用
for /r %work_path% %%i in (*.srt) do (	#/r模式模糊查找
	echo %%i >> raw.txt					#echo直接输入名称,作为章节号
	type %%i >> raw.txt					#type是将文件后缀到指定文件后面
	)
pause

无章节号的方案

如果不需要章节号,只用‘#’作一节结束的标记的话,也可以

@echo off
chcp 65001
set work_path=%cd%
for \r %work_path% %%i in (*.srt) do echo '###' >> raw.txt #最好插入四行,否则会影响奇偶相消
pause

然后使用

copy *.srt raw.txt

即可合并。

半分钟可以干我手动一个个文件半小时的活。

其实如果设计一下合并的脚本,好像也可以加标题比如空行+空行+标题+空行。这个稳定的四行结构非常重要。

第五步:word格式化

这个随个人了,我目的只是为查询建立一个数据库。那就不搞了吧。留个目录就行,查找起来效率也挺高。二十多万字……幸好没有打算手动记。

在这里插入图片描述

结语

如果有需要北大版史纲的可以cue我……(卑微=____=)

猜你喜欢

转载自blog.csdn.net/weixin_45502929/article/details/106363436