机器学习(10)-NLP自然语言处理大量餐馆评论

1.NLP是什么

自然语言处理
用于对文本的分类
用于对中英文的互相翻译
用于打字时候的自动纠错
垃圾邮件过滤

1.1本次的目标
这次学习是1000个英文的对一餐馆的评价,以及手动分类的结果,看一下是正面还是负面的评价。
用NLP算法自动辨别评价的好坏,当在拿到一个评价时,就可以自动进行好坏的分类了。
这次要做的就是对评论就行分类,完成以后可以拓展到文本文章英文报道等进行应用。
1.2观察数据
机器学习(10)-NLP自然语言处理大量餐馆评论_第1张图片
打开评论的tsv文件(文本很特殊,特殊的表单符号被处理)1正面评论、2负面评论,都是手动添加

2.NLP源码分析

2.1.导入数据,利用panda
导入tsv文件,分隔符是‘Tab’,就是‘\t’
quoting = 3:去除引号

dataset = pd.read_csv('R_Reviews.tsv', delimiter = '\t', quoting = 3)

从Spyder中的Variable explorer查看导入的数据
机器学习(10)-NLP自然语言处理大量餐馆评论_第2张图片
2.2文本清理(磁带模型)
2.2.1建立一个巨大的稀疏矩阵
1000行,每一行代表每一条评论
列数取决于所有出现的单词的个数,列的名称就是每个单词
每行每列的对应的数字就是每一行的评论中,某一列对应的词语出现的个数
2.2.2清除数字以及标点符号,因为跟评价的好坏没有关系,即消除噪音!
2.2.3清除一些虚词,像this之类的词
2.2.4词根化,对英文很有用,即:去调时态等变化

import re #清楚数字标点的标准库
import nltk #下载含有所有虚词的list
nltk.download('stopwords') #list名字:stopwords 下载
from nltk.corpus import stopwords #下载之后 载入字典
from nltk.stem.porter import PorterStemmer #stem:词根 PorterStemmer: 词根函数库
corpus = [] #空list
for i in range(0, 1000):
    review = re.sub('[^a-zA-Z]', ' ', dataset['Review'][i]) #去除标点,数字,去除之后用空格代替,只留下大小写字母
    review = review.lower() #全部转换成小写
    review = review.split() #将句子字符串,转换成含有不同单词的list 
    ps = PorterStemmer() #取词根化的方程
    review = [ps.stem(word) for word in review if not word in set(stopwords.words('english'))] # 用词根化后的结果进行循环
    #set让速度变得更快。 最后查看是否在英文的虚词字典里 ‘english’
    #代码运行到这里 举栗子: 原来第一行review便转化成了 ['wow','love','place']
    review = ' '.join(review) # 在每两个单词之间加上空格,并重现转化成字符串
    corpus.append(review) #每处理一行,变加入list

到这里来看一下,处理完之后的结果(右边)
机器学习(10)-NLP自然语言处理大量餐馆评论_第3张图片

2.3生成稀疏矩阵

cv = CountVectorizer(max_features = 1500) #转化矩阵函数,只需要加一个参数 最大的列的数
X = cv.fit_transform(corpus).toarray() #生成了稀疏矩阵
y = dataset.iloc[:, 1].values  #因变量的向量

2.4朴素贝叶斯的训练
有关朴素贝叶斯的介绍以及训练步骤、代码等请参考:
**

机器学习(8)-朴素贝叶斯

**
2.5最后预测的结果
机器学习(10)-NLP自然语言处理大量餐馆评论_第4张图片
(55+91)/200

**

源码与数据集下载地址:下载RAR

**

你可能感兴趣的:(机器学习(派神))