NLTK
(Natural Language Toolkit)是一个领先的平台,用于构建处理人类语言数据的Python程序。它提供了易于使用的接口,用于超过50个语料库和词汇资源,如WordNet,以及一套文本处理库,用于分类、标记化、词干提取、标记、解析和语义推理。
NLTK的主要功能
- 语料库访问:提供多种语料库,如布朗语料库、Gutenberg语料库等。
- 文本预处理:包括文本清洗、标准化、分词等。
- 分词:将文本分割成单独的词语或符号。
- 词性标注:为文本中的每个词赋予相应的词性标签。
- 命名实体识别:从文本中识别特定类型的命名实体,如人名、地名等。
- 文本分类:自动将文本归类到特定类别。
- 语法分析:将句子解析成语法树。
常用NLTK函数及其参数
nltk.download()
下载所需的语料库和资源。
packages
: 要下载的资源列表,如'punkt'
、'averaged_perceptron_tagger'
等。
nltk.word_tokenize(text, language='english')
分词,将文本分割成单独的词语。
text
: 要分词的文本字符串。language
: 使用的语言,默认为英语。
nltk.pos_tag(tokens, tag_set=None)
词性标注,为分词后的每个词赋予词性标签。
tokens
: 分词后的词列表。tag_set
: 使用的词性标记集,默认为None。
nltk.ne_chunk(tagged_tokens, binary=False)
命名实体识别,识别文本中的命名实体。
tagged_tokens
: 已词性标注的词列表。binary
: 是否返回二进制树。
nltk.classify.apply_features(features, training, search=None)
应用特征提取,用于文本分类。
features
: 特征提取函数。training
: 用于训练的特征集。search
: 用于搜索的特征集。
nltk.classify.NaiveBayesClassifier.train(train_data)
训练朴素贝叶斯分类器。
train_data
: 用于训练的数据,格式为[(features, label), ...]
。
nltk.classify.NaiveBayesClassifier.classify(features)
使用训练好的分类器对文本进行分类。
features
: 要分类的特征集。
示例
以下是一个使用NLTK进行文本处理的示例:
import nltk
from nltk.corpus import treebank
from nltk.tokenize import PunktSentenceTokenizer
from nltk import data
# 下载所需的语料库
nltk.download('punkt')
data.path.append("/path/to/nltk_data")
# 分词和词性标注
sentence = "At eight o'clock on Thursday morning, Arthur didn't feel very good."
tokens = nltk.word_tokenize(sentence)
tagged = nltk.pos_tag(tokens)
# 命名实体识别
t = treebank.parsed_sents('wsj_0001.mrg')[0]
entities = nltk.ne_chunk(tagged)
# 打印结果
print("Tokens:", tokens)
print("Tagged:", tagged)
print("Entities:", entities)
# 文本分类
# 假设我们有一些训练数据
training_data = [
(['the', 'quick', 'brown', 'fox'], 'fox'),
(['the', 'lazy', 'dog'], 'dog')
]
# 特征提取函数
def extract_features(words):
return dict([word]=True for word in words)
# 应用特征提取
featuresets = [(extract_features(sentence), category) for (sentence, category) in training_data]
# 训练朴素贝叶斯分类器
classifier = nltk.NaiveBayesClassifier.train(featuresets)
# 对新句子进行分类
new_sentence = ['the', 'quick', 'brown', 'fox', 'jumps']
print("Classify:", classifier.classify(extract_features(new_sentence)))
在这个示例中,我们首先下载了所需的语料库,然后对一段文本进行了分词和词性标注。接着,我们使用treebank
语料库中的解析句子,并进行了命名实体识别。最后,我们创建了一些训练数据,定义了一个特征提取函数,应用了特征提取,训练了一个朴素贝叶斯分类器,并对一个新句子进行了分类。