A lightweight, zero-dependency NLP summarization package built with TypeScript. Inspired by traditional NLP techniques like those in Python's NLTK — but without any API or AI calls.
npm install ts-summarizerbash
npm install text-summarizer
or
yarn add text-summarizer
or
pnpm add text-summarizer
`
Usage
$3
`typescript
import { Summarizer } from 'text-summarizer';
const text =
;
// Get a 30% length summary
const summary = Summarizer.summarize(text, 0.3);
console.log(summary);
// Or specify a maximum number of sentences
const threeLineSummary = Summarizer.summarize(text, undefined, 3);
console.log(threeLineSummary);
`
$3
`typescript
import { Summarizer } from 'text-summarizer';
const longText = ...your long text here...;
const summary = Summarizer.summarize(
longText,
0.25, // Summarize to 25% of original length
10, // Maximum of 10 sentences
{
deduplicateSimilar: true, // Remove similar sentences
favorPositionScore: true, // Prioritize intro/conclusion sentences
}
);
console.log(summary);
`
$3
`typescript
import { Tokenizer, TextRank, STOPWORDS } from 'text-summarizer';
// Split text into sentences
const sentences = Tokenizer.splitSentences("Hello world! This is a test.");
// Tokenize words from text
const words = Tokenizer.tokenizeWords("Hello world! This is a test.");
// Calculate sentence importance using TextRank
const sentenceScores = TextRank.rankSentences(sentences);
// Check if a word is a stopword
const isStopword = STOPWORDS.has('the'); // true
`
API Reference
$3
`typescript
static summarize(
text: string,
summaryRatio: number = 0.3,
maxSentences?: number,
options: {
deduplicateSimilar?: boolean;
favorPositionScore?: boolean;
} = {}
): string
`
- text: The text to summarize
- summaryRatio: Target length as a ratio of original text (default: 0.3)
- maxSentences: Maximum number of sentences to include
- options:
- deduplicateSimilar: Remove semantically similar sentences
- favorPositionScore: Prioritize sentences from introduction and conclusion
$3
`typescript
static splitSentences(text: string): string[]
static tokenizeWords(sentence: string, removeStopwords: boolean = true): string[]
static stemWord(word: string): string
`
$3
`typescript
static calculateSimilarity(sentence1: string, sentence2: string): number
static rankSentences(sentences: string[]): number[]
``