基于Python的文本情感分类

简介:

Python代码


# 导入第三包
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.cross_validation import train_test_split
from sklearn import metrics
import pandas as pd
import matplotlib.pyplot as plt

# 读入评论数据
evaluation = pd.read_excel('Hotel Evaluation.xlsx',sheetname=1)
# 展示数据前5行
evaluation.head()

0?wx_fmt=png

# 读入自定义词
with open('all_words.txt', encoding='UTF-8') as words:
   my_words = [i.strip() for i in words.readlines()]

# 将自定义词加入到jieba分词器中
for word in my_words:
   jieba.add_word(word)

# 读入停止词
with open('mystopwords.txt', encoding='UTF-8') as words:
   stop_words = [i.strip() for i in words.readlines()]

# 基于切词函数,构造自定义函数
def cut_word(sentence):
   words = [i for i in jieba.cut(sentence) if i not in stop_words]
   # 切完的词用空格隔开
   result = ' '.join(words)
   return(result)

上面代码所做的工作是将用户自定义词设置到jieba分词器中,同时,构造切词的自定义函数,添加的附加功能是删除停用词

# TFIDF权重(根据词频,选出高频的20个词)
tfidf = TfidfVectorizer(max_features=20)

# 文档词条矩阵
dtm = tfidf.fit_transform(words).toarray()
# 矩阵的列名称
columns = tfidf.get_feature_names()
# 将矩阵转换为数据框--即X变量
X = pd.DataFrame(dtm, columns=columns)
# 情感标签变量
y = evaluation.Emotion

# 将数据集拆分为训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,train_size = 0.8, random_state=1)

使用TFIDF权重构造文档词条矩阵,注意,这里根据词频选择了最高频的20个词,作为矩阵的列数。

# 朴素贝叶斯模型
nb = GaussianNB()
# 建模
fit = nb.fit(X_train,y_train)
# 预测
pred = fit.predict(X_test)

# 测试集上的准确率
accuracy = metrics.accuracy_score(y_test,pred)
print(accuracy)

0?wx_fmt=png

通过构建朴素贝叶斯模型,得到的样本测试集准确率约为70%。

# 模型优度的可视化展现
fpr, tpr, _ = metrics.roc_curve(y_test, pred,pos_label=2)
auc = metrics.auc(fpr, tpr)

# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
# 设置绘图风格
plt.style.use('ggplot')

# 绘制ROC曲线
plt.plot(fpr, tpr,'')
# 绘制参考线
plt.plot((0,1),(0,1),'r--')
# 添加文本注释
plt.text(0.5,0.5,'ROC=%.2f' %auc)
# 设置坐标轴标签和标题
plt.title('朴素贝叶斯模型的AUC曲线')
plt.xlabel(
'1-specificity')
plt.ylabel(
'Sensitivity')

# 去除图形顶部边界和右边界的刻度
plt.tick_params(top='off', right='off')
# 图形显示
plt.show()

0?wx_fmt=png

# 随机森林模型
rf = RandomForestClassifier()
# 建模
fit2 = rf.fit(X_train,y_train)
# 预测
pred2 = fit2.predict(X_test)
# 测试集上的准确率
accuracy2 = metrics.accuracy_score(y_test,pred2)
print(accuracy2)

0?wx_fmt=png

# 模型优度的可视化展现
fpr2, tpr2, _ = metrics.roc_curve(y_test, pred2,pos_label=2)
auc2 = metrics.auc(fpr2, tpr2)

# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
# 设置绘图风格
plt.style.use('ggplot')

# 绘制ROC曲线
plt.plot(fpr2, tpr2,'')
# 绘制参考线
plt.plot((0,1),(0,1),'r--')
# 添加文本注释
plt.text(0.5,0.5,'ROC=%.2f' %auc2)
# 设置坐标轴标签和标题
plt.title('随机森林模型的AUC曲线')
plt.xlabel('1-specificity')
plt.ylabel('Sensitivity')

# 去除图形顶部边界和右边界的刻度
plt.tick_params(top='off', right='off')
# 图形显示
plt.show()

0?wx_fmt=png

结语


      OK,关于使用Python完成情感分类的实战我们就分享到这里,大家注意,上面的方法是通过构造DFIDF权重的文档词条矩阵(词袋法)。如果你的文本非常大的话,使用这种方法会导致“词汇鸿沟”,即形成非常庞大的矩阵(而且还是稀疏矩阵),就会吃掉电脑的很多内存。而且这种方法还不能考虑到词与词之间的逻辑顺序。为了克服这个问题,科学家想出了词向量、文档向量等方法,后期我也会把这部分内容的理论和实战给大家做一个分享。如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。


转载。原文:http://blog.csdn.net/kMD8d5R/article/details/78986643

目录
相关文章
|
19天前
|
Python
Python办公自动化:xlwings对Excel进行分类汇总
Python办公自动化:xlwings对Excel进行分类汇总
43 1
|
2月前
|
Python
python 找到并去除文本中的全部链接
这篇文章提供了一个使用Python正则表达式找到并删除文本中所有链接的代码示例。
|
23天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
48 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
6天前
|
机器学习/深度学习 自然语言处理 大数据
使用Python进行文本情感分析
【10月更文挑战第2天】使用Python进行文本情感分析
15 3
|
14天前
|
安全 Python
Python脚本实现IP按段分类
【10月更文挑战第04天】
18 7
|
9天前
|
存储 Python 容器
Python 对象有哪几种,我们可以从哪些角度进行分类呢?
Python 对象有哪几种,我们可以从哪些角度进行分类呢?
12 1
|
20天前
|
Linux 开发者 iOS开发
Python中使用Colorama库输出彩色文本
Python中使用Colorama库输出彩色文本
|
1月前
|
XML 数据格式 Python
Python技巧:将HTML实体代码转换为文本的方法
在选择方法时,考虑到实际的应用场景和需求是很重要的。通常,使用标准库的 `html`模块就足以满足大多数基本需求。对于复杂的HTML文档处理,则可能需要 `BeautifulSoup`。而在特殊场合,或者为了最大限度的控制和定制化,可以考虑正则表达式。
31 12
|
1月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
39 9
|
1月前
|
机器学习/深度学习 自然语言处理 算法
使用Python实现简单的文本情感分析
【9月更文挑战第13天】本文将介绍如何使用Python编程语言进行基础的文本情感分析。我们将通过一个简单的例子,展示如何利用自然语言处理库nltk和机器学习库sklearn来实现对文本数据的情感倾向性判断。文章旨在为初学者提供一个入门级的指导,帮助他们理解并实践文本情感分析的基本步骤和方法。
27 6