Add the tally-codings subcommand for the majority vote

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-17 22:38:35 +08:00
co-authored by Claude Opus 5
parent 24a4ca6970
commit 95a05a0631
8 changed files with 1146 additions and 9 deletions
+11 -9
View File
@@ -102,9 +102,6 @@
- **第三票取全量**:只對前兩次分歧的標籤補問第三票,
計票結果相同;仍採全量執行——全部歌曲、全部關鍵字
——使三票在同一條件下取得。
- **定案表只記歌曲與標籤**:引述留在三份執行歸檔,定案
表不轉抄。定案即三票的計票結果,每一票各自的引述
依據於其歸檔逐筆可查。
- **對邊緣標籤的作用**:兩次執行只分得出「兩次皆標」與
「僅一次標」;三次執行還分得出 3-0 與 2-1,故「定案
編碼中有多少比例僅以一票之差成立」成為可報告的量。
@@ -152,12 +149,17 @@
檔只規定任務形狀,換詞彙表、換演算法都不必改它。
- **步驟 3 定案**`tally-codings <執行歸檔 1> <執行歸檔
2> <執行歸檔 3> <輸出 CSV>` 讀三份執行歸檔的
`output.jsonl`,逐首取標籤鍵集合(引述不參與計票)
三份歌曲清單不一致即失敗、不出檔。某首歌的某個標籤
於三份中出現至少兩次即寫出一列,產出
`results/codings.csv`,欄位 `Song`、`Keyword`,一列
一個標籤,歌依 ID 數值升序、同一首歌的標籤按字典序,
換行為 CRLF(同專案其他 CSV)。
`output.jsonl`,逐首取標籤鍵集合(引述不參與計票)
某首歌的某個標籤於三份中出現至少兩次即寫出一列,產出
`results/codings.csv`,欄位 `Song`、`Artist Credit`、
`Keyword`、`Quote`,一列一個標籤。歌名與演出者名銜
逐首查工作儲存取得,故本子命令須在 `build-db` 之後
執行。`Quote` 收該標籤在計票中的各份執行所給的歌詞
引述:各份的引述串接後逐字去重,按 Unicode 碼位排序,
以單一 `|` 相接(三份執行彼此無先後主從之別,引述之序
取決於引述本身)。列序依印出的前三欄依序排:歌名、
演出者名銜、標籤,一律以 Unicode 碼位比較,換行為
CRLF(同專案其他 CSV)。
- **序列化通則**:所有中間檔為 UTF-8,欄序、鍵序與元素
序皆依上列規則明定,無時間戳、無隨機成分;JSON 解析
一律偵測重複鍵,違規即失敗。人讀為主的產物採純文字或