How to Analyze Debate Reaction Online: Sampling, Labeling and Clustering Who Users Think Won
After a televised debate, every camp says it won. Counting mentions or positive and negative sentiment is not enough to answer which candidate online users think performed better: a high volume of mentions does not mean praise, and negative sentiment does not show who is being criticized. This article sets out the full process LargitData used to analyze online reaction to the 2026 Taipei and Kaohsiung mayoral debates, covering deduplication, per-platform sampling, comment collection, stance labeling, clustering and presentation, as well as what the method cannot do.
Quick answer: how to analyze who online users think won a debate
Start by collecting public posts from before and after the debate that mention a candidate's name together with the word debate, exclude foreign sources, and remove exact and near duplicates. Then sample posts separately for each platform, collect comments from each platform's high-engagement posts, deduplicate them and sample them. A language model labels every item against explicit definitions for which candidate the author thinks performed better and any identifiable partisan lean, and the labels are spot-checked by hand. The items are then clustered by text similarity and each cluster's counts for both sides are listed. Report the results platform by platform and do not declare a winner from a pooled total, because the total shifts with each platform's sampling share and users on different platforms lean differently to begin with.
Who it is for
- Media and research organizations: summarize online reaction quickly after a debate, candidate forum or major event, and explain how it was measured
- Campaign teams and parties: see which exchanges supporters and opponents care about on each platform
- Public-sector and corporate communications teams: apply the same process to reaction after a press conference, policy briefing or crisis response
What problems it solves
- Avoid mistaking the volume of discussion, one platform's mood, or a particular page's comment section for overall online opinion
- Organize tens of thousands of posts into a dozen or so topics and see each side's arguments within every topic
Why volume and sentiment are not enough
Volume tells you who was talked about most. A candidate who is discussed heavily after a debate may have performed well, or may have slipped up in a moment that was shared over and over. Standard positive and negative sentiment analysis measures the tone of the text, but a harshly worded comment may be attacking the opponent, or attacking a performance that even the author's own side found hard to watch.
So we restated the question as a definition that can be judged item by item: does the author clearly state or strongly imply that one candidate performed better in the debate? Discussing policy content, reposting news or asking for a livestream link does not count as taking a position. This definition is narrower than sentiment, so fewer items enter the count, but each one answers the question directly.
The other issue is platforms. PTT, Threads, Dcard, Facebook groups and news-site comment sections have different user bases, and the same debate often draws opposite conclusions on different platforms. Pool all platforms together and the result mostly reflects which platform contributed more data, not what users think.
The process: eight steps
The table below summarizes each step and the parameters actually used for the 2026 Taipei and Kaohsiung mayoral debates.
| Step | How it works | Parameters used |
|---|---|---|
| 1. Collect posts | Search InfoMiner's cross-platform data for both candidates' names plus the word debate | Kaohsiung: 24 hours around the debate, 2,356 posts; Taipei: from noon to 6 p.m. on debate day, 4,424 posts |
| 2. Filter sources | Exclude mainland Chinese and Hong Kong media, Weibo and other foreign sources | 34 excluded for Kaohsiung, 150 for Taipei |
| 3. Deduplicate | Remove exact duplicates after normalizing the text, then use MinHash to find near duplicates with more than 80% text overlap, keeping the copy with the most engagement | 1,449 unique posts remain for Kaohsiung and 2,888 for Taipei |
| 4. Sample posts per platform | For each platform, take half from the highest-engagement posts and half at random with a fixed random seed | 60 per platform (30 high-engagement plus 30 random); platforms with fewer are taken in full |
| 5. Collect and sample comments | For each platform, collect comments from high-engagement posts that have comments, cap the number of posts per author, deduplicate, then sample at random per platform | Up to 15 posts per platform, at most 3 per author, up to 100 comments per post; 120 comments sampled per platform |
| 6. Label stances | A language model labels each item for relevance, who performed better, identifiable partisan lean and topic; labels are spot-checked by hand | 899 items per debate; 60 checked by hand, about 90% agreement |
| 7. Cluster and name | Segment the Chinese text, compute TF-IDF similarity, build a similarity graph, cluster it with Louvain community detection, then name each cluster with a language model | Similarity threshold 0.18, at least 6 items per cluster; 13 clusters for Kaohsiung, 18 for Taipei |
| 8. Summarize | Separate online users, media and public figures, and politicians' pages, then list both sides' counts by platform and by cluster | No winner is declared from a cross-platform total |
Deduplication: why two layers
After a debate the same press release is republished by many sites, and the same passage is copied and pasted by different accounts. Exact copies can be removed by comparing normalized text; republications with a new headline or a few added words are caught by using MinHash to estimate how much their text fragments overlap, with more than 80% overlap treated as the same item. The copy with the most engagement is kept, and the number of merged copies is recorded. Without deduplication, widely republished news would be counted repeatedly in sampling and clustering.
Per-platform sampling: half high-engagement, half random
Taking only the highest-engagement items shows the opinions that drew the most attention on each platform; sampling only at random tends to pick up many reposts that take no position. We take half of each: the high-engagement half stands for more influential content and the random half for ordinary posting. The random sample uses a fixed seed, so rerunning the same data yields the same sample.
Drawing the same number from every platform gives smaller platforms enough items to analyze on their own; it is not meant to represent how much each platform actually discussed the debate. That is also why a cross-platform total is not a sound basis for declaring a winner.
Comments: the other half of the conversation
Many users never post; they only comment under news stories, PTT threads or Threads posts. We collect comments from each platform's highest-engagement posts that have comments, taking at most 3 posts from the same author so that one account's comment section does not fill the sample. Comments are deduplicated on their normalized text plus their upvote or downvote type, because short replies such as an upvote or +1 are identical under different posts and cannot be told apart by comment ID.
Whether comments can be collected depends on the platform. Comments on PTT, Threads and some news sites can be collected in full; for most posts on Facebook pages, Facebook groups, YouTube and TikTok they cannot. We check those posts one by one, collect the comments that are available, and note the gap in the results.
Who counts as an online user: four kinds of content counted separately
To measure which candidate online users think did better, voices that are not ordinary users must be set aside, or a few accounts or comment sections can sway the result. We split relevant content into four groups, and only the first counts toward the user tallies:
- Online users: Ordinary posts on PTT, Threads, Dcard, Facebook groups, X and LINE OpenChat, and comments under posts on every platform.
- Media and public figures: News reports and posts by Facebook pages and YouTube and TikTok channels. They shape the discussion but represent the publisher's view or reporting.
- Candidates and politicians: Posts from the candidates' and politicians' own accounts, and comments under politicians' pages. Comment sections on politicians' pages are dominated by supporters, so mixing them in would make the result one-sided.
- Relayed opinions: Users reposting a pundit's, academic's or outlet's assessment without stating their own view. Under the labeling rules these do not count as the author's position.
Stance labeling: definitions matter more than the model
A language model labels five fields for every item from the same instructions, which spell out the conditions for each value and require structured output only:
| Field | Definition |
|---|---|
| Relevant | Whether the item is about this debate or the candidates' performance in it; items only about other cities or unrelated news are excluded |
| Who performed better | The author clearly states or strongly implies that one candidate did better (or the opponent did worse); saying both were similar, both good or both bad is recorded separately; reporting only, discussing policy only or asking questions counts as no position |
| Partisan lean | Filled in only when wording, stance or targets clearly show which camp the author supports; inferring it from who performed better is forbidden |
| Topic | The debate issue or aspect in 2 to 8 characters, such as the fiscal allocation law, reading from notes, delivery and poise, or how concrete the policies were |
| Reason | The basis for the label in 25 characters or fewer; quoting someone else's assessment must be noted, which is how relayed content is identified |
After labeling, we drew 60 items at random and compared them with human judgment; about 90% agreed. Most disagreements involved sarcasm, meme text, emoji-only comments, and comparisons with the other debate, such as remarks in the Kaohsiung discussion mocking a Taipei candidate. This level of agreement means the labels are reasonably reliable, but individual examples can still be wrong, so results are presented as group proportions and the original text is kept for readers to judge.
Clustering: find what people are arguing about, then each cluster's stance
Clustering organizes several hundred items into a dozen or so discussion topics. We segment each item's topic label and text, compute TF-IDF, connect any two items whose similarity exceeds a threshold, and use Louvain community detection to group densely connected items; clusters that are too small are left unclustered. A language model names each cluster from its keywords and excerpts and is told to describe what is being discussed without judging who is right.
Clusters are not formed by stance, and supporters of both sides often share a cluster. In a reading-from-notes cluster, for example, one side says the opponent kept looking down at notes while the other side demands the same of the first candidate. So every cluster lists both sides' counts separately, with one clearly argued original quote from each side; purely personal attacks are excluded, and when the two sides differ in number within a cluster, one quote each does not mean they are equally loud.
Presenting results: by platform, crossed with lean, no pooled winner
- Platform table: For each platform, list the number of user items, how many took a position and each side's share; platforms with fewer than 20 positions show counts only.
- Crossed with lean: Cross who performed better with partisan lean. In both 2026 debates, fewer than 3% of users with an identifiable lean rated the other camp's candidate better, and only about a third of items with no identifiable lean judged the outcome at all. Differences between platforms therefore mainly reflect where each camp's supporters gather.
- No pooled winner: The cross-platform total is shown alongside, with a note that it shifts with sampling shares, and is not used to declare a winner.
What this method cannot do
- It is not a poll. People who choose to post online do not represent all voters, and their posts cannot be used to estimate voting intention.
- It cannot tell whether accounts belong to real people and does not rule out coordinated posting; checking account behavior requires a separate fake-account and coordinated-behavior analysis.
- The time window affects the result. A snapshot a few hours after a debate may look different from the second wave of discussion driven by edited clips the next day.
- Comment collection is limited by the platforms, so user comments on Facebook, YouTube and TikTok are less well represented.
- Comments under high-engagement posts are influenced by the poster's stance, even with a cap on posts per author.
- Partisan lean is judged by the model, which may conclude that an author supports a candidate simply because the item praises that candidate.
Case study: the 2026 Taipei and Kaohsiung mayoral debates
We applied this method to the Kaohsiung mayoral debate on October 30, 2026 and the Taipei mayoral debate on October 31, sampling 899 posts and comments for each. In both, platforms reached opposite conclusions: users who took a position on Threads mostly rated the DPP candidate better, while news-site comment sections and Facebook groups mostly favored the KMT candidate; PTT leaned toward the DPP candidate in Kaohsiung but toward the KMT candidate in Taipei. Full figures, clusters and quoted examples are in the two analyses below (in Chinese):
- Chiang Wan-an vs. Puma Shen: who do online users think won the Taipei mayoral debate?
- Ko Chih-en vs. Lai Jui-lung: who do online users think won the Kaohsiung mayoral debate?
Further Reading
FAQ
Event reaction analysis inquiries
To apply the same process to online reaction after a debate, press conference, policy briefing or crisis, contact the LargitData team to discuss data scope, definitions and timing.
Contact Us