怎樣獲取中國大學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我……(卑微=____=)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章