

# 匯出 TikTok 頂層留言，供 NVivo 編碼

把每則 TikTok 頂層留言匯出為表格的一列。把該段文字匯入 NVivo，作為可以編碼的內容。把每個來源識別碼留在文字旁邊。

頂層留言是貼在帖文上的留言。回覆是對一則留言的回應。這些步驟只使用頂層留言。

來源識別碼是一則帖文、一則留言或一位作者的公開名稱。NVivo 是存放文字、供人手編碼的軟件。質性編碼是指你用一個有名稱的標籤標記文字，並寫下原因。

Actor 是用來收集資料的託管程式。Task 是為 Actor 儲存的輸入預設。[TikTok Comments Scraper](https://apify.com/chronometrica/tiktok-comments-scraper) Actor 收集公開來源列。編碼由你來做。Actor 不會建立編碼、個案或 NVivo 檔案。

公開 Task [Export TikTok Comments to CSV or Excel](https://apify.com/chronometrica/tiktok-comments-scraper/examples/export-tiktok-comments-to-csv) 已於 2026 年 10 月 13 日檢查。公開 Task 只是起始輸入。這不表示分析會自行進行。

## 收集正確的公開列

使用公開組建 0.1.17。輸入 `startUrls` 接受 1 至 100 個項目。每個項目必須是包含 `/video/` 或 `/photo/` 的完整已知 URL，或一個數字帖文識別碼。短網址並不足夠。先開啟短網址，再複製完整的已知 URL。

已儲存的 Task 包含一條樣本影片。把該樣本換成你打算研究的一則已知公開帖文。已儲存的輸入是：

```json
{
  "startUrls": ["https://www.tiktok.com/@zachking/video/7631200623693729038"],
  "maxCommentsPerVideo": 250,
  "includeReplies": false,
  "maxRepliesPerComment": 10
}
```

收集正確的公開列

`maxCommentsPerVideo` 是單一帖文的頂層列上限。允許值是 1 至 1,000。已儲存的 Task 使用 250。第一次測試時，把 250 改為 3。

`includeReplies` 為 false 表示不收集回覆列。這次測試請保持 false。`maxRepliesPerComment` 是一則已儲存父留言之下的回覆上限。允許值是 1 至 100。已儲存的 Task 使用 10。當 `includeReplies` 為 false 時，該回覆上限不會收集任何內容。

一次現行對照使用頂層上限 3。它儲存了 3 則不重複留言。每則留言都與所要求的帖文相符。每則都有非空白文字、一個 `authorId` 和 `createdAt`。每一列的 `isReply` 為 false，`replyDepth` 為 0，`status` 為 ok。值 ok 表示已儲存一則真實留言。`replyDepth` 為 0 表示該列是頂層。

該對照只就頂層收集提供證據。它沒有測試回覆收集。它沒有收集每一則公開留言。列上限或公開動態樣本，並不是完整的留言集合。

## 閱讀資料列和 OUTPUT 摘要

保留未經改動的來源 JSON 或 JSONL 檔案。JSON 是 Actor 產出的結構化檔案。同時保留 OUTPUT。OUTPUT 是收集摘要，不是留言列。

保留這些 OUTPUT 名稱：

- `inputsReceived`
- `uniquePostsPlanned`
- `postsAttempted`
- `postsWithRows`
- `commentsWritten`
- `repliesWritten`
- `rowsWritten`
- `stopReasonCounts`
- `failedInputDetails`

同時保留每個輸入的停止、狀態和上限細節。本課不會為該對照編造那些 OUTPUT 數字。已知已儲存的留言數是 3。請在你自己的檔案上閱讀具名的 OUTPUT 值。不要把未知的計數填成 0。

`repliesWritten` 需要小心閱讀。已儲存的值 0 表示沒有寫入回覆列。這不表示人們沒有寫回覆。回覆被置於範圍之外。缺少回覆文字，並不是對話為零的證據。

每一則實際儲存的留言，`status` 都是 ok。無法使用的輸入仍留在 OUTPUT。不要為它建立虛假的空白留言列。

公開值可以是 null。Null 表示沒有提供該值。值 false 並不相同。False 表示來源表明為否。不要把 false 視為未知。

`commentIndex` 是一列的已儲存位置。它不是 TikTok 的相關性分數。`replyCount` 是回覆的計數。該計數不提供回覆文字。

Actor 可以傳回這些來源欄：

- `inputIndex`
- `inputUrl`
- `postUrl`
- `postId`
- `commentId`
- `text`
- `language`
- `createdAt`
- `likesCount`
- `parentCommentId`
- `replyToCommentId`
- `isReply`
- `replyDepth`
- `replyCount`
- `authorId`
- `authorHandle`
- `authorDisplayName`
- `authorUrl`
- `authorVerified`
- `isPinned`
- `isHeartedByCreator`
- `commentIndex`
- `replyIndex`
- `status`
- `scrapedAt`

你要再建立三欄。它們不是來源欄。

- `local_record_key` 是你將交給 NVivo 的識別碼。
- `author_key` 是以文字複製的作者識別碼，以便把各列分組。
- `collection_time` 是你在工作檔案上記錄的時間。

如果 `collection_time` 是 `scrapedAt` 的複本，請寫下來。`selection_note` 也是你的備註。它不是來源欄。自行編造的 `local_record_key` 不是已核實的留言識別碼。把每個識別碼都以文字儲存。當欄位是數字時，試算表可能會改變一個很長的數字。

Actor 只提供公開文字。它不提供質性編碼、NVivo 匯入、個案、醫學解讀或自動理論。

## 做這八項動作

1. 先寫下研究規則。

收集之前，先寫下已知的公開帖文。寫下你會保留的留言的開始日期和結束日期。寫下語言規則。這個方法選擇頂層留言。回覆研究需要自己的測試，以及稍後一項明確選擇。如果 `createdAt` 在你的日期以外，就把該列排除在編碼之外，並在 `selection_note` 說明原因。本課較後的園藝句子是普通的園藝虛構內容。公開留言樣本不能支持醫學聲稱。

1. 用上限 3 測試一則預定帖文。

使用一則你已經知道的真實帖文。把 `maxCommentsPerVideo` 設為 3。把 `includeReplies` 設為 false。然後檢查來源識別碼、文字、`status` 和 OUTPUT。上限 3 大得足以看見真實欄位。它也小得足以在大型檔案之前先作檢查。已檢查的對照只就這條頂層路徑提供證據。把未儲存的回覆維持為已排除的範圍。

1. 先保留來源，再製作扁平工作表格。

不要改動來源 JSON 或 JSONL 檔案。不要改動 OUTPUT。工作表格是後來的複本。使用這些欄：`local_record_key`、`postId`、`postUrl`、`commentId`、`author_key`、`text`、`createdAt`、`language`、`isReply`、`parentCommentId`、`collection_time` 和 `selection_note`。識別碼保持為文字。來源有 `commentId` 時，用它作為 `local_record_key`。如果來源識別碼缺失，就建立 `local_record_key`，並在 `selection_note` 標明這個缺口。該本地鍵只代表你的列。它不是 TikTok 留言識別碼的證明。未經改動的來源檔案讓你可以核對這份複本。

1. 匯入之前先選定個案。

個案是你將要編碼的一個單位。在這個方法中，一個個案是一次留言觀察。[它不是一個人](/zh-Hant/articles/%E5%96%AE%E4%B8%80%E8%A8%8E%E8%AB%96%E4%B8%B2%E6%98%AF%E5%90%A6%E4%B8%BB%E5%B0%8E%E7%A0%94%E7%A9%B6%E7%B5%90%E6%9E%9C/)。用 `local_record_key` 作為唯一個案識別碼。把 `author_key` 和 `postId` 保留為分組欄。這樣你可以一起閱讀同一個帳號的留言。你仍然不可把該帳號稱為已確認的人。這個選擇控制計數。同一個 `author_key` 的兩則留言是兩個個案和一個帳號組。它們不是兩個人。

1. 準備一張欄位穩定的工作表。

使用一列標題。每一欄只放一種值。把來源 `text` 原樣複製到 `raw_text`。把任何經過編輯的複本放在 `analysis_text`。如果你隱藏一個私人詞語，或只修改你的複本，就把每項變更寫進變更紀錄。如果你沒有改變任何內容，就在該紀錄寫上 "none"。儲存一份欄位加引號的 UTF-8 CSV 檔案或 Excel 檔案。UTF-8 是一種文字編碼，可以保留 é 這類字母。加引號的欄位可以包含逗號、引號或換行。測試一列，其中同時有這些內容，再加上一個不是普通 ASCII 的字母。在 Excel 中，把識別碼欄匯入為文字。不要為了讓檔案能開啟，就從原始留言移除有意義的符號。Word 文件可選。當工作表已符合研究需要時，你不需要它。

1. 在 Windows 版 NVivo 15 匯入該工作表。

NVivo 15 Windows 說明把這次匯入稱為調查。路徑是 Import，然後 Survey，然後 Excel or Text File。說明頁是 [Datasets](https://help-nv.qsrinternational.com/15/win/Content/files/datasets.htm)。選取檔案。確認標題列、文字編碼和欄分隔符號。分隔符號是用來分開各欄的字元，通常是逗號。檢查預覽。選擇 `local_record_key` 作為唯一紀錄識別碼。把 `analysis_text` 標為開放式文字，即你可以編碼的文字。把 `postId`、`commentId`、`author_key`、`isReply` 和時間欄標為封閉式。封閉式表示該欄只為該列分類。如果工作表已經儲存某欄，就可以不把它放進 NVivo。NVivo 可能把一列標為回應者。在這項研究中，該標籤仍然表示一則留言。請在你已安裝的版本上檢查選單。這些名稱屬於已記載的 NVivo 15 Windows 說明。不要把它們強加到每個版本或 macOS。留言個案、編碼規則和稽核是研究選擇。它們不是從該供應商頁面取得的規則。

1. 檢查匯入；如果對應錯誤，就重新匯入。

點算已匯入的紀錄。數目必須與你打算匯入的工作表相符。開啟數筆紀錄。讓來源識別碼和文字完全吻合。現行 NVivo 15 Windows 說明指出，匯入之後不能編輯調查來源內容。匯入之後也不能更改欄的分析類型或資料類型。如果對應錯誤，就修正工作表。把該修正檔案作為一份新的已檢查複本匯入。沒有進行實際的 NVivo 應用程式測試。這些步驟是已記載的讀者檢查。它們不是量度到的匯入程式結果。

1. 先人手編碼一小組，再處理較大的一組。

寫下每個編碼標籤。寫下該編碼包含甚麼、排除甚麼。保留一份備忘和一個編碼版本。當你閱讀一段短摘錄時，保持其來源和個案在視線之內。自動為每則留言指定一個個案，並不確立每個個案是一位獨立參與者。匯出編碼與紀錄的對應。把它與工作表核對。只有在那之後，才編碼較大的一組。

人們會問留言列可以怎樣進入 NVivo。一個公開問題是這個 [r/CompSocial 留言](https://www.reddit.com/r/CompSocial/comments/1fez5z8/comment/m1vd20x/)。該問題顯示一項需要。它沒有顯示這個個案對應適合每一項研究。

## 檢查一個虛構的三列對應

下面各列是原創虛構內容。它們是教學例子，不是 Actor 結果。對照中沒有保留任何真實留言字句。不要把這些園藝句子讀成已收集的 TikTok 文字。

這段虛構使用兩則關於一個普通園藝托盤的帖文。帖文 P1 有兩則頂層留言。帖文 P2 有一則頂層留言。帳號鍵 A 在 P1 寫下留言 C1。文字是「這個托盤很難拿」。帳號鍵 A 也在 P1 寫下留言 C2。文字是「我加了一個手柄」。帳號鍵 B 在 P2 寫下留言 C3。文字是「說明有幫助。」三列都是頂層，並連結到一則已知帖文。R1、R2 和 R3 的變更紀錄寫著 none。`analysis_text` 與那些來源字句相符。

R1、R2 和 R3 是三個留言個案。A 和 B 是兩個帳號鍵。這些鍵是分組事實。它們不是三個人。

### 來源、個案和欄對應

| local_record_key | 個案 | postId（封閉式） | commentId（封閉式） | author_key（封閉式） | isReply（封閉式） | analysis_text（開放式） |
| --- | --- | --- | --- | --- | --- | --- |
| R1 | 一則留言 | P1 | C1 | A | false | 這個托盤很難拿 |
| R2 | 一則留言 | P1 | C2 | A | false | 我加了一個手柄 |
| R3 | 一則留言 | P2 | C3 | B | false | 說明有幫助。 |

用 `local_record_key` 作為 NVivo 個案識別碼。在這個對應中，`analysis_text` 是唯一的開放式欄。`postId`、`commentId`、`author_key` 和 `isReply` 是封閉式。R1 和 R2 共用帳號鍵 A。它們仍然是兩個個案，因為單位是留言。共用的鍵讓你可以一起閱讀它們。

### 這三個個案的編碼結果

使用兩個編碼。`handling_problem` 表示寫作者說該物件很難握住或移動。`workaround` 表示寫作者說他們改變了甚麼，以使該項工作更容易。一則只說說明有幫助的留言，這兩個編碼都不適用。

| local_record_key | author_key | 編碼 | 原因 |
| --- | --- | --- | --- |
| R1 | A | handling_problem | 這個托盤很難拿。 |
| R2 | A | workaround | 寫作者加了一個手柄。 |
| R3 | B | none | 有幫助的說明不符合任何一個編碼。 |

計數是確切的。有 3 則研究留言。有 2 個已編碼的留言個案，即 R1 和 R2。每個已編碼個案有 1 個編碼。R3 沒有編碼。帳號鍵 A 有 2 則相連留言。那些相連留言不是 2 位獨立的人。下一列不屬於這些計數。

### 一列獨立的檔案測試列

R-TEST 是第四列編造的列。它測試逗號、引號、換行和字母 é。它不是研究留言。把它留在 3 則研究留言以外。把它留在 2 個已編碼個案以外。不要給它編碼。

預期的原始文字有兩行：

```text
The note says "café, tray"
Carry it flat.
```

檢查一個虛構的三列對應

這份 CSV 把該段文字放在一個加引號的欄。逗號留在引號內。內部引號寫成兩個。換行是真正的換行，不是斜線和 n 這兩個字元。

```csv
local_record_key,postId,commentId,author_key,isReply,analysis_text,selection_note
R-TEST,P-TEST,C-TEST,T,false,"The note says ""café, tray""
Carry it flat.",import test only
```

檢查一個虛構的三列對應

開啟預覽之後，文字必須與上面兩行相符。逗號必須保留。café, tray 周圍的引號必須保留。換行必須保留。é 必須保留。這個測試列上的 `isReply` false 是已知的 false。它不是未知值。沒有為這個檔案執行匯入程式。R-TEST、R1、R2 或 R3 都沒有量度到的匯入結果。

## 下一步

在 [Export TikTok Comments to CSV or Excel](https://apify.com/chronometrica/tiktok-comments-scraper/examples/export-tiktok-comments-to-csv) Task 中，把樣本影片換成一則已知公開帖文。用 [TikTok Comments Scraper](https://apify.com/chronometrica/tiktok-comments-scraper) Actor 收集。把頂層上限設為 3，並保持回覆關閉。匯入三列已檢查的虛構列，或該帖文中三列已檢查的列。核對來源識別碼、個案和文字。只有在該檢查之後，才編碼較大的樣本。

## 來源與延伸閱讀

- [TikTok Comments Scraper Actor](https://apify.com/chronometrica/tiktok-comments-scraper)
- [Export TikTok Comments to CSV or Excel Task](https://apify.com/chronometrica/tiktok-comments-scraper/examples/export-tiktok-comments-to-csv)
- [NVivo 15 Windows 資料集說明](https://help-nv.qsrinternational.com/15/win/Content/files/datasets.htm)
- [關於留言與 NVivo 的公開問題](https://www.reddit.com/r/CompSocial/comments/1fez5z8/comment/m1vd20x/)