Political Discourse Analysis (AgoraSpeech)
Multi-task annotation of political speeches covering sentiment, polarization, populism, topic identification, and named entities. Based on AgoraSpeech (Sermpezis et al., 2025), featuring human-validated labels for comprehensive political discourse analysis.
text annotation
Configuration Fileconfig.yaml
# Political Discourse Analysis (AgoraSpeech-style)
# Based on Sermpezis et al., arXiv 2025
# Paper: https://arxiv.org/abs/2501.06265
#
# Multi-task annotation covering 6 NLP tasks:
# 1. Sentiment Analysis - emotional tone
# 2. Polarization Detection - divisive language
# 3. Populism Detection - populist rhetoric
# 4. Topic Identification - subject matter
# 5. Named Entity Recognition - persons, organizations, locations
# 6. Text Classification - speech type/category
#
# Designed for political speeches, campaign statements, and public discourse
port: 8000
server_name: localhost
task_name: "Political Discourse Analysis"
data_files:
- sample-data.json
id_key: id
text_key: text
output_file: annotations.json
annotation_schemes:
# Task 1: Sentiment Analysis
- annotation_type: radio
name: sentiment
description: "What is the overall emotional tone of this text?"
labels:
- Positive
- Negative
- Neutral
- Mixed
keyboard_shortcuts:
Positive: "1"
Negative: "2"
Neutral: "3"
Mixed: "4"
tooltips:
Positive: "Optimistic, hopeful, praising, or celebratory tone"
Negative: "Critical, pessimistic, condemning, or fearful tone"
Neutral: "Balanced, factual, or emotionally detached tone"
Mixed: "Contains both positive and negative sentiment"
# Task 2: Polarization Detection
- annotation_type: radio
name: polarization
description: "Does this text contain polarizing or divisive language?"
labels:
- "Highly polarizing"
- "Moderately polarizing"
- "Slightly polarizing"
- "Not polarizing"
keyboard_shortcuts:
"Highly polarizing": "h"
"Moderately polarizing": "m"
"Slightly polarizing": "s"
"Not polarizing": "n"
tooltips:
"Highly polarizing": "Strong us-vs-them rhetoric, demonization of opponents, inflammatory language"
"Moderately polarizing": "Clear partisan framing, criticism of opposing views"
"Slightly polarizing": "Some partisan elements but mostly balanced"
"Not polarizing": "Neutral, inclusive, or consensus-seeking language"
# Task 3: Populism Detection
- annotation_type: multiselect
name: populism_markers
description: "Select any populist rhetoric markers present in the text"
labels:
- "People vs. Elite"
- "Anti-establishment"
- "Crisis framing"
- "Nationalism/Nativism"
- "Direct democracy appeal"
- "Charismatic leadership"
- "None detected"
tooltips:
"People vs. Elite": "Framing ordinary people against corrupt/out-of-touch elites"
"Anti-establishment": "Criticism of mainstream parties, media, or institutions"
"Crisis framing": "Portraying situation as urgent crisis requiring immediate action"
"Nationalism/Nativism": "Appeals to national identity, sovereignty, or anti-immigration sentiment"
"Direct democracy appeal": "Bypassing institutions, appealing directly to 'the people's will'"
"Charismatic leadership": "Positioning speaker as unique voice/savior of the people"
"None detected": "No populist rhetoric markers identified"
# Task 4: Topic Identification
- annotation_type: multiselect
name: topics
description: "What topics are discussed in this text? (select all that apply)"
labels:
- Economy/Jobs
- Healthcare
- Immigration
- Education
- Environment/Climate
- Foreign Policy/Security
- Social Issues/Rights
- Corruption/Ethics
- Infrastructure
- Taxes/Budget
- Other
tooltips:
"Economy/Jobs": "Employment, wages, economic growth, business"
"Healthcare": "Health policy, insurance, medical care"
"Immigration": "Immigration policy, borders, refugees"
"Education": "Schools, universities, education policy"
"Environment/Climate": "Climate change, environmental protection, energy"
"Foreign Policy/Security": "International relations, defense, national security"
"Social Issues/Rights": "Civil rights, equality, social justice, family values"
"Corruption/Ethics": "Political corruption, ethics, accountability"
"Infrastructure": "Roads, bridges, public works, broadband"
"Taxes/Budget": "Tax policy, government spending, budget"
"Other": "Topics not covered above"
# Task 5: Named Entity Recognition
- annotation_type: span
name: entities
description: "Highlight named entities in the text"
labels:
- Person
- Organization
- Location
- Political Party
- Event
label_colors:
Person: "#3b82f6"
Organization: "#22c55e"
Location: "#f59e0b"
"Political Party": "#8b5cf6"
Event: "#ec4899"
tooltips:
Person: "Names of politicians, public figures, or individuals"
Organization: "Government bodies, companies, NGOs, institutions"
Location: "Countries, cities, regions, places"
"Political Party": "Names of political parties or movements"
Event: "Elections, summits, protests, historical events"
allow_overlapping: false
# Task 6: Speech Classification
- annotation_type: radio
name: speech_type
description: "What type of political communication is this?"
labels:
- Campaign speech
- Policy statement
- Parliamentary address
- Interview/Debate
- Social media post
- Press release
- Other
tooltips:
"Campaign speech": "Electoral campaign rally or event speech"
"Policy statement": "Official policy announcement or position paper"
"Parliamentary address": "Speech in legislative body or official chamber"
"Interview/Debate": "Response to questions or debate format"
"Social media post": "Tweet, Facebook post, or similar short-form content"
"Press release": "Official statement to media"
"Other": "Other type of political communication"
allow_all_users: true
instances_per_annotator: 100
annotation_per_instance: 3
allow_skip: true
skip_reason_required: false
Sample Datasample-data.json
[
{
"id": "pol_001",
"text": "The corrupt elites in Washington have forgotten about hardworking Americans. They bail out big banks while families struggle to put food on the table. It's time to drain the swamp and give power back to the people!"
},
{
"id": "pol_002",
"text": "Our bipartisan infrastructure bill will create millions of good-paying jobs while rebuilding our roads, bridges, and broadband networks. This represents a historic investment in America's future."
}
]
// ... and 8 more itemsGet This Design
Clone or download from the repository
Quick start:
git clone https://github.com/davidjurgens/potato-showcase.git cd potato-showcase/political-discourse potato start config.yaml
Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
HateXplain - Explainable Hate Speech Detection
Multi-task hate speech annotation with classification (hate/offensive/normal), target community identification, and rationale span highlighting. Based on the HateXplain benchmark (Mathew et al., AAAI 2021) - the first dataset covering classification, target identification, and rationale extraction.
Social Determinants of Health (SDOH) Extraction
Event-based extraction of social determinants of health from clinical notes based on the n2c2 2022 Track 2 shared task and SHAC corpus. Annotates substance use (alcohol, drug, tobacco), employment, and living status with temporal and status attributes.
Dynamic Hate Speech Detection
Hate speech classification with fine-grained type labels based on the Dynamically Generated Hate Speech Dataset (Vidgen et al., ACL 2021). Classify content as hateful or not, then identify hate type (animosity, derogation, dehumanization, threatening, support for hateful entities) and target group.