📜  python中的nltk(1)

📅  最后修改于: 2023-12-03 15:19:27.117000             🧑  作者: Mango

Python中的nltk

简介

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))
参考资料