
Exploring Bulgarian Parliament Transcripts with AI
Jul 23, 2026 • 5 minute read
Author: Atanas Tonchev
The Data
The Bulgarian Parliament maintains a public API with transcripts of plenary sessions going back years. After proper cleaning and wrangling, this is a remarkable NL dataset: nearly 370,000 speeches across over 1,500 sessions, capturing decades of political debate, legislative discussion, and the evolving language of Bulgarian public life.
But like many official data sources, it's vast and difficult to navigate. You can look up a specific session if you know the date, but you can't ask questions like "How has the discussion of healthcare reform evolved over the last decade?" or "Which MPs have spoken most about environmental policy?"
I built the Bulgarian Parliament Transcript Explorer to answer exactly these kinds of questions.
How It Works
The pipeline has three main stages:
1. Data Collection. Transcripts are scraped from the official Parliament API, cleaned, and structured. Each speech is tagged with metadata: speaker name, party affiliation, session date, and agenda item.
2. Embedding & Indexing. Each speech is embedded using the multilingual-e5-large model, which produces high-quality vector representations for Bulgarian text. These embeddings are stored in a vector database, enabling fast semantic search across the entire corpus.
3. Exploration Dashboard. A Dash-based web interface allows users to query the dataset using natural language, explore topic clusters, and track trends over time. You can search for concepts (not just keywords), filter by time period or speaker, and visualize how certain topics have risen and fallen in parliamentary discourse.
The source code is available on GitHub, and the full dataset with pre-computed embeddings is published on Kaggle.
What You Can Discover
The tool enables research questions that would be extremely labor-intensive to answer manually:
- Topic evolution: Track how the framing of a policy area (e.g., healthcare, education, EU integration) has shifted across governments.
- Speaker analysis: Identify which MPs have been most active on specific issues, and how their language compares to others in their party.
- Semantic search: Find speeches that are conceptually related to a query, even when they use completely different terminology — something keyword search alone cannot do.
Why It Matters
Parliamentary transcripts are a public record of democracy in action. Making them truly searchable and analyzable — not just browsable by date — opens up new possibilities for journalists, researchers, and citizens to understand how political discourse shapes policy. The project also serves as a practical demonstration of how modern NLP techniques can be applied to non-English, domain-specific text corpora.
Future work
The semantic query is not yet where I want it to be: the E5 model does not seem to fair particularly well with Bulgarian, at least when it comes to finding concepts rather than mere keywords. Also, the dasboard's backend could use an autoupdate from the Parliament's API. More importantly, I need to improve the transcript parser, as it doesn't account for all possible conventions and sometimes confuses speaker labels and party belonging. Another potential improvement is a BERT-based classifier that would filter out protocol speech and leave the 'meat': charged speech, political and legislative discussion.