Skip to content

参考

基于 NLTK 官方文档(nltk.org/book + nltk.org/howto + API Reference)整理

速查

  • 安装pip install nltk,数据 nltk.download("name")
  • 分词nltk.word_tokenize / nltk.sent_tokenize(需 punkt)
  • 词性nltk.pos_tag(tokens)(Penn Treebank 标签)
  • 词干PorterStemmer().stem / LancasterStemmer().stem / SnowballStemmer(lang).stem
  • 词元WordNetLemmatizer().lemmatize(word, pos='n'/'v'/'a'/'r')
  • 频率nltk.probability.FreqDist
  • 语料nltk.corpus.{gutenberg,brown,reuters,stopwords,wordnet,...}
  • 分类nltk.classify.NaiveBayesClassifier / DecisionTreeClassifier
  • 组块nltk.RegexpParser(grammar)
  • import 名import nltk
  • 当前版本:NLTK 3.9.x(Python 3.9–3.13)
  • 许可:Apache 2.0

核心 API

分词

python
import nltk
nltk.word_tokenize(text)    # → list[str],词级
nltk.sent_tokenize(text)    # → list[str],句级

依赖数据:punkt(旧)/ punkt_tab(3.9.x 新)。

词性标注

python
nltk.pos_tag(tokens)   # → [(word, tag), ...]

依赖 averaged_perceptron_tagger / averaged_perceptron_tagger_eng(3.9.x)。

词干提取

特点调用
PorterStemmer经典、温和.stem(word)
LancasterStemmer激进、易过度.stem(word)
SnowballStemmer(lang)多语言、Porter 改进.stem(word)
python
from nltk.stem import PorterStemmer, SnowballStemmer
PorterStemmer().stem("running")              # run
SnowballStemmer("english").stem("running")   # run
SnowballStemmer("french").stem("manger")     # 多语言

词形还原

python
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
wnl.lemmatize("dogs")                  # dog(默认名词)
wnl.lemmatize("running", pos="v")      # run
wnl.lemmatize("better", pos="a")       # good
wnl.lemmatize("quickly", pos="r")      # quickly(副词)

pos 取值:'n'(noun)/'v'(verb)/'a'(adj)/'r'(adv)(WordNet 词性)。

频率分布

python
from nltk.probability import FreqDist
fdist = FreqDist(tokens)
fdist["word"]              # 某词计数
fdist.most_common(n)       # 前 n 高频
fdist.hapaxes()            # 只出现一次的词
fdist.tabulate(n)          # 表格
fdist.plot(n, cumulative=True)   # 图(需 matplotlib)

语料库 API

python
from nltk.corpus import stopwords, wordnet, gutenberg, brown

# 停用词
stopwords.words("english")          # → list[str]
stopwords.words("chinese")          # 中文停用词

# WordNet
wordnet.synsets("dog")              # 同义词集列表
wordnet.synset("dog.n.01").lemma_names()   # 义词典词面
wordnet.synset("dog.n.01").hypernyms()     # 上位词
wordnet.synset("dog.n.01").hyponyms()      # 下位词
wordnet.lemmas("happy")             # 词面列表

# 文本语料(统一接口)
gutenberg.fileids()                 # 文件名列表
gutenberg.words("austen-emma.txt")  # 词迭代器
gutenberg.sents("austen-emma.txt")  # 句子迭代器
brown.categories()                  # 体裁列表(news/fiction/...)
brown.words(categories="news")      # 按体裁取词

分类 API

python
from nltk.classify import NaiveBayesClassifier, accuracy

classifier = NaiveBayesClassifier.train(labeled_featuresets)
classifier.classify(featureset)             # 预测标签
classifier.classify_many([f1, f2])          # 批量
classifier.prob_classify(featureset).prob("pos")   # 概率
accuracy(classifier, test_set)              # 准确率
classifier.show_most_informative_features(n)

特征约定:featureset 是 {name: True/False 或 数值}

Penn Treebank 常用标签

标签含义标签含义
CC并列连词CD基数词
DT限定词EX存在性 there
IN介词/从属连词JJ形容词
JJR/JJS比较级/最高级形容词MD情态动词
NN单数名词NNS复数名词
NNP/NNPS专有名词 单/复PDT前位限定词
POS所有格结尾PRP人称代词
PRP$物主代词RB副词
RBR/RBS比较级/最高级副词RP小品词
TOtoUH感叹词
VB动词原形VBD过去式
VBG动名词/现在分词VBN过去分词
VBP/VBZ动词 非三单/三单WDTwh-限定词
WP/WP$wh-代词/物主WRBwh-副词

数据包速查

数据包用途
punkt / punkt_tab分词器模型
averaged_perceptron_tagger / _eng英文词性标注
stopwords多语言停用词
wordnetWordNet 义词典
omw-1.4Open Multilingual WordNet
gutenberg / brown / reuters / inaugural文本语料
names / words人名 / 基本词表
maxent_ne_chunker命名实体组块
averaged_perceptron_tagger_ru其他语言标注器

一键下载教学常用集:

python
import nltk
nltk.download(["punkt", "punkt_tab", "averaged_perceptron_tagger_eng",
               "stopwords", "wordnet", "omw-1.4", "gutenberg"], quiet=True)

版本与兼容

版本线状态关键点
NLTK 3.9.x活跃主线(2026)Python 3.9–3.13;移除 pickle 模型(安全);punkt/tagger 拆出 _tab/_eng
NLTK 3.8.x旧版3.8.1 广泛使用
NLTK 3.x当前大版本兼容 Python 3,重写大量接口

兼容性:

  • Python:3.9–3.13(3.9.x 要求)
  • 依赖:纯 Python;可视化需 matplotlib,部分高级功能可选 numpy/scikit-learn
  • 数据:独立下载,与库版本基本解耦,但 3.9.x 部分需新数据包名

与同类库对比

维度NLTKspaCysklearn(文本部分)
定位教学/学术工业/生产通用机器学习
接口函数式管线 + 对象估计器 fit/predict
速度纯 Python,慢Cython 加速,快C 加速,较快
语料内置 50+训练管线包无(需自备)
管线手动拼接nlp(text) 一次到位Pipeline 组装
Transformerspacy-transformers配 transformers
词形还原WordNetLemmatizer上下文相关(用管线 POS)无内置
适合场景教学、原型、语料分析生产 NLP文本分类等任务

官方资源