当前位置:   article > 正文

NLTK自然语言处理工具包的使用_nltk词根化处理

nltk词根化处理

该工具包包括:读取数据、清理数据、使用模型

导入所需要的包

#导入所需要的包
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
  • 1
  • 2
  • 3
  • 4
'
运行

导入数据

dataset = pd.read_csv("Restaurant_Reviews.tsc",delimiter = '\t',quoting = 3)
  • 1

其中使用的数据后缀为tsv而并非csv,这是由于csv是以逗号作为分隔符,tsv是以tab作为分隔符,而大多数情况下我们无法区分分割逗号与句子本身的逗号,所以使用tsv。quoting为选择第三种方式去除英文引号。

数据清理

引入包:re包可以去除掉所有的数字、标点符号

import re
  • 1
'
运行

原本的数据是这个样子:

print(dataset['Review'][0])

Wow...Loved thsi place.
  • 1
  • 2
  • 3

除了单词之外,还有别的符号存在,而这些符号会造成误差,也就是噪音的存在。

review = re.sub('[^a-zA-Z]',' ',dataset[Review'][0])
print(review)

Wow Loved this place
  • 1
  • 2
  • 3
  • 4

sub(保留的字符,其它字符的替换字符,数据)

大小写转换

如果是单纯的文本,那么大小写不统一会造成噪音污染,所以我们需要统一转为大写或者小写,一般转化为小写。

review = review.lower()
print(review)

wow loved this place
  • 1
  • 2
  • 3
  • 4

去除虚词

什么是虚词?
实词:本身就存在意义:苹果、车、彩虹
虚词:指代,比如 这、那、嗯
虚词在自然语言处理中为停顿词或停用词
处理虚词我们需要进入包

import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
  • 1
  • 2
  • 3

在这里插入图片描述
使用方法:

review = review.split()
print(review)
  • 1
  • 2

在这里插入图片描述

review = [word for word in review if not word in set(stopwords.words('english'))]
print(review)
  • 1
  • 2

在这里插入图片描述

词根化

词根化:将一个单词恢复成其原本有的样子,将过去式、将来式转化为现在式

from nltk.stem.porter import PorterStemmer
ps = PorterStemmer()
review = [ps.stem(word) for word in review if not word in set(stopwords.words('english'))]
print(review)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

还原字符串

词根化后词是在list里面,我们需要组合成字符串

review = ''.join(review)
print(review)

wow loved place
  • 1
  • 2
  • 3
  • 4

稀疏矩阵

在这里插入图片描述
稀疏矩阵也就是0比较多的矩阵,如上图所示,处理的办法如下,使用sklearn里面的CountVectorizer

from sklearn.feature_extraction.text import CountVectorizer
cv = CounterVectorizer()
X = cv.fit_transform(corpus).toarray()
print(X)
print(X.shap)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
可是为什么这个矩阵这么多0?那是把单词出现的次数都记录了起来,这就是之前所提到的词袋。
(1000,1565)表示有1000行和1565个词汇

最大过滤

上面所算出来的1565中,有很多出现的频率比较低,这样就产生了噪声,所以我们需要去掉这些噪声。方法:再CountVectorizer()中指定最大的特征数目

from sklearn.feature_extraction.text import CountVectorizer
cv = CounterVectorizer(max_features= 1500)
X = cv.fit_transform(corpus).toarray()
print(X)
print(X.shap)

y = dataset.lioc[:,1].values #因变量
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

建立词袋模型

词袋模型:将文字转化为矩阵,矩阵里面存的是词出现的数量,根据数量进行加工预测的结果。

#数据分隔
from sllearn,cross_validation import train_test_split
X_train,X_test,u_train,y_test = train_test_split(X,y,test_size = 0.02,random_state = 0)

#朴素贝叶斯算法进行分类
from sklearn,nalve_bayes import GaussianNB
classifier = GaussianNB()
classifier,fit(X_train,y_train)

#预测结果
y_pred = classifier.predict(X_test)

#混淆矩阵
from sklearn,metrics import confusion_matrix
cm = confusion_matrix(y_test,y_pred)
cm
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

预测结果准确率70%

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/894451
推荐阅读
  

闽ICP备14008679号