Python | NLP餐厅评论分析

自然语言处理(NLP) 是计算机科学和人工智能的一个领域,涉及计算机和人类(自然)语言之间的交互,尤其是如何编程计算机来处理和分析大量自然语言数据。它是机器学习的一个分支,是关于分析任何文本和处理预测分析的。 Scikit学习 是Python编程语言的自由软件机器学习库。Scikit learn主要是用Python编写的,有些核心算法是用Cython编写的,以实现性能。Cython是Python编程语言的超集,旨在通过主要使用Python编写的代码提供类似C的性能。 让我们了解文本处理的各个步骤以及NLP的流程。 这个算法可以很容易地应用于任何其他类型的文本,比如将一本书分为浪漫、摩擦,但现在,让我们使用 餐厅评论 用于查看负面或正面反馈的数据集。

null

涉及的步骤:

第一步: 导入将分隔符设置为“”的数据集,因为列被分隔为选项卡空间。评论及其类别(0或1)不由任何其他符号分隔,而是带有制表符空间,因为大多数其他符号都是评论(如价格为$,等等),算法可能会使用它们作为分隔符,这将导致输出中出现奇怪的行为(如错误、奇怪的输出)。

Python3

# Importing Libraries
import numpy as np
import pandas as pd
# Import dataset
dataset = pd.read_csv( 'Restaurant_Reviews.tsv' , delimiter = ' ' )


下载餐厅评论。使用tsv数据集,单击 在这里 . 第二步: 文本清理或预处理

  • 删除标点符号、数字 :标点符号、数字对处理给定文本没有多大帮助,如果包含标点符号、数字,它们只会增加我们最后一步创建的一袋单词的大小,并降低算法的效率。
  • 阻止 :扎根这个词

图片[1]-Python | NLP餐厅评论分析-yiteyi-C++库

  • 将每个单词转换成小写 :例如,在不同的情况下使用一些单词是没有用的(例如“good”和“good”)。

Python3

# library to clean data
import re
# Natural Language Tool Kit
import nltk
nltk.download( 'stopwords' )
# to remove stopword
from nltk.corpus import stopwords
# for Stemming propose
from nltk.stem.porter import PorterStemmer
# Initialize empty array
# to append clean text
corpus = []
# 1000 (reviews) rows to clean
for i in range ( 0 , 1000 ):
# column : "Review", row ith
review = re.sub( '[^a-zA-Z]' , ' ' , dataset[ 'Review' ][i])
# convert all cases to lower cases
review = review.lower()
# split to array(default delimiter is " ")
review = review.split()
# creating PorterStemmer object to
# take main stem of each word
ps = PorterStemmer()
# loop for stemming each word
# in string array at ith row
review = [ps.stem(word) for word in review
if not word in set (stopwords.words( 'english' ))]
# rejoin all string array elements
# to create back into a string
review = ' ' .join(review)
# append each string to create
# array of clean text
corpus.append(review)


例如: 应用上述代码前后(评论=>之前,语料库=>之后)

图片[2]-Python | NLP餐厅评论分析-yiteyi-C++库

第三步: 符号化 ,包括从正文中拆分句子和单词。 第4步: 通过稀疏矩阵生成单词包

  • 获取数据集中所有不同的评论词,不要重复。
  • 每个单词对应一列,因此会有很多列。
  • 行是评论
  • 如果一个单词出现在评论数据集的一行中,那么该单词的计数将出现在该单词列下一袋单词的一行中。

例如: 让我们看一个只有两篇评论的评论数据集

Input : "dam good steak", "good food good service"Output : 

图片[3]-Python | NLP餐厅评论分析-yiteyi-C++库

 

为此,我们需要sklearn的CountVectorizer类。特征提取。文本 我们还可以设置功能的最大数量(通过属性“max_features”帮助最大的功能的最大数量)。对语料库进行训练,然后对语料库“.fit_transform(语料库)”应用相同的变换,然后将其转换为数组。如果审查是肯定的或否定的,则答案位于数据集[:,1]的第二列:所有行和第一列(从零开始索引)。

Python3

# Creating the Bag of Words model
from sklearn.feature_extraction.text import CountVectorizer
# To extract max 1500 feature.
# "max_features" is attribute to
# experiment with to get better results
cv = CountVectorizer(max_features = 1500 )
# X contains corpus (dependent variable)
X = cv.fit_transform(corpus).toarray()
# y contains answers if review
# is positive or negative
y = dataset.iloc[:, 1 ].values


要使用的数据集的说明:

  • 以分隔的列(选项卡空间)
  • 第一个专栏是关于人的评论
  • 在第二列中,0代表负面评价,1代表正面评价

图片[4]-Python | NLP餐厅评论分析-yiteyi-C++库

第5步: 将语料库拆分为训练集和测试集。为此,我们需要从sklearn中分离出课堂培训和测试。交叉验证。拆分可以是70/30或80/20或85/15或75/25,这里我通过“测试尺寸”选择75/25。 X是一堆单词,y是0或1(正或负)。

Python3

# Splitting the dataset into
# the Training set and Test set
from sklearn.cross_validation import train_test_split
# experiment with "test_size"
# to get better results
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25 )


第6步: 拟合预测模型(此处为随机森林)

  • 因为随机森林是sklearn的集成模型(由许多树组成)。集成,导入随机分类器类
  • 有501棵树或“n_估计量”,标准为“熵”
  • 通过安装来安装模型。具有属性X_train和y_train的fit()方法

Python3

# Fitting Random Forest Classification
# to the Training set
from sklearn.ensemble import RandomForestClassifier
# n_estimators can be said as number of
# trees, experiment with n_estimators
# to get better results
model = RandomForestClassifier(n_estimators = 501 ,
criterion = 'entropy' )
model.fit(X_train, y_train)


第7步: 通过应用预测最终结果。带有属性X_检验的predict()方法

Python3

# Predicting the Test set results
y_pred = model.predict(X_test)
y_pred


图片[5]-Python | NLP餐厅评论分析-yiteyi-C++库

注: 随机森林的准确率为72%。(当使用不同的测试尺寸进行实验时,可能会有所不同,此处=0.25)。 第8步: 要知道准确度,需要一个混淆矩阵。 混淆矩阵是一个2X2矩阵。

真正积极的: 测量正确识别的实际阳性的比例。 真阴性: 测量未正确识别的实际积极因素的比例。 假阳性: 测量正确识别的实际负片的比例。 假阴性: 测量未正确识别的实际负片的比例。

注: 正确或错误指的是指定的分类正确或不正确,而积极或消极指的是指定的积极或消极类别

图片[6]-Python | NLP餐厅评论分析-yiteyi-C++库

Python3

# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cm


图片[7]-Python | NLP餐厅评论分析-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享