algo-seo-tfidf
Implement TF-IDF scoring to measure term importance relative to a document corpus. Use this skill when the user needs to rank documents by keyword relevance, extract important terms from text, or build a basic search relevance engine — even if they say 'find relevant documents', 'keyword extraction', or 'term importance'.
pinned to #4e7f4f8updated last month
Ask your AI client: “install skills/algo-seo-tfidf”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/algo-seo-tfidfmetahub onboarded this repo on the author's behalf.
If you own github.com/asgard-ai-platform/skills on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
225
Last commit
last month
Latest release
published
- #ai-agent
- #anthropic
- #claude
- #claude-agent-skills
- #claude-code
- #coding-agent
- #knowledge-base
- #mcp
- #methodology
- #open-source
- #prompt-engineering
- #skills
- #taiwan
Automated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.4e7f4f8· last month
Documentation
8 passed1 warningHomepage or repository declaredwarn
No homepage or repository declared.
Add a "homepage" or "repository" field to SKILL.md.
Description quality
50 words · 323 chars — "Implement TF-IDF scoring to measure term importance relative to a document corpu…"
README is present and substantial
33,936 chars · 20 sections · 3 code blocks
Tags / topics declared
13 total — ai-agent, anthropic, claude, claude-agent-skills, claude-code, coding-agent (+7)
README has usage / example sections
no labeled section but 3 code blocks document usage
Homepage / docs URL declared
https://vault.asgard-ai.com/skills/
Description is substantive
Description is 50 words.
Documentation present and substantive
Documentation present (SKILL.md, 574 words).
Documentation shows usage
Documentation includes 2 code examples.
Release history
1- releasecurrent4e7f4f8warnlast month
Contents
Overview
TF-IDF (Term Frequency–Inverse Document Frequency) scores term importance as TF(t,d) × IDF(t). High scores mean a term is frequent in a document but rare across the corpus. Computes in O(N × V) where N is documents and V is vocabulary size.
When to Use
Trigger conditions:
- Ranking documents by keyword relevance
- Extracting distinguishing terms from documents
- Building lightweight search without ML models
When NOT to use:
- When semantic similarity matters (use embeddings instead)
- When you need ranking with link authority (combine with PageRank)
Algorithm
IRON LAW: TF-IDF Measures RELATIVE Importance
- A term with high TF but low IDF is common, NOT important
- TF-IDF = TF(t,d) × log(N / DF(t))
- A term appearing in ALL documents has IDF = 0 → score = 0
Phase 1: Input Validation
Tokenize documents, apply lowercasing, remove stop words. Build vocabulary. Gate: All documents tokenized, vocabulary size reasonable.
Phase 2: Core Algorithm
- Compute TF(t,d) for each term in each document (raw count, log-normalized, or boolean)
- Compute IDF(t) = log(N / DF(t)) where DF(t) = number of documents containing term t
- Compute TF-IDF(t,d) = TF(t,d) × IDF(t)
- Optionally L2-normalize document vectors for cosine similarity
Phase 3: Verification
Check: terms appearing in all documents have IDF ≈ 0. Rare terms have high IDF. Gate: Score distribution is reasonable; common words score low.
Phase 4: Output
Return scored terms per document or ranked documents per query.
Output Format
{
"query_results": [{"document": "doc_id", "score": 0.73, "matching_terms": ["term1", "term2"]}],
"metadata": {"corpus_size": 1000, "vocabulary_size": 5000, "tf_variant": "log_normalized"}
}
Examples
Sample I/O
Input: Corpus: ["the cat sat", "the dog sat", "the cat played"], Query: "cat" Expected: TF("cat", doc1)=1/3, DF("cat")=2, IDF=log(3/2)=0.405. TF-IDF(doc1)=0.135, TF-IDF(doc3)=0.135, TF-IDF(doc2)=0
Edge Cases
| Input | Expected | Why |
|---|---|---|
| Term in all docs | Score = 0 | IDF = log(N/N) = 0 |
| Term in one doc | Highest IDF | log(N/1) = log(N) |
| Empty document | All scores = 0 | No terms to score |
Gotchas
- Stop words matter: Without stop word removal, "the", "is", "a" dominate TF but have zero IDF. Preprocess properly.
- TF variant choice: Raw count, log(1+count), or boolean TF produce very different rankings. Log normalization prevents long documents from dominating.
- IDF smoothing: Add 1 to denominator to avoid division by zero for unknown query terms: IDF = log(N / (DF+1)) + 1.
- Not semantic: "car" and "automobile" are treated as completely different terms. TF-IDF has no concept of synonymy.
- Corpus dependency: IDF values change when the corpus changes. Adding documents alters all scores.
Scripts
| Script | Description | Usage |
|---|---|---|
scripts/tfidf.py | Compute TF-IDF vectors, top terms per document, and query scoring | python scripts/tfidf.py --help |
Run python scripts/tfidf.py --verify to execute built-in sanity tests.
References
- For BM25 (improved TF-IDF), see
references/bm25-comparison.md - For efficient inverted index implementation, see
references/inverted-index.md
Reviews
No reviews yet. Be the first.
Related
Verification Before Completion
Evidence before assertions, always
Writing Plans
Turn specs into phased implementation plans
Test-Driven Development
Red → green → refactor discipline for any feature or bugfix
mh install skills/algo-seo-tfidf