自然语言处理基础:NLTK库的使用

自然语言处理(NLP)是人工智能领域的一个重要分支,它涉及到计算机和人类语言之间的交互。NLTK(Natural Language Toolkit)是一个强大的Python库,提供了丰富的文本处理工具和大量的测试数据集。本文将介绍如何在系统中安装和使用NLTK来执行各种NLP任务。

安装NLTK

通过pip安装命令来安装NLTK库:

pip install nltk

为了更好地理解NLP的基础知识,可以参考以下链接:

虽然不是必须的,但如果在开始解决问题之前需要这些数据集,可以按照以下步骤下载:

import nltknltk.download()

完成这一步后,可以深入探讨使用NLTK进行的不同操作。

分词(Tokenization)

将文本分解成更小的单元称为分词。分词是文本的一小部分。如果有一个句子,目标是将每个单词分开,并构建一个词汇表,以便可以在列表中唯一地表示所有单词。数字、单词等都属于分词。

text = re.sub(r"[^a-zA-Z0-9]", " ", text.lower())words = text.split()print(words)

输出示例:['natural', 'language', 'processing', 'is', 'an', 'exciting', 'area', 'huge', 'budget', 'have', 'been', 'allocated', 'for', 'this']

小写转换

希望模型不会因为看到不同大小写的相同单词(一个以大写开头,一个没有)而混淆,并将两者解释为不同。因此,将所有单词转换为小写,以避免在标记列表中出现冗余。

text = re.sub(r"[^a-zA-Z0-9]", " ", text.lower())words = text.split()print(words)

输出示例:['natural', 'language', 'processing', 'is', 'an', 'exciting', 'area', 'huge', 'budget', 'have', 'been', 'allocated', 'for', 'this']

停用词去除

当从文本中提取特征来建模时,会遇到很多噪声,这些就是停用词,如the、he、her等,它们对没有帮助,应该在处理之前被移除,以便在模型内部进行更干净的处理。使用NLTK,可以看到所有英语中的停用词。

from nltk.corpus import stopwordsprint(stopwords.words("english"))

输出示例:['i', 'me', 'my', 'myself', 'we', ...]

移除停用词:

words = [w for w in words if w not in stopwords.words("english")]print(words)

输出示例:['natural', 'language', 'processing', 'exciting', 'area', 'huge', 'budget', 'allocated']

词干提取(Stemming)

在文本中,可能会发现许多像playing、played、playfully这样的单词,它们都有一个根词play,所有这些单词都传达了相同的意义。因此,只需要提取根词并移除其余部分。这里形成的根词称为“词干”,词干不一定需要存在并具有意义。通过去除后缀和前缀,生成了词干。

from nltk.stem.porter import PorterStemmerstemmed = [PorterStemmer().stem(w) for w in words]print(stemmed)

输出示例:['natur', 'languag', 'process', 'excit', 'area', 'huge', 'budget', 'alloc']

词元还原(Lemmatization)

希望提取单词的基形式。这里提取的单词称为词元,它在字典中是可用的。有WordNet语料库,生成的词元将在该语料库中。NLTK为提供了WordNet Lemmatizer,它利用WordNet数据库查找单词的词元。

from nltk.stem.wordnet import WordNetLemmatizerlemmed = [WordNetLemmatizer().lemmatize(w) for w in words]print(lemmed)

输出示例:['natural', 'language', 'processing', 'exciting', 'area', 'huge', 'budget', 'allocated']

解析树或句法树生成

可以定义语法,然后使用NLTK RegexpParser从句子中提取所有词性,并绘制函数以可视化它。

import nltknltk.download('punkt')nltk.download('averaged_perceptron_tagger')from nltk import pos_tag, word_tokenize, RegexpParser

示例文本:

sample_text = "The quick brown fox jumps over the lazy dog"tagged = pos_tag(word_tokenize(sample_text))chunker = RegexpParser("""NP: {?*} #To extract Noun Phrases P: {} #To extract Prepositions V: {} #To extract Verbs PP: { } #To extract Prepositional Phrases VP: { *} #To extract Verb Phrases""")output = chunker.parse(tagged)print("After Extractingn", output)output.draw()

参考链接:https://www.geeksforgeeks.org/syntax-tree-natural-language-processing/

词性标注(POS Tagging)

词性标注用于文本处理,以避免两个相同单词但具有不同意义的混淆。根据定义和上下文,给每个单词一个特定的标签并处理它们。这里使用了两个步骤:

import nltkfrom nltk.corpus import stopwordsnltk.download('punkt')nltk.download('averaged_perceptron_tagger')from nltk.tokenize import word_tokenize, sent_tokenizestop_words = set(stopwords.words('english'))txt = "Natural language processing is an exciting area. Huge budget have been allocated for this."tokenized = sent_tokenize(txt)for i in tokenized: wordsList = nltk.word_tokenize(i) wordsList = [w for w in wordsList if not w in stop_words] tagged = nltk.pos_tag(wordsList) print(tagged)

输出示例:[('Natural', 'JJ'), ('language', 'NN'), ('processing', 'NN'), ('exciting', 'JJ'), ('area', 'NN'), ('.', '.')] [('Huge', 'NNP'), ('budget', 'NN'), ('allocated', 'VBD'), ('.', '.')]

NLTK是任何刚接触自然语言处理的人的坚实基础。已经准备了基本技术,如分词、停用词去除、词干提取和词元还原——这些将成为实现更高级别NLP任务的核心技能之一。虽然已经了解了基本的文本预处理,但请记住NLP是一个广泛且不断变化的领域。

  • LinkedIn:
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485