Respect the source.
Honor robots.txt, paywalls, and publisher policies. Per-domain rate limits, honest identification, and backoff protect both the source and the dataset.
A chart is the final step, not the starting point. Explore the crawling queues, broken HTML, data-quality checks, NLP labels, event clustering, and statistics behind the film.
Select a stage to see its decisions, tools, and outputs. Not every step needs an AI model: fetching, validation, duplicate detection, and statistics rely on reproducible code.
Finding and accessing relevant reporting
RSS feeds and sitemaps are the first discovery layer, supported by direct news crawling and the GDELT index. Jobs follow robots.txt and per-domain rate limits.
Every publication has its own feeds, templates, JavaScript, access rules, and failure modes. Explore how URLs are discovered, jobs are scheduled, pages are fetched, and usable text is extracted.
Start with RSS and sitemaps, then check publication sections and the GDELT discovery index. Keep per-source cursors so previously seen URLs are not processed repeatedly.
Delayed feeds, stale links, or the same article discovered through multiple channels.
Honor robots.txt, paywalls, and publisher policies. Per-domain rate limits, honest identification, and backoff protect both the source and the dataset.
Validate schemas, timestamps, empty articles, and repeated URLs. Quarantine failed records instead of quietly turning missing coverage into zeros.
Each record retains its source domain, canonical URL, publishing and crawl times, retrieval method, and extractor version.
Raw text needs extraction, normalization, and NLP enrichment. A single article may discuss several issues, quote multiple people, and express different attitudes toward different subjects.
Follow a fictional Indonesian article through extraction, NLP enrichment, and indexing.
<nav>Berita | Kanal | Iklan</nav> <article> <h1>Genangan terjadi di Jakarta</h1> <p>Hujan menyebabkan genangan di ruas jalan.</p> <p>Pemprov DKI menyiapkan pompa.</p> </article> <aside>Berita lainnya ...</aside>
Menus, ads, and recommendations are not article content. This input deliberately uses Indonesian news text.
Sentiment is an inference, not a fact hidden in HTML. It needs evaluation against human-labeled examples.A story about floodwater and pumping operations can be about both flooding and local government. Store each assigned label with a confidence estimate and model version.
Article-level tone is different from an opinion about an actor. A resident’s complaint and an official’s response may appear in the same story.
A dateline can be misleading. District and neighborhood names, plus contextual mentions, help determine whether an event actually concerns Jakarta.
One incident may be syndicated across dozens of outlets; two similar headlines may describe different incidents. That is why the workflow separates exact duplicates, near-duplicates, and articles reporting a shared event.
Compare exact copies, lightly edited syndication, and reports about the same event. Select a case to explore the difference.
Genangan terjadi di Jakarta
Genangan terjadi di Jakarta
Exact duplicates can be consolidated without a semantic model. A different tracking parameter does not make an article new.
A matching headline alone is not proof that two full articles are identical.Find identical documents and remove tracking parameters so the same article is not counted again under a different link.
Five-word shingles and estimated Jaccard similarity surface syndication copies without comparing every possible pair of articles.
multilingual-e5-base captures semantic similarity. Time, place, and source evidence help decide whether articles belong to the same real-world event.
The local model assesses topics, tone, place relevance, and entities. Ambiguous cases and high-impact stories may be escalated to a structured LLM review, with the reasoning recorded and the labels evaluated over time.
Topics · area relevance · sentiment · entities
First pass for clear casesStructured reassessment with a concise explanation
Pydantic · audit trailChanges to models, prompts, or thresholds should be evaluated on a human-labeled reference set. The figures beside this text are evaluation criteria, not achieved performance scores.
Only after records are structured can we assess issue share, historical baselines, distinct outlets per event, co-occurrence, and uncertainty. The goal is to measure coverage, not mistake it for reality.
Is an issue growing, or are there simply more articles?
Makes comparisons less sensitive to changes in total coverage.
When does coverage rise above its usual level?
Requires at least 30 articles and 4 comparable weeks.
Which events were covered across the most outlets?
Each cluster links back to its source articles.
How quickly does attention fade after a crisis?
Align event peaks before comparing attention curves.
Which issues appear together more often than expected?
Lift above 1 suggests an association in coverage, not causation.
How robust is a shift between periods?
Accounts for dependence between neighboring weeks.
How uncertain is a proportion from a small sample?
Especially important when international coverage is sparse.
Every insight needs its source, denominator, missing-data flags, model version, uncertainty, and links to supporting articles. A precise-looking chart is not automatically a reliable finding.
An increase in flood coverage does not prove an equivalent increase in actual flooding.
Two weeks in June 2025 are missing from the film snapshot. We keep those gaps visible rather than treating them as zero.
Topic, sentiment, and entity labels need evaluation against human-annotated examples, with ambiguous cases explicitly tracked.
The workflow respects access restrictions and paywalls; full text is handled only where permitted, and public excerpts remain limited.
Jakarta News Intelligence combines RSS, sitemaps, and responsible news crawling, with The GDELT Project ↗ as a supplementary discovery and coverage index. The film presents a precomputed snapshot exported as story.json. Opening the page does not trigger crawling or AI analysis.