slash-dash
v1.2.0
Published
Remove em-dashes and en-dashes and replace them with appropriate punctuation using natural language understanding
Maintainers
Readme
Slash-Dash
A Node.js package that removes em-dashes and en-dashes from text and replaces them with appropriate punctuation using natural language understanding.
Try it out: Playground
Installation
npm install slash-dashUsage
import { processDash } from 'slash-dash';
const text = "The weather was perfect—sunny and warm—for our picnic.";
// Process both em-dashes (—) and en-dashes (–) - default behavior
const { processedText, meta } = await processDash(text);
console.log(processedText);
// "The weather was perfect, sunny and warm, for our picnic."
// Process only em-dashes
const { processedText: emOnly } = await processDash(text, { dashTypes: ['em'] });
// Process only en-dashes
const { processedText: enOnly } = await processDash(text, { dashTypes: ['en'] });
console.log(meta);
// [
// {
// index: 24,
// replacement: ", ",
// confidence: 0.5,
// reason: "default_fallback",
// contextSnippet: "..."
// },
// ...
// ]Methods
processDash(text, options)
Processes text to replace em-dashes and/or en-dashes with appropriate punctuation.
Parameters:
text(string): The text to processoptions(object, optional): Configuration optionsdashTypes(string[], optional): Types of dashes to replace. Defaults to['em', 'en']'em': Replace em-dashes (—, ---, --)'en': Replace en-dashes (–)
Returns:
Promise<{ processedText: string, meta: Array }>processedText: The text with dashes replacedmeta: Array of metadata objects for each replacement, containing:index: Original position of the dashreplacement: The punctuation used as replacementconfidence: Confidence score (0-1)reason: Reason for the replacementcontextSnippet: Context around the replacement
How It Works
The package uses compromise (a JavaScript NLP library) for natural language understanding to determine the most appropriate punctuation replacement for each em-dash or en-dash.
The NLP-powered algorithm analyzes:
- Parts of speech - identifies nouns, verbs, pronouns, determiners, and conjunctions
- Sentence structure - detects sentence boundaries and independent clauses
- Grammatical patterns - identifies appositives, explanations, relative clauses, and lists
- Context clues - examines surrounding words, punctuation, and grammatical relationships
- Clause types - recognizes independent and dependent clauses using subject-verb detection
Additional heuristics keep the output stylistically natural:
- Mirrored clauses (e.g. “Windows rattled—hearts did too.”) preserve the dash rhythm
- Intro adverbs & short lead-ins (e.g. “Sometimes, …”) become commas for smoother flow
- Copular explanations (e.g. “It was a quick trip—a weekend getaway.”) elevate to colons
- Punchy fragments (e.g. “—not this time.”, “—again.”) retain the dash emphasis
Possible replacements:
- Commas (,) - for most general cases, lists, continuations, and dialogue
- Periods (.) - for sentence boundaries or complete thoughts
- Colons (:) - for introducing explanations, definitions, or appositives
- Semicolons (;) - for connecting related independent clauses
- Spaces - for purely decorative em-dashes
Testing
npm testRequirements
- Node.js >= 14.0.0
License
MIT
