Inferensys

Prompt

News Article Fact-Opinion Separation Prompt

A practical prompt playbook for editorial verification teams using LLMs to separate verifiable factual claims from opinion, analysis, and editorial framing in journalistic content.
Finance team analyzing AI ROI on laptop, investment return charts visible, business case review session.
PROMPT PLAYBOOK

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.

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.

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.

PRACTICAL GUARDRAILS

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

PROMPT PLAYBOOK

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.

code
You 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.

IMPLEMENTATION TABLE

Prompt Variables

Inputs required for the News Article Fact-Opinion Separation Prompt. Validate each before execution to prevent misclassification and downstream verification errors.

PlaceholderPurposeExampleValidation 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

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.

PROMPT PLAYBOOK

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.

IMPLEMENTATION TABLE

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 ElementType or FormatRequiredValidation 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.

PRACTICAL GUARDRAILS

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

IMPLEMENTATION TABLE

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.

CriterionPass StandardFailure SignalTest 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

ADAPTATION OPTIONS

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.

code
For 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
Prasad Kumkar

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.