📅  最后修改于: 2023-12-03 15:19:27.117000             🧑  作者: Mango
Natural Language Toolkit (nltk)是一个开源的Python库,它提供了易于使用的工具和数据集,用于进行自然语言处理任务,例如文本分类,标记,解析等等。 它也包括用于文本数据预处理和可视化的工具。
可以使用pip来安装nltk:
pip install nltk
nltk包括多个数据集,可以用来进行文本分析、处理和可视化。一些流行的数据集包括:
| 数据集名称 | 描述 | | --- | --- | | Gutenberg | 18种不同语言的电子书 | | Web Text | 联合国新闻网上的网络文本 | | Brown Corpus | 美国英语的一个经典语料库 | | WordNet | 英语单词的语义网络 |
可以使用以下命令下载数据集:
import nltk
nltk.download('<数据集名称>')
nltk提供了许多用于文本预处理的工具。以下是一些常用的工具:
把文本分割成单独的单词。
from nltk.tokenize import word_tokenize
text = "This is a sample sentence."
tokens = word_tokenize(text)
print(tokens)
# ['This', 'is', 'a', 'sample', 'sentence', '.']
停用词是可以从文本中去除的常用单词,例如“and”,“the”等。这些单词对文本分析没有贡献,可以从文本中去掉。
from nltk.corpus import stopwords
text = "This is a sample sentence. This is another sentence."
tokens = word_tokenize(text)
# 加载停止词
stopwords = set(stopwords.words('english'))
filtered_tokens = [word for word in tokens if word.lower() not in stopwords]
print(filtered_tokens)
# ['sample', 'sentence', '.', 'another', 'sentence', '.']
给每个单词标注一个词性标签。
from nltk.tag import pos_tag
text = "This is a sample sentence."
tokens = word_tokenize(text)
# 标注单词的词性
pos_tags = pos_tag(tokens)
print(pos_tags)
# [('This', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('sample', 'JJ'), ('sentence', 'NN'), ('.', '.')]
nltk包括许多用于文本分类的算法,例如朴素贝叶斯,决策树等。以下是一个简单的例子:
import random
from nltk.corpus import movie_reviews
from nltk.classify import NaiveBayesClassifier
from nltk.classify.util import accuracy
# 获取影评数据集
reviews = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
# 打乱数据集
random.shuffle(reviews)
# 抽取特征
all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = list(all_words)[:2000]
def document_features(document):
document_words = set(document)
features = {}
for word in word_features:
features['contains({})'.format(word)] = (word in document_words)
return features
# 拆分数据集为训练集和测试集
train_set = [(document_features(d), c) for (d,c) in reviews[:1000]]
test_set = [(document_features(d), c) for (d,c) in reviews[1000:]]
# 训练朴素贝叶斯分类器
classifier = NaiveBayesClassifier.train(train_set)
# 输出准确率
print('Accuracy:', accuracy(classifier, test_set))