小伤口 发表于 2021-8-22 17:24:39

python 机器学习:通过评论预测十部动漫

本帖最后由 小伤口 于 2021-8-22 23:59 编辑

python 机器学习:预测十部动漫

程序效果

数据是由本人自己通过爬虫爬取 b 站评论制作的

目前只支持以下十部动漫预测




为了更直观一点外观也用了 Tkinter 当界面,看看实现效果怎么样吧
我去腾讯视频找评论进行预测

(界面默认是罗小黑封面)
预测《刺客伍六七》



预测之后顺便爬取 B 站封面(之前已经用爬虫爬取下载地址与简介,所以这个程序并没有爬取简介图片的代码

如果想要我也可以把这个代码分享出去{:10_256:} )

预测《天宫赐福》



貌似效果不错~{:10_254:}

不过他的预测准确率只有 60.9% 有一半多一些的准确率

造成这样的主要原因,是我做的数据数量太少了{:10_266:} ,总共只有 10w 左右的数据,除去测试集
也只有不到十万拿来做训练,不过只要评论偏向动漫内容,一般预测的准确率还是挺高的{:10_307:}
我会一直更新数据的,力求将预测准确率达到 80% 以上{:10_275:} ,并且增加更多的动漫类别

需要安装的库

pip install requests
pip3 install pillow
pip3 install pandas
pip install -U scikit-learn
pip3 install Beautifulsoup4
pip3 install lxml
pip install jupyter(非必须)


数据制作
我会不定时更新关于 B 站评论的数据,到时候帖子也会进行提示
大家点击下面的链接就可以下载到最新的数据(文件名称有更新时间)
数据
如果大家自己想更新数据集我这儿也有更新的脚本,有详细注释,和操作说明跟着一步步来就可实现更新
制作数据集

数据集图片:



爬取原理和过程       

经过分析得知 b站评论存储在 有 main 名字的 json 文件中
https://api.bilibili.com/x/v2/reply/main?callback=jQuery1720002087738314316301_1629621752570&jsonp=jsonp&next=0&type=1&oid=7961887&mode=3&plat=1&_=1629621766385
然而我们却并不能打开网址,通过百度得知只要删除 callback 和 _ 参数就可以访问了
爬虫代码:

**** Hidden Message *****

这里面也包含了将除中文以外所有的符号删除
这里简单爬取一下来演示
爬取完成之后打开文件


然后通过下面代码(文件中是 Brief.py 文件)进行简单数据处理
#简单处理数据
import pandas as pd
#修改路径即可
#读取你要处理数据

a=pd.read_csv("凸变英雄LEAF.csv")
b=pd.DataFrame(a,columns=["Name","Comment"])

#添加列
b['Name']="《凸变英雄LEAF》"

#数据去重
b=b.drop_duplicates(keep='last')
#重新保存
b.to_csv('凸变英雄LEAF.csv')




就变成这样

大家想爬取其他的就直接改名字就好了{:10_320:}

机器学习

数据爬取的差不多的时候,就把文件放在数据集文件中


#获取数据
    print("获取数据中...")
   
    Tu=pd.read_csv("数据集\凸变英雄LEAF.csv")
    Hui=pd.read_csv("数据集\辉夜大小姐想让我告白?~天才们的恋爱头脑战~.csv")
    Ling=pd.read_csv("数据集\灵笼.csv")
    Luo=pd.read_csv("数据集\罗小黑战记.csv")
    Qi=pd.read_csv("数据集\齐木楠雄的灾难.csv")
    Tian=pd.read_csv("数据集\天宫赐福.csv")
    Wu=pd.read_csv("数据集\伍六七之玄武国篇.csv")
    Xiao=pd.read_csv("数据集\小林家的龙女仆.csv")
    Zai=pd.read_csv("数据集\在下坂本,有何贵干?.csv")
    Zhou=pd.read_csv("数据集\咒术回战.csv")

    #数据处理
    print("数据处理中...")
   
    #数据拼接
    Data=pd.concat(,axis=0)
    Data=Data.drop('Unnamed: 0', 1)

    print("数据拼接成功...")


以上代码是将读取的所有数据进行拼接整合在一起

然后将数据中的空值删除,以及将中文的语气词之类无用的词语删掉
停用词存放在一个 txt 文件中加载他进行删除{:5_91:}

#清洗空值
    Data1=Data.dropna()
    print("成功清洗数据")
   
    print("正在进行数据构建..")   
    #将Name类转换成id
    Data1["Name_id"]=Data1['Name'].factorize()

    Name_id_N = Data1[['Name', 'Name_id']].drop_duplicates().sort_values('Name_id').reset_index(drop=True)
    id_Name = dict(Name_id_N[['Name_id', 'Name']].values)

    print("正在进行中文分词")
    #加载停用词
    stop_words=StopWords("StopWords.txt")

   
    print("删掉无用数据中..")
    #分词,并过滤停用词
    Data1['Comment'] = Data1['Comment'].apply(lambda x: " ".join())

    print("数据处理完毕")
    #数据集划分
    x_train,x_test,y_train,y_test=train_test_split(Data1["Comment"],Data1["Name_id"],test_size=0.2,random_state=100)
    print("数据集划分成功")



数据处理完成就开始特征工程

#特征处理-特征提取-tfid
    #实例化一个转换器
    print("正在进行特征工程")
    count_vect = CountVectorizer()
    transfer=TfidfVectorizer(norm='l2', ngram_range=(1, 2))
    x_train=transfer.fit_transform(x_train)
    x_test=transfer.transform(x_test)

tfid 简单来说就是体现一个词语在文章的重要程度

最后就是算法和建立模型了

#朴素贝叶斯算法预估器流程
    bayes=MultinomialNB(alpha=1.0)
    #建立模型
    bayes.fit(x_train,y_train)
    print("模型建立成功")

    print("启动程序。。。")

这里用的算法是朴素贝叶斯算法

完整代码

**** Hidden Message *****

运行结果:
真实值

真实值与测试值比对
7978    False
8292   True
5712   True
2829    False
6233   True
      ...
478      True
4713    False
6072    False
1369   True
4396   True
Name: Name_id, Length: 23518, dtype: bool
准确率
0.6097457266774385
Forecast("来了 他来了 他带着剪刀走来了🙃")
《伍六七之玄武国篇》
6
Forecast("齐神yyds!又来回顾了")
《齐木楠雄的灾难》
4
Forecast("怎么赤司征十郎在里面")
《齐木楠雄的灾难》
4
Forecast("小白的爸爸为什么我总是看不见他的脸呢?总是用报纸给他蒙上了。")
《罗小黑战记》
3
Forecast("小黑真萌,比丢真憨,哈哈")
《罗小黑战记》
3
Forecast("最后一个片段真的很感动啊,隐隐约约把谢怜花城的800年来由啥的都交代了,特别是配乐也太合适了啊,让我重新感受到看天官时的感动,“惊鸿一瞥,百世沦陷”的爱情,我们作为一个旁观者,也能感受到那至死不渝的感情以及感动…天官赐福,百无禁忌!")
《天宫赐福》
5

**** Hidden Message *****
运行请双击 main.py 文件


exe文件请关注小伤口公众号回复预测怪获取
(不建议下载文件有点大 200 多 MB)
(但建议关注小伤口公众号{:10_256:} )
        exe文件运行请找到dist 文件夹里面找到 main.exe(很好找的有专属图标){:9_227:}

{:9_226:}


还要下载 jieba 库进行中文分词

小伤口 发表于 2021-8-22 17:34:49

沙发{:5_104:}求评分

小伤口 发表于 2021-8-22 18:03:31

程序第一次启动时,耗时可能会比较长

不大不小甲鱼 发表于 2021-8-23 09:04:50

大佬666

Rebecca2021 发表于 2021-8-23 09:50:40

66666666666666666666666666666666666666666666666

hornwong 发表于 2021-8-23 10:10:22

{:5_95:}

让记忆定格 发表于 2021-8-23 11:42:02

厉害

冰清玉洁丸 发表于 2021-8-23 16:15:10

。。太牛了

青出于蓝 发表于 2021-8-23 16:29:20

哇,这个好强。
最近也在学习机器学习(keras),感觉很难
赞!{:7_123:}

邓CX 发表于 2021-8-23 17:52:48

{:7_112:}

小伤口 发表于 2021-8-23 23:30:45

青出于蓝 发表于 2021-8-23 16:29
哇,这个好强。
最近也在学习机器学习(keras),感觉很难
赞!

过奖了,我也感觉很难{:10_266:}

小薛王 发表于 2021-8-24 08:24:11

学习

937135952 发表于 2021-8-24 09:32:10

大佬牛批,支持一下

kerln888 发表于 2021-8-24 10:00:15

大佬66666666666

老迈 发表于 2021-8-24 11:19:09

牛蛙

burntlime 发表于 2021-8-24 11:34:49

学习

隐市仙 发表于 2021-8-24 16:33:49

大佬,都哪些网站可以爬啊?一般的常规网站不涉及违法的都能爬吗?

trolwy 发表于 2021-8-24 17:20:26

挣鱼币做作业

小伤口 发表于 2021-8-24 19:31:41

隐市仙 发表于 2021-8-24 16:33
大佬,都哪些网站可以爬啊?一般的常规网站不涉及违法的都能爬吗?

其实一般只需要一个人用,都没啥事,如果你因为爬取内容导致服务器出问题,或者赚了好多钱出名了这些,应该会有危险吧哈哈哈

xw20010211 发表于 2021-8-24 21:57:38

kankan{:10_277:}
页: [1] 2 3
查看完整版本: python 机器学习:通过评论预测十部动漫