2024年1月1日 星期一

利用 Google 試算表分解題庫題幹及選項

2024年1月1日 星期一

製作 HTML5 FUN 遊戲時,如果能利用現有的題庫當基礎,應該會快很多。以前我會使用教科書商提供的命題光,將題庫輸出成 CSV 格式;如果是自己出的考卷文件檔案,則必須多一道工去解析出題幹、選項、答案,早期都是用 perl、PHP,主要是它們都可以在找出題目字串的規則以後,使用 Regular Expression (regex) ,將規則套進去,進行字串的解析、分解、置換。只要規則設對了,簡單而有效率。在 Google 試算表的主選單 [資料] 中,有一個 [將文字分隔成不同欄] ,如果是簡單的將字串分欄,可以玩玩,但是複雜一點的,就得用別的方法了。Google 試算表也有提供  Regular Expression 相關的公式可供運用,底下的試算表中,記錄幾個由網路中找到的試卷,試著將其中的題目解析出題庫及選項。

先來看看使用了哪些 Google 試算表的公式:

  • CONCATENATE :將指定的範圍的多個內容合成一個字串。當我們將考卷中的題目貼到試算中,如果一題被分成多行時,就需要使用這個公式來將全部的題目先合成單行,再找出分離各題的規則,使用 REGEXREPLACE 和 SPLIT 來重新分開各題。
  • REGEXREPLACE: 將符合規則的字串,置換為新字串。在本篇中,主是用來將題目的開頭(題號、括號...)或是選項的符號,置換為一個題目中不太會使用到的特殊符號(),方便之後以這個特殊符號來分離題目,或是題目的各個選項。
  • SPLIT:以指定的字,將字串分解後,往右填入各儲存格。主要是用來分離題目,及題目中的各個選項。
  • TRANSPOSE:將由左往右的結果,變成由上往下。主要應用在將題庫分離時,因為使用 SPLIT 處理後是由左往右(橫向)的結果,而我們需要的是由上往下填入各行,所以利用 TRANSPOSE 來轉換填入儲存格的方向。
  • ARRAYFORMULA:公式套到多行或陣列。這個公式可以讓我們不用去設區塊選取,不用一直按 Ctrl + Enter。
  • REGEXEXTRACT:以規則找出指定的內容。主要應用在找出正確答案。

考卷的題目的文字基本上有規則可循,所以我們可以利用 Regular Expression 來解析,底下介紹一些簡單的規則語法:

  • 保留字,因為 Regular Expression 會使用一些符號,如果題目中有這些符號,我們就必須在前面多加一個反斜線,例如括號和點:
    • \(
    • \)
    • \.
  • 數字:
    • \d
    • \d+
    • \d*
    • [0-9]
    • [1-4]
  • 英文字母
    • [a-z]
    • [A-Z]
    • [A-D]
  • 空白字元(包括空格、跳格、換行......)
    • \s
    • \s+
    • \s*
  • 代表數量的符號
    • + : 一次以上
    • * : 零次以上
    • {1} : 一次
    • {3} : 三次
    • |

像選擇題的開頭,一般會用「( )1.」、「( )2.」、「( )3.」這種括號中有空格供填答,再加題號的格式,Regular Expression 規則就這樣設:

  • \(\s+\)\s*\d+\.

解譯一下:「左括號」「空格一個以上」「右括號」「空格零個以上」「數字一個以上」「一個點」。

如果題號、點是放在前面,就改成:

  • \d+\.\s*\(\s+\)

解譯一下:「數字一個以上」「一個點」「空格零個以上」「左括號」「空格一個以上」「右括號」。

如果多題題目已合為單行字串時,我們要找出所有符合的,就將前面的規則用括號包起來,變成:

  • (\(\s+\)\s*\d+\.)
  • (\d+\.\s*\(\s+\))

同樣的原理,要找出選擇題的各個選項的話,假設選項是用 (A)...(B)...(C)...(D),那就用這樣的規則:

  • \([A-D]\)

這裡用了 [A-D] 表示 ABCD 都符合規則。

因為選項不會只有一個,所以記得要用括號包起來,才能找出所有一樣規則的選項:

  • (\([A-D]\))

不過似乎有的人會使用全形的字母,那只好改為:

  • (\([ABCD]\))
有的人選項在考卷上看到的是圈圈中加上數字,但是貼到試算表中可能變成:
  • ○1...○2...○3...○4

數字的部份一定要看清楚,如果是半形的,可以用「\d」,但如果是全形字,就得一個個列出來了,像前例中的數字即是全形的,可以用這樣的規則:

  • (○[1234])

如果是半形的數字,就可以用:

  • (○\d) 或是 (○[1-4])

先留個記錄,有空再補充。實際的應用都在本文最前面的試算表中了,按一下儲存格即可看到用了什麼公式組合。


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket