3 Part I:讀考卷、整理成表格(TODO1,配分 5%)

結論:把考卷的純文字檔,整理成一張三欄的表格:題目、大類(語意/語法)、小類。這一步沒有難度,重點是看懂考卷的格式。

為什麼要整理成表格:後面 TODO2、TODO6 要按大類、小類分開算正確率,所以每一題都要先標好它屬於哪一類。

考卷原本長這樣

: capital-common-countries        ← 冒號開頭:小類的「標題」,不是題目
Athens Greece Baghdad Iraq        ← 一行一題,四個字,第四個是答案
Athens Greece Bangkok Thailand
...
: capital-world                   ← 下一個小類開始
...

整份檔案有 14 個冒號標題。前 5 個屬於語意(Semantic),後 9 個屬於語法(Syntactic)。模板的註解已經提示了這件事。

程式(逐行講解)

questions, categories, sub_categories = [], [], []   # 準備三個空籃子
n_headers = 0          # 數「目前讀到第幾個標題」
current_sub = None     # 記住「目前在哪個小類」
for line in data:                        # 一行一行看
    if line.startswith(": "):            # 冒號開頭 → 這是標題
        n_headers += 1                   #   標題數 +1
        current_sub = line               #   記住新的小類名稱
        continue                         #   標題不是題目,跳過
    questions.append(line)               # 題目放進籃子
    categories.append("Semantic" if n_headers <= 5 else "Syntactic")   # 第 1~5 個標題底下 → 語意
    sub_categories.append(current_sub)   # 小類就是最近一次看到的標題

跑出來的結果

⟦R:todo1_out⟧

我另外比對過:這張表跟老師在 GitHub 上提供的 questions-words.csv 一模一樣(19,544 列)。所以這一步做對了。

考試可能問
「考卷(Google analogy 資料集)分哪兩大類?各舉一個例子。」 → 語意類(king queen man woman)、語法類(big bigger small smaller)。
所以對你的影響是:14 個小類的名字後面每一節都會用(用語表有固定譯名),先記住「前 5 個是語意類」就好。