NLTK
NLTK(Natural Language Toolkit)是 Python 自然语言处理库,提供分词、词性标注、句法分析等工具。
官网:https://www.nltk.org/
核心功能
| 功能 | 说明 |
|---|
| 分词 | 将文本切分为单词或句子 |
| 词性标注 | 为单词分配词性标签 |
| 词干提取 | 还原词汇到词干(Porter 算法) |
| 词形还原 | 还原词汇到标准词形(WordNet) |
| 句法分析 | 基于 CFG 分析句子结构 |
| 语义分析 | 查找同义词、反义词等 |
分词(Tokenization)
1
2
3
| from nltk.tokenize import word_tokenize
tokens = word_tokenize("NLTK is great for text analysis.")
# ['NLTK', 'is', 'great', 'for', 'text', 'analysis', '.']
|
词性标注(POS Tagging)
1
2
3
| from nltk import pos_tag
tagged = pos_tag(tokens)
# [('NLTK', 'NNP'), ('is', 'VBZ'), ...]
|
词干提取 vs 词形还原
1
2
3
4
5
6
7
8
9
| from nltk.stem import PorterStemmer, WordNetLemmatizer
# 词干提取(规则截断)
stemmer = PorterStemmer()
stemmer.stem("running") # 'run'
# 词形还原(词典查找,更准确)
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize("running", pos='v') # 'run'
|
句法分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| from nltk import CFG, ChartParser
grammar = CFG.fromstring("""
S -> NP VP
NP -> Det N
VP -> V NP
Det -> 'the' | 'a'
N -> 'dog' | 'cat'
V -> 'chased'
""")
parser = ChartParser(grammar)
for tree in parser.parse(['the', 'dog', 'chased', 'a', 'cat']):
tree.pretty_print()
|
语义分析(WordNet)
1
2
3
4
| from nltk.corpus import wordnet
for syn in wordnet.synsets("dog"):
print(syn.name(), syn.definition())
|
文本分类
1
2
3
4
5
6
7
| from nltk.classify import NaiveBayesClassifier
def extract_features(words):
return {word: True for word in words}
classifier = NaiveBayesClassifier.train(train_data)
classifier.classify(extract_features("Great movie!".split()))
|
原理总结
- 预处理:分词、标注、词形还原
- 方法:规则 + 统计模型结合
- 分类:Naive Bayes、Decision Tree
- 资源:WordNet、Treebank 内置
Comments