3.1 NLTK工具集
介绍
- NLTK为自然语言处理集
- 多语料库(Corpora)
- 词典资源(Lexicon),如WordNet
- 基本自然语言处理工具集
- 标记解析(Tokenization)
- 词干提取(Stemming)
- 词性标注(POS Tagging)
- 句法分析(Syntactic Parsing)
- 安装(command+R),
pip install nltk
3.1.1 常见语料库和词典资源
- 下载
nltk.download()
方法
import nltk nltk.download() ```
-
- 停用词
- 因为语义不重要(如冠词),可以加快处理速度,所以减少规模,这些词语称为stopwords
from nltk.corpus import stopwardsstopwards.words()
-
- 常见语料库
- 文本数据集(图片,聊天记录等)
- 未标注语料库(raw text/生语料库/生文本)
- 使用下载方法如上所示,直接访问原始文本文件(目录为下载的时候选择的存储目录)
- 调用NLTK提供的功能
import nltk
from nltk.corpus import gutenberg
gutenberg.raw(“austen-emma.txt”) - 人工标注语料库(Annotated corpus)```
- 关于某项任务的结果(eg:句子记性语料库(sentence_polarity)包含了褒贬中性词,而且已经预处理过)
- sentence_polarity使用方法
- sentence_polarity.categories返回的是褒贬类信息,neg和pos
- sentence_polarity.words(categories=‘pos’)选择语料库全部单词列表
[(sentence, category) for category in sentence_polarity.categories()for sentence in sentence_polarity.sents(categories=category)]# 返回的是一个大列表,每个元素为一个句子的单词列表和对应褒贬构成元组
- 未标注语料库(raw text/生语料库/生文本)
-
- 常用词典
-
- WordNet
- 英语词义词典,Thesaurus定义了同义词集合(Synset),同义词集合有相同意义的词义组成。Gloss(剪短的释义),不同用一次集合之间具有一定关系
- 使用图示
from nltk.corpus import wordnetnltk.download('wordnet')syns = wordnet.synsets("bank")# 返回的bank的全部十八个词义的synset同义词集合print(syns[0].name)# 返回的是bank的第一个词义的名称,其中n代表名词syns[0].definition()# 返回bank的第二个词义的定义,即为银行的定义,返回的是英语解释syns[0].examples() # 返回的是bank的第一个使用实例syns[0].hypernyms()# 返回的是bank第一次词义的同义词集合dog = wordnet.synset('dog.n.01')cat = wordnet.synset('cat.n.01')dog.wup_similarity(cat) # 计算两个同义词之间的Wu-Palmer的相似度
- 使用图示
- synset返回全部词义,definition返回定义,examples返回使用例子,hypernyms返回第一个词义的同义词集合,wup_similarity返回Wu-Palmer相似度
-
- SentiWordNet
- 是基于WordNet的标注词语的情感倾向词典,每个词语标注了褒义贬义中性。
- 使用图示
from nltk.corpus import sentiwordnetsentiwordnet.senti_synset('good.a.01')# 词good在形容词adjective下的第一语义,返回的是Poscore和Negscore
3.1.2 常见自然语言处理工具集
-
- 分词
- 需要将较长句子切分为干句子(简单规则分句),但存在例外情况比如(Mr.)
- sent_tokenize图示
from nltk.tokenize import sent_tokenize text = gutenberg.raw("austen-emma.txt") sentence = sent_tokenize(text) # 对Emma小说进行全文分句 print(sentence[100]) # 显示其中一个分句
-
- 标记标注
- 一个橘子是有若干标记(Token)按照顺序构成的,而且标记可以是一个词语/标点符号(自然语言处理最基本输入单元),而且将橘子分隔为标记的过程叫做标记解析(Tokenization),工作之一是讲标点符号和前面的单词拆分
- word_tokenize图示
from nltk.tokenize import word_tokenize word_tokenize(sentence[100])
-
- 词性标注
- NLTK提供词性标注器(POS Tagger),NN为名词,VBP为动词,使用Penn Treebank(宾州树库)标注标准。而而且有词性标记含义的查询功能
- pos_tag使用方法图示
from nltk import pos_tag pos_tag(word_tokenize("They sat by the fire."))
- 词性标注含义查询图示
nltk.help.upenn_tagset('NN') nltk.help.upenn_tagset('VBP') nltk.help.upenn_tagset() # 返回所有词性的标注集以及各种词性的示例
-
- 其他工具
- 命名实体识别
- 组快分析(Chunking)
- 句法分析