这一节所介绍的NLTK,是时下非常流行的在python解释器环境中用于自然语言处理的工具包。对于NLTK的使用者而言,它就像一名极其高效的语言学家,为您快速完成对自然语言文本的深层处理和分析。
如果没有自然语言处理技术,除了3.1.1.1学习到的词袋法之外,似乎没有更多的处理和分析手段。
使用词袋法对示例文本进行特征向量化
sent1='The cat is walking in the bedroom.'
sent2='A dog was running across the kitchen.'
from sklearn.feature_extraction.text import CountVectorizer
count_vec=CountVectorizer()
sentences=[sent1,sent2]
#输出特征向量化后的表示
print(count_vec.fit_transform(sentences).toarray())
[[0 1 1 0 1 1 0 0 2 1 0]
[1 0 0 1 0 0 1 1 1 0 1]]
#输出向量各个维度的特征含义
print(count_vec.get_feature_names())
['across', 'bedroom', 'cat', 'dog', 'in', 'is', 'kitchen', 'running', 'the', 'walking', 'was']
使用NLTK对示例文本进行语言学分析
import nltk
nltk.download('punkt')
#对句子进行词汇分割和正规化,有些情况如aren‘t需要分割为are和n’t;或者i‘m要分割为i和’m。
tokens_1=nltk.word_tokenize(sent1)
print(tokens_1)
['The', 'cat', 'is', 'walking', 'in', 'the', 'bedroom', '.']
tokens_2=nltk.word_tokenize(sent2)
print(tokens_2)
['A', 'dog', 'was', 'running', 'across', 'the', 'kitchen', '.']
#整理两句的词表,并且按照ASCII的排序输出
vocab_1=sorted(set(tokens_1))
print(vocab_1)
['.', 'The', 'bedroom', 'cat', 'in', 'is', 'the', 'walking']
vocab_2=sorted(set(tokens_2))
print(vocab_2)
['.', 'A', 'across', 'dog', 'kitchen', 'running', 'the', 'was']
#初始化stemmer寻找各个词汇最原始的词根
stemmer=nltk.stem.PorterStemmer()
stem_1=[stemmer.stem(t) for t in tokens_1]
print(stem_1)
['the', 'cat', 'is', 'walk', 'in', 'the', 'bedroom', '.']
stem_2=[stemmer.stem(t) for t in tokens_2]
print(stem_2)
['A', 'dog', 'wa', 'run', 'across', 'the', 'kitchen', '.']
nltk.download('averaged_perceptron_tagger')
#初始化词性标注器,对每个词汇进行标注
pos_tag_1=nltk.tag.pos_tag(tokens_1)
print(pos_tag_1)
[('The', 'DT'), ('cat', 'NN'), ('is', 'VBZ'), ('walking', 'VBG'), ('in', 'IN'), ('the', 'DT'), ('bedroom', 'NN'), ('.', '.')]
pos_tag_2=nltk.tag.pos_tag(tokens_2)
print(pos_tag_2)
[('A', 'DT'), ('dog', 'NN'), ('was', 'VBD'), ('running', 'VBG'), ('across', 'IN'), ('the', 'DT'), ('kitchen', 'NN'), ('.', '.')]