python自然语言处理评论_python与机器学习入门(10)NLP自然语言处理大量餐馆评论...

1.NLP是什么

自然语言处理

用于对文本的分类

用于对中英文的互相翻译

用于打字时候的自动纠错

垃圾邮件过滤

......

1.1本次的目标

这次学习是1000个英文的对一餐馆的评价,以及手动分类的结果,看一下是正面还是负面的评价。

用NLP算法自动辨别评价的好坏,当在拿到一个评价时,就可以自动进行好坏的分类了。

这次要做的就是对评论就行分类,完成以后可以拓展到文本文章英文报道等进行应用。

1.2观察数据

打开评论的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查看导入的数据

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

到这里来看一下,处理完之后的结果(右边)

2.3生成稀疏矩阵

cv = CountVectorizer(max_features = 1500) #转化矩阵函数,只需要加一个参数 最大的列的数

X = cv.fit_transform(corpus).toarray() #生成了稀疏矩阵

y = dataset.iloc[:, 1].values #因变量的向量

2.4朴素贝叶斯的训练

有关朴素贝叶斯的介绍以及训练步骤、代码等请参考:机器学习(8)-朴素贝叶斯 - I ’ m 奥巴马户 - CSDN博客​blog.csdn.net

2.5最后预测的结果

(55+91)/200

源码与数据集下载地址:下载RAR​download.csdn.net

你可能感兴趣的:(python自然语言处理评论)