This prompt is designed for editorial verification teams, fact-checking pipeline engineers, and newsroom tool builders who need to decompose a news article into two distinct streams: verifiable factual claims and non-factual content (opinion, analysis, prediction, editorializing). The core job-to-be-done is preparing journalistic content for downstream evidence matching or claim verification steps. It assumes you have the full article text and want a structured, citation-ready output that maps each passage to its classification with source spans, enabling traceable verification workflows.
Prompt
News Article Fact-Opinion Separation Prompt

When to Use This Prompt
Defines the ideal job-to-be-done, user, and preconditions for the News Article Fact-Opinion Separation Prompt, and clarifies when it should not be used.
Use this prompt as a pre-processing stage before evidence retrieval and claim scoring. The ideal user is integrating it into an automated verification pipeline where the output JSON is consumed by subsequent tools. The prompt requires a complete article text as input; it is not designed for real-time breaking-news triage without human review, nor for content that is primarily multimedia (video, audio, image) without a clean text transcript. It also should not be used as a standalone 'truth checker'—it separates facts from interpretation but does not verify the facts themselves.
Before implementing, ensure your pipeline can handle the structured output schema, including passage spans and classification labels. If your use case involves user-generated content with heavy slang, satire, or intentional disinformation, you will need additional adversarial testing beyond this prompt's baseline. The next step after reading this section is to review the prompt template and adapt its placeholders to your specific article format and output requirements.
Use Case Fit
Where the News Article Fact-Opinion Separation Prompt delivers value and where it introduces risk. Use these cards to decide if this prompt fits your workflow before integrating it into a verification pipeline.
Strong Fit: Editorial Verification Teams
Use when: You have a human editorial workflow that needs to pre-process articles before fact-checking. The prompt excels at producing a side-by-side mapping that reviewers can scan, correct, and approve. Avoid when: You need fully automated, zero-touch classification with no human in the loop. Boundary cases between subtle opinion and neutral reporting require human judgment.
Poor Fit: Real-Time Breaking News Triage
Avoid when: You need sub-second classification of a high-velocity news firehose with no latency budget for LLM inference. The prompt is designed for careful, article-level analysis, not streaming sentence-by-sentence classification. Use instead: A lightweight classifier model fine-tuned on your specific news taxonomy for real-time routing, reserving this prompt for deeper review of flagged content.
Required Inputs: Full Article Text with Attribution Metadata
What to watch: The prompt degrades when given truncated excerpts, missing bylines, or content stripped of publication context. Source attribution readiness depends on having the original text spans and author/publication metadata. Guardrail: Validate that the input payload includes the complete article body, author field, publication name, and date before invoking the prompt. Reject or flag incomplete inputs.
Operational Risk: Subtle Opinion Framing Disguised as Neutral Reporting
What to watch: The primary failure mode is missing opinion when it is embedded in seemingly neutral language—adverb choice, adjective selection, paragraph ordering, and source selection bias. The prompt may classify these passages as factual. Guardrail: Implement a second-pass review for passages classified as factual that contain subjective modifiers, unnamed sources, or selective omission. Route ambiguous cases to human review with the model's classification rationale attached.
Pipeline Integration: Upstream of Evidence Matching, Downstream of Ingestion
What to watch: This prompt is a pre-processing step. It should sit after content ingestion and normalization but before claim extraction and evidence matching. Running it out of order creates duplicate work or mismatched claim boundaries. Guardrail: Define a strict pipeline contract—this prompt outputs fact spans and opinion spans with source offsets. Downstream claim extraction consumes only the fact spans. Do not send opinion spans to evidence matching.
Domain Boundary: General News, Not Specialized Legal or Financial Filings
What to watch: The prompt is tuned for journalistic prose conventions. It will misclassify legal conclusions as opinion and financial forward-looking statements as fact if applied to SEC filings, legal briefs, or regulatory documents without adaptation. Guardrail: Use the domain-adapted variant prompts for legal, financial, and medical content. This base prompt should be restricted to general news articles, op-eds, and editorial content where journalistic norms apply.
Copy-Ready Prompt Template
Paste this prompt into your system or developer message to produce a side-by-side mapping of factual claims versus opinion, analysis, and editorializing passages with source attribution readiness.
This prompt template is designed for editorial verification teams processing journalistic content. It instructs the model to decompose a news article into two parallel streams: verifiable factual claims and non-factual content (opinion, analysis, prediction, rhetorical framing). The output includes source spans, attribution readiness flags, and confidence markers. Replace the square-bracket placeholders with your specific inputs, output schema, and domain constraints before use.
codeYou are an editorial verification assistant. Your task is to separate verifiable factual statements from opinion, analysis, prediction, and rhetorical framing in the provided news article. ## INPUT [ARTICLE_TEXT] ## OUTPUT_SCHEMA Return a JSON object with the following structure: { "article_id": "[ARTICLE_ID]", "separation": [ { "passage": "exact text span from the article", "start_char": integer, "end_char": integer, "classification": "fact" | "opinion" | "analysis" | "prediction" | "rhetorical_framing" | "mixed", "confidence": 0.0-1.0, "attribution_ready": true | false, "attribution_note": "explain what source type would verify this, or why attribution is not applicable", "rationale": "brief explanation of the classification decision" } ], "summary": { "total_passages": integer, "fact_count": integer, "opinion_count": integer, "analysis_count": integer, "prediction_count": integer, "rhetorical_framing_count": integer, "mixed_count": integer, "attribution_ready_count": integer } } ## CLASSIFICATION DEFINITIONS - **fact**: A statement that can be verified against external evidence (e.g., events, data, quotes from identified sources, documented actions). - **opinion**: A subjective judgment, personal belief, or value statement that cannot be proven true or false. - **analysis**: Interpretation of facts, drawing connections, or explaining implications. Goes beyond reporting what happened. - **prediction**: A forward-looking statement about future events, trends, or outcomes. - **rhetorical_framing**: Language that shapes reader perception through metaphor, loaded terms, narrative structure, or emotional appeal without making a directly checkable claim. - **mixed**: A passage containing both factual and non-factual elements that cannot be cleanly separated at the sentence level. ## CONSTRAINTS [CONSTRAINTS] ## EXAMPLES [EXAMPLES] ## RISK_LEVEL [RISK_LEVEL] ## INSTRUCTIONS 1. Split the article into the smallest meaningful passages that can be independently classified (typically sentence-level, but may be clause-level for complex sentences). 2. For each passage, assign exactly one classification. 3. Use "mixed" only when a single passage contains inseparable factual and non-factual elements. 4. Set attribution_ready to true for facts that can be checked against a specific type of external source (public records, databases, direct witness accounts, official documents). 5. Set attribution_ready to false for opinions, rhetorical framing, and predictions. 6. For analysis passages, set attribution_ready to true only if the analysis contains embedded factual claims that can be independently verified. 7. Provide a clear rationale for every classification decision. 8. Flag passages where opinion is disguised as neutral reporting by noting the framing technique in the rationale. 9. If the article contains unattributed assertions presented as fact, classify them as fact but set attribution_ready to false and note the missing attribution in the rationale. 10. Maintain exact text spans with accurate character offsets.
Adaptation guidance: The [CONSTRAINTS] placeholder should be replaced with domain-specific rules, such as handling requirements for financial forward-looking statements, medical uncertainty language, or legal evidentiary standards. The [EXAMPLES] placeholder should contain 2-4 annotated passages showing correct classification boundaries, including edge cases where fact and opinion appear in the same sentence. The [RISK_LEVEL] placeholder should specify whether this is a pre-publication review (higher precision required) or post-publication analysis (higher recall acceptable). For production use, always pair this prompt with a validation step that checks JSON schema compliance, character offset accuracy, and classification consistency across the full article.
Next steps: After generating the separation output, run a validation pass to verify that all character offsets map correctly to the source text and that no passages were skipped or duplicated. For high-risk editorial workflows, route all "mixed" classifications and low-confidence decisions (confidence < 0.7) to human review before the output is used in downstream verification pipelines. Avoid using this prompt on content that has already been through a fact-checking process, as the model may conflate verified facts with the original article's presentation.
Prompt Variables
Inputs required for the News Article Fact-Opinion Separation Prompt. Validate each before execution to prevent misclassification and downstream verification errors.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[ARTICLE_TEXT] | Full text of the news article to be analyzed | The central bank raised interest rates by 25 basis points, a move that experts say will cool the housing market. | Required. Must be non-empty string. Check for minimum 50 characters to avoid trivial inputs. Strip HTML tags and normalize whitespace before passing. |
[ARTICLE_SOURCE] | Publication name and URL for provenance tracking | Reuters, https://www.reuters.com/article/... | Required. Must be a non-empty string. Validate URL format if present. Used for source authority weighting in downstream verification. |
[PUBLICATION_DATE] | Date the article was published or last updated | 2025-03-15 | Required. Must be ISO 8601 date string. Reject future dates. Used to determine recency for evidence matching and to flag stale claims. |
[CLASSIFICATION_TAXONOMY] | List of categories to classify each sentence into | ["fact", "opinion", "analysis", "prediction", "rhetorical_framing"] | Required. Must be a non-empty array of strings. Validate against allowed taxonomy values. Default taxonomy provided; domain-specific variants may add or remove categories. |
[OUTPUT_SCHEMA] | Expected JSON structure for the separation output | {"sentences": [{"index": 0, "text": "...", "classification": "fact", "confidence": 0.92, "rationale": "..."}]} | Required. Must be a valid JSON Schema object. Validate that schema includes required fields: index, text, classification, confidence. Reject schemas missing confidence or rationale fields. |
[CONFIDENCE_THRESHOLD] | Minimum confidence score for automated classification; lower scores route to human review | 0.85 | Optional. Must be a float between 0.0 and 1.0. Defaults to 0.85 if not provided. Used to trigger human review routing for ambiguous cases. |
[DOMAIN_CONTEXT] | Optional domain-specific guidance for boundary detection | Financial reporting: distinguish reported earnings from management commentary and forward-looking statements. | Optional. Null allowed. If provided, must be a non-empty string. Use to adapt classification rules for specialized content types like legal briefs or medical summaries. |
Implementation Harness Notes
How to wire the News Article Fact-Opinion Separation Prompt into a production verification pipeline with validation, retries, and human review routing.
This prompt is designed as a pre-processing step in a larger fact-checking pipeline. It should sit between content ingestion and claim verification. The model receives the full article text and returns a structured JSON object with two arrays: factual_claims (verifiable statements with source spans) and opinion_analysis (interpretation, editorializing, predictions, and rhetorical framing). Each entry must include the original text span, start and end character offsets, and a confidence score. The output schema is strict, so your application must validate it before passing claims downstream to evidence matching or human review queues.
Wire the prompt into your application with a validation layer that checks: (1) the JSON parses without error, (2) every entry in both arrays contains the required fields (span, start_char, end_char, confidence, type), (3) character offsets align with the original article text when extracted, and (4) no text span appears in both arrays unless it's a genuinely mixed sentence flagged with low confidence. If validation fails, retry once with the same prompt and a stronger constraint instruction appended: 'Your previous output failed schema validation. Ensure every entry has all required fields and character offsets match the source text exactly.' If the second attempt fails, route the article to a human review queue with the raw model output and validation error log attached. Use a model with strong JSON-mode support (GPT-4o, Claude 3.5 Sonnet, or equivalent) and set response_format to json_object with the schema provided in the prompt template. For high-throughput pipelines, batch articles in groups of 5-10 and process asynchronously, logging each article's separation latency and validation pass/fail status for observability.
Human review routing is critical for ambiguous cases. Any entry with confidence below 0.7 should be flagged for review. Additionally, if more than 20% of an article's sentences are classified with confidence below 0.7, escalate the entire article. Build a review interface that shows the original article with classified spans highlighted in different colors (green for factual, blue for opinion/analysis) and allows reviewers to reclassify spans with a single click. Log all human corrections to build a fine-tuning dataset for future model improvement. Do not send unvalidated model output directly to downstream verification systems—a single malformed claim with incorrect offsets can corrupt evidence matching and produce false verification results. Do version your prompt and track which prompt version produced each separation result so you can measure regression when iterating on the template.
Expected Output Contract
Defines the structured JSON output schema for the News Article Fact-Opinion Separation Prompt. Use this contract to validate model responses before they enter downstream verification pipelines.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
article_id | string | Must match the provided [ARTICLE_ID] input exactly. Fail if missing or mismatched. | |
passages | array of objects | Must be a non-empty array. Fail if null, empty, or not an array. | |
passages[].passage_text | string | Must be a non-empty string containing the original verbatim text span from [ARTICLE_TEXT]. Fail if empty or not found in source. | |
passages[].classification | string (enum) | Must be one of: 'factual_claim', 'opinion', 'analysis', 'editorializing', 'prediction', 'rhetorical_framing'. Fail on any other value. | |
passages[].confidence | number | Must be a float between 0.0 and 1.0 inclusive. Fail if out of range or not a number. | |
passages[].source_spans | array of objects | Must contain at least one object with 'start_char' and 'end_char' integers. Fail if empty or missing required keys. | |
passages[].source_spans[].start_char | integer | Must be a non-negative integer representing the character offset in [ARTICLE_TEXT]. Fail if negative or not an integer. | |
passages[].source_spans[].end_char | integer | Must be an integer greater than start_char and within [ARTICLE_TEXT] length. Fail if not greater than start_char or out of bounds. |
Common Failure Modes
Fact-opinion separation prompts fail in predictable ways. These are the most common production failure modes and the specific guardrails that prevent them.
Opinion Disguised as Neutral Reporting
What to watch: The model classifies subtly framed editorializing as factual because the language mimics neutral reporting style. This happens most often with passive voice, nominalizations, and unattributed assertions that carry implicit judgment. Guardrail: Add few-shot examples showing pairs of sentences where identical facts are presented with and without opinion framing. Require the model to flag any passage lacking explicit attribution or measurable claims as 'interpretation' by default.
Boundary Collapse in Compound Sentences
What to watch: A single sentence contains both a verifiable fact and an interpretive clause, and the model classifies the entire sentence as one type, losing the embedded claim. This is the most common precision failure in production pipelines. Guardrail: Add a pre-processing instruction requiring clause-level splitting before classification. Test with sentences like 'The deficit rose 12%, reflecting years of fiscal mismanagement' and verify both labels appear in output.
Source Attribution Confusion
What to watch: The model treats statements from sources as verified facts simply because they are attributed, failing to distinguish 'X said Y' from 'Y is true.' This creates false positives in verification pipelines downstream. Guardrail: Add an explicit output field for 'attribution status' with values: 'directly observed,' 'attributed to named source,' 'attributed to unnamed source,' and 'unattributed.' Require the model to never mark attributed claims as verified facts without independent evidence.
Domain-Specific Jargon Misclassification
What to watch: In legal, financial, or medical content, domain-standard phrasing that sounds interpretive to a general-purpose model is actually a factual assertion within that domain's conventions. The model over-flags domain facts as opinion. Guardrail: Provide a domain-specific glossary of terms and phrasings that should be treated as factual within the target domain. Include counterexamples showing where general rules reverse for domain conventions. Test against domain expert annotations.
Temporal Framing Drift
What to watch: The model classifies past-tense statements as facts and future-tense statements as opinion, missing that past-tense statements can be interpretive and future-tense statements can be factual commitments. This is especially dangerous in financial and policy content. Guardrail: Add explicit temporal classification rules: 'past event claims require evidence of occurrence,' 'future commitments by authorized speakers are factual claims about intent, not predictions.' Include test cases with past-tense opinions and future-tense factual commitments.
Confidence Overstatement on Boundary Cases
What to watch: The model assigns high confidence to classifications on passages where fact and interpretation are genuinely entangled, creating downstream overconfidence in verification pipelines. Guardrail: Require a 'boundary confidence' score separate from classification confidence. When boundary confidence is low, route to human review regardless of classification confidence. Set an explicit threshold for auto-approval and test it against human inter-annotator disagreement rates.
Evaluation Rubric
Use this rubric to test the quality of the fact-opinion separation output before integrating it into a production verification pipeline. Each criterion targets a specific failure mode common in news article decomposition.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Factual Claim Atomicity | Each fact in [FACTUAL_CLAIMS] is a single, verifiable statement with one subject-predicate unit | Multiple distinct claims concatenated into one list item; compound sentences not decomposed | Parse output array; assert no item contains 'and' or 'but' joining two independent clauses with separate truth values |
Opinion Leakage into Facts | [FACTUAL_CLAIMS] contains zero statements with subjective adjectives, predictions, or value judgments | Presence of terms like 'likely', 'should', 'concerning', 'unprecedented', or 'arguably' in factual claim text | Regex scan for opinion markers; spot-check 20 random claims against human annotation; fail if >2% leakage |
Fact Suppression in Interpretation | [INTERPRETATION_AND_OPINION] does not contain checkable factual assertions misclassified as analysis | A passage labeled as opinion contains a date, quantity, or named-entity assertion that can be verified against a public record | Sample 10 interpretation items; for each, ask: 'Can this be checked against a single authoritative source?' Flag any 'yes' as failure |
Source Span Traceability | Every item in [FACTUAL_CLAIMS] includes a [SOURCE_SPAN] that maps exactly to the original article text | Null or empty [SOURCE_SPAN]; span text does not match any substring in [ARTICLE_TEXT]; span is entire paragraph rather than specific sentence | Validate all spans exist in source via exact string match; assert span length < 500 chars; fail if >1% missing or mismatched |
Attribution Preservation | Claims retain original attribution cues: who said it, reported it, or documented it | Attribution stripped from claim text; passive voice replaces active attribution; 'according to' source dropped | Check claims containing named entities against source spans; assert attribution entity present in claim if present in span; fail if >5% attribution loss |
Neutral Framing Detection | [INTERPRETATION_AND_OPINION] flags passages where neutral language masks editorial stance | A passage using factual tone but containing selective omission, loaded juxtaposition, or implied causation is classified as factual | Human review of 10 borderline passages; compare model classification to expert consensus; require >85% agreement on 'interpretation' label for subtly framed content |
Output Schema Compliance | Response validates against [OUTPUT_SCHEMA] with all required fields present and correctly typed | Missing [FACTUAL_CLAIMS] or [INTERPRETATION_AND_OPINION] array; [CONFIDENCE_SCORE] not a float 0-1; extra undeclared fields | Run JSON Schema validator against output; assert no validation errors; fail on any schema violation |
Confidence Score Calibration | [CONFIDENCE_SCORE] correlates with passage ambiguity: high for clear fact-opinion boundaries, low for mixed or unclear passages | Score is always 0.9+ regardless of passage complexity; score drops to <0.5 on trivial separations | Test on 5 pre-labeled ambiguous passages and 5 clear passages; assert mean confidence on ambiguous set is < mean on clear set; fail if inverted |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base prompt and a small sample of 5-10 articles. Remove strict output schema requirements initially; accept a simple JSON list of fact and opinion objects with text and span fields. Use a frontier model (GPT-4o, Claude 3.5 Sonnet) with default temperature.
codeFor each sentence in [ARTICLE_TEXT], classify it as "fact" or "opinion". Return JSON: [{"type": "fact"|"opinion", "text": "...", "span": [start_char, end_char]}]
Watch for
- Sentences containing both fact and opinion clauses will be misclassified as one type
- Editorial framing words ("clearly," "obviously") may not trigger opinion classification
- No confidence scores, so borderline cases are silently assigned

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us