The interface is localized. Skill descriptions and documents are machine-translated by AI into your language; code, commands, paths and technical terms stay in the original, and the author's document governs.
Explore skills
Productivity · SKILL.md

tokenize-tag-stem

tokenize-tag-stem

Use NLTK tokenization, detokenization, POS tagging, tagger training, stemming, lemmatization, and sentiment preprocessing APIs without reopening the source repo.

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill documentation

GitHub

name: tokenize-tag-stem description: "Use NLTK tokenization, detokenization, POS tagging, tagger training, stemming, lemmatization, and sentiment preprocessing APIs without reopening the source repo." disable-model-invocation: true metadata: disco-role: operating license: Apache 2.0

Tokenize Tag Stem

Use this sub-skill when the task is about NLTK text preprocessing: tokenizing or detokenizing strings, running the nltk tokenize CLI, POS-tagging tokens, training simple taggers, stemming or lemmatizing words, or using VADER/basic sentiment preprocessing.

Route away from this sub-skill when the task is mainly about:

Fast Paths

  • For no-download word splitting, prefer WordPunctTokenizer, TreebankWordTokenizer, TweetTokenizer, or word_tokenize(text, preserve_line=True). sent_tokenize() and word_tokenize(..., preserve_line=False) need Punkt table data for the selected language.
  • For command-line tokenization, use nltk tokenize; it reads stdin and exposes --language, --preserve-line, --processes, --encoding, and --delimiter. The bundled CLI smoke checks the installed console script.
  • For tweets/social text, use TweetTokenizer(strip_handles=True, reduce_len=True, preserve_case=...); decide whether phone numbers should be matched with match_phone_numbers.
  • For POS tags, pass a list of tokens to pos_tag(tokens, tagset=None, lang="eng") or a list of token lists to pos_tag_sents. English uses averaged_perceptron_tagger_eng; Russian uses lang="rus" and averaged_perceptron_tagger_rus.
  • For a quick custom baseline tagger, combine RegexpTagger rules with UnigramTagger(train_sents, backoff=...); evaluate with accuracy, evaluate_per_tag, or a ConfusionMatrix when gold tagged sentences are available.
  • For stemming, use PorterStemmer(mode=...), SnowballStemmer(language, ignore_stopwords=False), LancasterStemmer, RegexpStemmer, or language-specific stemmers. Porter and most Snowball workflows do not need NLTK data.
  • For lemmatization, WordNetLemmatizer.lemmatize(word, pos="n") depends on WordNet for real morphology; download/check wordnet and omw-2.0 when multilingual or synonym-aware behavior is needed.
  • For sentiment, SentimentIntensityAnalyzer() requires vader_lexicon; route missing lexicon errors to the data/downloader sub-skill. SentimentAnalyzer can build features for a classifier workflow, which then routes to the ML sub-skill.

Reference Map

Minimum Validation Pattern

  1. Print nltk.__version__, the exact API or CLI route, and whether the workflow is allowed to download NLTK data.
  2. For tokenization, test one representative string and state whether sentence splitting is enabled (preserve_line=False) or skipped (preserve_line=True).
  3. For POS tagging, assert the input is list[str], not a raw string; for batches, assert list[list[str]].
  4. Before running data-backed APIs, probe exact resources such as tokenizers/punkt_tab/english/, taggers/averaged_perceptron_tagger_eng/, taggers/universal_tagset/, corpora/wordnet/, or sentiment/vader_lexicon.zip/vader_lexicon/vader_lexicon.txt.
  5. For custom taggers, keep training/testing data separated and report unknown-token behavior instead of hiding None tags.
  6. Run the bundled no-download smoke from any current working directory in an environment with NLTK installed:
python /path/to/skills/disco/nltk/sub-skills/tokenize-tag-stem/scripts/text_preprocess_smoke.py --json
python /path/to/skills/disco/nltk/sub-skills/tokenize-tag-stem/scripts/tokenize_cli_smoke.py --json
Saved skills