

# 為何 Reddit 留言匯出的列數少於帖文計數

在把一次 Reddit 匯出稱為完成之前，先檢查留言上限、討論串狀態、隱藏分支，以及缺列的來源。Actor 是託管的資料收集程式。Task 是已儲存的輸入預設。Dataset 是已收集資料列的儲存集合。隱藏分支是公開討論串結構中，收集時未完全展開其後續留言的部分。

## 理解各項限制

顯示的來源計數和已儲存列可以有不同的單位和範圍。任何差距的組成和成因都未被證明。

確切輸入 `postUrls` 接受 1 至 50 條已知的公開討論串。`maxCommentsPerPost` 對每篇帖文接受 1 至 500，預設為 100，目前的 Task 預設為 250。一次試行使用一條預定討論串，小上限為 3。你可以在 [Reddit Comments Scraper](https://apify.com/chronometrica/reddit-comments-scraper) 查看主要 actor，並在 [Reddit Thread and Replies Export](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-thread-and-replies-export) 查看 task 範例。

每一列使用這些確切欄位：`commentId`、`parentId`、`postId`、`body`、`status`、`unavailableFields` 和 `observedAt`。列狀態嚴格為 `ok`、`deleted` 或 `removed`，並不代表部分完成或失敗的輸入狀態。無法取得的文字和佔位內容會按原樣保留，它們不是可分析的詞語。

確切的 OUTPUT 摘要包含 `commentsSaved`、`duplicatesSkipped`、`hiddenBranchesRemaining`、`completionReason`、`status`、`isComplete` 和 `inputResults`。`inputResults` 的每一項包含 `commentsFound`、`commentsSaved`、`status` 和 `reason`。`isComplete` 旗標是布林值的處理指示，不是一項狀態，也不證明討論串已完整涵蓋。

在目前的試行中，三個有正文的 ID 受到上限限制。`parentId`、`depth` 和 `hiddenBranchesRemaining` 欄位為未知或 null。整體狀態和每個輸入的狀態仍然是部分完成，即使 `isComplete` 為 true。這不提供即時的父層樹，也不證明完整涵蓋。缺漏的分支是未知，不是零。你必須自行點算已檢查的已知留言 ID，因為沒有原生的不重複留言計數器。

## 八項審核動作

1. 儲存每個目標 URL、輸入上限、收集時間、dataset 和輸出。按每條討論串診斷，不要只使用整次執行的列數。
2. 檢查目標是否解析為有效的公開討論串。失敗或存取受限的輸入是未知收集，不是成功的零計數。確認一個回傳的帖文身分與你要求的 URL 相符。
3. 檢查數字上限，以及它所報告的使用情況或停止狀態。達到上限可以解釋一項收集邊界。把上限提高後再做一次，可能露出更多列，但不保證完整範圍，也不消除所有來源界限。
4. 檢查剩餘的隱藏分支，以及部分完成或結果狀態。未展開的分支是一項明確差距。隱藏分支為零只是一項檢查；它不證明所有歷史文字或已移除文字都曾經可供取得。
5. 把已知留言身分、列觀察，以及缺少 ID 的列分開點算。檢視重複鍵和衝突。把未解決的身分保留作記帳；不要編造來源 ID。
6. 查看[已刪除、已移除或無法取得的文字狀態](/zh-Hant/articles/reddit-%E5%AF%A9%E6%A0%B8%E7%A0%94%E7%A9%B6%E8%A8%98%E9%8C%84%E7%BC%BA%E5%A4%B1%E6%96%87%E5%AD%97/)，不要把佔位內容計成正常寫出的留言。已知的留言位置但正文缺席，不同於未收集的未知分支。不要把隱藏分支數加到可見留言數，彷彿兩者單位相同。
7. 任何顯示的來源計數，只可與其述明的單位和觀察時間比較。除非已知完整母體和單位，已儲存比率或顯示比率都不是已核實的召回率。來源計數未能取得時，保持為未知。
8. 在三項決定中選擇：接納已觀察的樣本、一次有界限的重做有充分理由，或完整涵蓋缺乏支持。如果所需範圍超出公開來源已述明的收集範圍和能力，就報告這項差距，並選擇適當的已授權來源。不要持續重試被封鎖的來源，也不要聲稱已刪除的文字可以復原。

## 虛構的逐步演算示例與帳冊

本節的所有討論串、計數和結果都是虛構示例。它們用來測試分類規則。

| 討論串 ID | 顯示計數 | 已儲存列 | 已達上限 | 隱藏分支 | 狀態／診斷 |
| --- | --- | --- | --- | --- | --- |
| T1 | 40 | 3 | 是（上限 3） | 2 | 已達上限且未展開的公開樣本 |
| T2 | 8 | 8 | 否 | 0 | 已觀察位置，6 列有文字，2 列無法取得 |
| T3 | 未知 | 未知 | 未知 | 未知 | 未知收集，不是零計數 |

對討論串 T1，顯示計數是 40，但已儲存列是 3，因為已達到上限 3。剩餘 2 條隱藏分支，而該輸入是部分完成。把 3 列和 2 條分支相加，說已收集 5 則留言，是錯誤的。

對討論串 T2，顯示計數是 8，並儲存了 8 列留言身分，隱藏分支為 0。這條討論串在已觀察的範圍內結束。在這 8 列中，6 列有正文，1 列已移除，1 列已刪除。這是 8 個已觀察位置，其中 6 列有可用文字，不是 8 則可用的文字留言。那些未知正文是已存在的位置，不是收集失敗。

對討論串 T3，討論串失敗，因此在已接納的收集帳冊中，計數和列都是未知。這是未知收集，不是一項零留言的發現。

T1 和 T2 的已接納列等於 11。討論串 T3 不貢獻一個猜測的零。T1 的可用文字計數沒有提供，因此不要推算出合併的文字涵蓋百分比。

其後一次虛構的 T1 重做使用上限 10，儲存 7 個已知 ID 和 1 條隱藏分支。兩個快照都要保留。如果 3 個舊 ID 在 7 個新 ID 之中，兩個 ID 集合的聯集包含 7 個不相同的 ID；不要把 3 加 7，那會錯誤地報成 10 則不相同的留言。它仍然是部分完成，並有 1 條分支。最終帳冊按每條討論串列出上限狀態、分支狀態、文字可否取得、身分狀態，以及下一步決定。不需要重建、復原，也不需要分析內容審核的成因。

## 下一步

開啟 [Reddit Comments Scraper](https://apify.com/chronometrica/reddit-comments-scraper) actor，為一條已知討論串設定小上限 3，儲存輸出，並用 [Reddit Thread and Replies Export](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-thread-and-replies-export) 的預設，從涵蓋帳冊選擇樣本或重做的決定。

## 來源與延伸閱讀

- [Reddit Comments Scraper Actor](https://apify.com/chronometrica/reddit-comments-scraper)
- [Reddit Thread and Replies Export Task 預設](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-thread-and-replies-export)
- [如何取得帖文討論中的所有留言](https://www.reddit.com/r/redditdev/comments/12f885c/getting_all_the_comments_in_a_post/)
- [Reddit JSON API 如何取得更多留言的討論](https://www.reddit.com/r/redditdev/comments/10jchxr/reddit_json_api_how_to_get_more_comments/)
- [YouTube 字幕擷取](https://chronometrica.com/zh-Hant/articles/%E5%8F%96%E5%BE%97-youtube-%E9%80%90%E5%AD%97%E7%A8%BF-%E6%AA%A2%E6%9F%A5%E7%BC%BA%E5%B0%91%E5%AD%97%E5%B9%95/)