美文网首页
朴素贝叶斯-商品评论情感分析

朴素贝叶斯-商品评论情感分析

作者: 涓涓自然卷 | 来源:发表于2021-03-16 16:29 被阅读0次

    一、概述:

    1、朴素贝叶斯公式:

    朴素贝叶斯公式.png

    2、API:from sklearn.naive_bayes import MultinomialNB

    3、注意事项:一个完整的文本不能直接拿来训练,所以在训练之前,我们需要将自己的语句分词,构建词向量,所以我们这里需要先进行分词处理,这里我选择的是结巴分词。

    二、代码开发:

    1、数据样式:
    数据样式.png
    2、获取数据:
    import pandas as pd
    import numpy as np
    import jieba
    import matplotlib.pyplot as plt
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.naive_bayes import MultinomialNB
    
    # 1、获取数据:
    data = pd.read_csv("/Users/weixiujuan/study/人工智能AI/naive_bayes.csv", encoding="utf-8")
    print(data)
    
    2.1 数据获取的内容:
    数据内容.png
    3、完整代码:
    import pandas as pd
    import numpy as np
    import jieba
    import matplotlib.pyplot as plt
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.naive_bayes import MultinomialNB
    
    # 1、获取数据
    data = pd.read_csv("/Users/weixiujuan/study/人工智能AI/naive_bayes.csv", encoding="utf-8")
    # print(data)
    
    # 2、数据基本处理
    # 2.1 取出内容列,对数据进行分析
    content = data["内容"]
    print("打印内容:\n", content)
    # print(data.loc[:, "评价"])
    
    # 2.2 判定评价标准 -- 0:差评,1:好评
    data.loc[data.loc[:, '评价'] == "好评", "评论标号"] = 1  # 把好评修改为1
    data.loc[data.loc[:, '评价'] == "差评", "评论标号"] = 0
    
    print("加入评论标号列之后的数据显示:\n", data.head)
    good_or_bad = data['评价'].values  # 获取数据
    print("打印评论内容:\n", good_or_bad)
    
    # ['好评' '好评' '好评' '好评' '差评' '差评' '差评' '差评' '差评' '好评' '差评' '差评' '差评']
    
    
    # 2.3 选择停用词
    # 加载停用词
    stopwords = []
    with open('/Users/weixiujuan/study/人工智能AI/stopwords.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        print(lines)
        for tmp in lines:
            line = tmp.strip()
            print("打印停用词:", line)
            stopwords.append(line)
    
    # stopwords # 查看新产生列表
    print("查看停用词列表:\n", stopwords)
    
    # 对停用词表进行去重
    stopwords = list(set(stopwords))  # 去重 列表形式
    print("打印去重后的停用词:\n", stopwords)
    
    # 2.4 把"内容"处理,转化成标准格式
    comment_list = []
    for tmp in content:
        print(tmp)
        # 对文本数据进行切割
        # cut_all 参数默认为 False, 所有使用 cut 方法时 默认为精确模式
        seg_list = jieba.cut(tmp, cut_all=False)
        print("打印seg_list:\n", seg_list)  # <generator object Tokenizer.cut at 0x7fe4b2f34bd0>
        seg_str = ','.join(seg_list)  # 拼接字符串
        print("打印seg_str:\n", seg_str)
        comment_list.append(seg_str)  # 目的是转化成列表形式
        print("打印内容分词后的列表:\n",
              comment_list)  # ['从,编程,小白,的,角度看,,,入门,极佳,。', '很,好,的,入门,书,,,简洁,全面,,,适合,小白,。', '讲解,全面,,,许多,小,细节,都,有,顾及,,,三个,小,项目,受益匪浅,。', '前半部,分讲,概念,深入浅出,,,要言不烦,,,很赞,。', '看,了,一遍,还是,不会,写,,,有个,概念,而已,。', '中规中矩,的,教科书,,,零,基础,的,看,了,依旧,看不懂,。', '内容,太,浅显,,,个人,认为,不,适合,有,其它,语言,编程,基础,的,人,。', '破书,一本,。', '适合,完完全全,的,小白读,,,有,其他,语言,经验,的,可以,去,看,别的,书', '基础知识,写,的,挺,好,的,!', '太,基础', '略,_,嗦,。,。,适合,完全,没有,编程,经验,的,小白', '真的,真的,不,建议,买']
    
    # 2.5 统计词的个数
    # 进行统计词个数
    # 实例化对象
    # CountVectorizer 类会将文本中的词语转换为词频矩阵
    con = CountVectorizer(stop_words=stopwords)
    # 进行词数统计
    X = con.fit_transform(comment_list)  # 它通过 fit_transform 函数计算各个词语出现的次数
    name = con.get_feature_names()  # 通过get_feature_names() 可获取词袋中所有文本的关键字
    print("打印词频矩阵的结果:\n", X.toarray())  # 通过toarray()可看到词频矩阵的结果
    print("文本关键字:\n", name)
    
    # 2.6 准备训练集和测试集
    # 准备训练集 这里将文本前10行当做训练集,后3行当做测试集
    x_train = X.toarray()[:10, :]
    y_train = good_or_bad[:10]
    # y_train = data["评价"][:10]
    # 准备测试集
    x_text = X.toarray()[10:, :]
    y_text = good_or_bad[10:]
    
    # 3、模型训练
    # 构建贝叶斯算法分类器
    mb = MultinomialNB(alpha=1)  # alpha 为可选项,默认 1.0 ,添加拉普拉修、Lidstone 平滑参数
    # 训练数据
    mb.fit(x_train, y_train)
    # 预测数据
    y_predict = mb.predict(x_text)
    # 预测值与真实值展示
    print('预测值:', y_predict)
    print('真实值:', y_text)
    
    # 4、模型评估
    score = mb.score(x_text, y_text)
    print("模型评估结果为:", score)
    
    
    3.1、分析结果部分截图:
    1.png 2.png 3.png 4.png 5.png
    3.2 预测结果总结:

    从上面预测结果看,预测的三个结果均与真实值一致,模型评估结果值为:1.0 很高!

    相关文章

      网友评论

          本文标题:朴素贝叶斯-商品评论情感分析

          本文链接:https://www.haomeiwen.com/subject/zbpdcltx.html