NLTK,自然语言处理必备的工具箱!
点击
上方文字
关注我们
今天我们来聊聊一个相当厉害的 Python 库——NLTK(Natural Language Toolkit)。它是用来做自然语言处理(NLP)的神器,专门用来处理各种文本、语料库、分词、词性标注、语法解析等等。听起来好像很高大上,但别急,今天我会带你一步步了解它的强大功能。
1.
安装 NLTK
先说最重要的,NLTK 是个外部库,得先安装它才能用。命令如下:
1pip install nltk
安装好以后,咱们就可以愉快地开始玩耍了。记得,这个库还有一些额外的数据包需要下载,别忘了这句:
1import nltk
2nltk.download('punkt')
这个 punkt 是个分词器,后面咱们会用到。
2.
文本分词(Tokenization)
分词是 NLP 入门级的操作。简单来说就是把一段文本切分成一个个的单词或句子。NLTK 提供了非常方便的分词工具。
单词分词
我们先来看看怎么把一句话切成单词:
1from nltk.tokenize import word_tokenize
3sentence = “我爱Python编程!”
4tokens = word_tokenize(sentence)
5print(tokens)
输出结果会是:
1['我', '爱', 'Python', '编程', '!']
每个词,包括标点符号,都被单独分开了。是不是很简单?有了这一步,后面就可以做很多有意思的操作,比如统计词频啦、情感分析啦等等。
句子分词
除了把句子切成单词,我们还可以把一段话切成多个句子。用 sent_tokenize 来搞定:
1from nltk.tokenize import sent_tokenize
3paragraph = “我爱Python编程。它让我快乐!”
4sentences = sent_tokenize(paragraph)
5print(sentences)
结果是:
1['我爱Python编程。', '它让我快乐!']
它能智能地识别句号、感叹号,把文本分成一段段的句子。
3.
词性标注(Part-of-Speech Tagging)
分完词后,通常下一步就是给每个词打上标签,告诉我们这个词的词性是什么,是名词、动词还是形容词?NLTK 也提供了词性标注的功能。
1from nltk import pos_tag
2from nltk.tokenize import word_tokenize
4sentence = “I love programming.”
5tokens = word_tokenize(sentence)
6tagged = pos_tag(tokens)
7print(tagged)
输出结果可能是这样:
1[('I', 'PRP'), ('love', 'VBP'), ('programming', 'NN'), ('.', '.')]
每个词后面的字符串代表它的词性,比如 PRP 是代词,VBP 是动词,NN是名词。如果你觉得这些缩写看不懂,没关系,刚开始大家都是懵的。慢慢多用几次,熟悉了就好。
4.
词干提取(Stemming)
有时候我们处理文本时,可能会遇到同一个单词的不同形式,比如 “running” 和 “ran”。为了让这些词统一起来,NLTK 提供了词干提取的功能(Stemming),让这些不同形式的词还原成它们的“词干”。
1from nltk.stem import PorterStemmer
3stemmer = PorterStemmer()
4words = [“running”, “runs”, “ran”]
5stems = [stemmer.stem(word) for word in words]
6print(stems)
输出结果是:
1['run', 'run', 'ran']
你会发现 “running” 和 “runs” 都被还原成了 “run”。这种操作可以帮助我们在后续的文本分析中更好地处理数据,减少噪声。
5.
词形还原(Lemmatization)
与词干提取类似,但更智能的一种是词形还原(Lemmatization)。它不仅仅是简单粗暴地截断词尾,而是通过查词典的方式把单词还原到它的基本形式。
1from nltk.stem import WordNetLemmatizer
3lemmatizer = WordNetLemmatizer()
4lemmas = [lemmatizer.lemmatize(word, pos='v') for word in words]
5print(lemmas)
输出是:
1['run', 'run', 'run']
和 Stemming 不一样,Lemmatization 把 “ran” 也还原成了 “run”。这一点在某些应用场景下可能会更精准。
6.
停用词(Stop Words)
处理文本时,我们经常会遇到一些无意义的词,比如 “的”,“是”,“and”,“the” 这样频繁出现的词。我们通常会把这些词过滤掉,NLTK 提供了一个现成的停用词表,直接调用就行。
1from nltk.corpus import stopwords
3stop_words = set(stopwords.words('english'))
4words = [“This”, “is”, “a”, “simple”, “example”]
5filtered_words = [word for word in words if word.lower() not in stop_words]
6print(filtered_words)
输出:
1['This', 'simple', 'example']
“is” 和 “a” 这些常见的停用词就被过滤掉了。停用词库不仅仅是英文,NLTK 还提供了很多其他语言的停用词表。
7.
文本语料库(Corpora)
NLTK 内置了很多现成的语料库(Corpora),这些语料库可以用来做各种实验和分析。比如,常见的布朗语料库、古腾堡项目等等。
1from nltk.corpus import gutenberg
3sample_text = gutenberg.raw('austen-emma.txt')
4print(sample_text[:500])
这段代码会输出《爱玛》这本书的前 500 个字符。语料库非常丰富,你可以随便调来试试。
8.
温馨提示
写到这儿,我得提醒你一下,NLTK 虽然功能强大,但处理大规模文本时可能会有点慢。如果你想处理超大规模的文本数据,你可能需要考虑一些更高效的库,比如spaCy 或者 transformers。但对于入门和轻量级应用来说,NLTK 绝对是个不错的选择。
别忘了点
分享、
收藏、
在看、
点赞
哦!