1.首先了解什么是NLP,自然语言处理就是将人类能懂的语言文字,及字符类型的东西,转换成一种电脑能懂的语言:比如换成二进制编码或者是一串数字。
2.了解两个最常见的语料库:nltk(英文语料库,具有分类,分词多种功能)
jieba(中文语料库,这个库是github开源并且在不断更新的一个语料库,随着网络语言的发展,词汇与语料不断增多)
3.一条文本的处理流程
①首先处理一整句话例如:
import nltk
sentence = "Welcome to China!"
tokens = nltk.word_tokenize(sentence)
print(tokens)
将这句话分解出所有分词:Welcome,to,China,! 分解出这四个分词
此过程也可以称为一条语句的预处理过程。
一条typical文本的预处理过程可以分为这几步:
②对一句话进行每个词的frequence统计
welcome | to | china | ! |
1 | 1 | 1 | 1 |
每个词都出现过一次,所以是1111的词频。
实例举例:NLTK进行简单的情感分析
s1 = 'this is a good book'
s2 = 'this is a awesome book'
s3 = 'this is a bad book'
s4 = 'this is a terrible book'
def preprocess(s):
return{word: True for word in s.lower().split()}
#标准化
trainning_data = [[preprocess(s1),'pos'],
[preprocess(s2),'pos'],
[preprocess(s3),'neg'],
[preprocess(s4),'neg']]
#喂给model吃
from nltk.classify import NaiveBayesClassifier
model = NaiveBayesClassifier.train(trainning_data)
#打出结果
print(model.classify(preprocess('this is a good book')))
可以分析出其结果为褒义。
TF—IDF词频计算:
假设一个文档有100个单词,其中单词baby出现了3次。
那么,TF(baby)=(3/100)=0.03
好,现在我们如果有10M的文档,baby出现在其中1000个文档中。
IDF(baby)=log(10000000/1000)=4
所以TF-IDF = TF*IDF = 0.03*4 = 0.12
NLTK实现TF-IDF
from nltk.text import TextCollection
corpus = TextCollection(['This is sentence one',
'This is sentence two',
'This is sentence three'])
#直接就能计算出tf-idf
#(term:一句话中的某个term,text:这句话)
print(corpus.tf_idf(('this','this is sentence four')))
#0.444342
#同理,怎么得到了一个标准大小的vector来表示所有的句子
#对于每个新句子
new_sentence = 'this is sentence five',
#遍历一遍所有vacabulary中的词:
for word in standard_vacab:
print(corpus.tf_idf(word,new_sentence))
#我们得到一个巨长(“所有vocab长度)的向量