使用Python打造自己的垃圾分类小程序

环境搭建

我们需要以下程序

  • PyCharm Community Edition 2020.2(可选)
  • Python 3

创建自己的数据集

新建一个目录trains,创建两个文件train.csvtrain.json

trains/
    train.csv
    train.json

train.json留空,train.csv写入以下内容

塑料袋,1
塑料保鲜膜,1
一次性餐具,2
泥土,2
黄瓜,3
茄子,3
白菜,3
大豆,3
中药残渣,3
易拉罐,1
花朵,3
电池,4
影像带,4
荧光灯,4

其中1代表可回收垃圾,2代表干垃圾(其他垃圾),3代表湿垃圾(厨余垃圾或易腐垃圾),4代表有害垃圾.

1、格式化数据程序

新建formater.py

trains/
    train.csv
    train.json
formater.py

安装jieba分词

pip install jieba -i https://pypi.douban.com/simple/

如果出现Successfully installed jieba-***字样,表示安装成功,否则可能是网络问题

https://pypi.douban.com/simple/是豆瓣的镜像,如果使用默认镜像会超时

示例

import jieba
s = "塑料保鲜膜"
print(list(jieba.cut(s, cut_all=True)))

结果:

Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\mayn\AppData\Local\Temp\jieba.cache
Loading model cost 0.615 seconds.
Prefix dict has been built successfully.
['塑料', '保鲜', '保鲜膜']

jieba.cut用来分词,cut_all参数用来指定是否使用“全分词”模式。

Jieba’s Github

开始正式编写

import jieba
import json


def read(s: str):
    data = []
    for i in s.splitlines():
        k = []
        for j in i.split(","):
            k.append(j)
        data.append(k)
    return data


with open("trains/train.csv", "r", encoding="utf-8") as f:
    s = f.read()
print(s)
data = read(s)
print(data)
json_data = []
for i in data:
    print(i)
    field = i[0]
    field_jieba = list(jieba.cut(field, cut_all=True))
    json_data.append([field_jieba, int(i[1])])

with open("trains/train.json", "w") as f:
    s = json.dumps(json_data)
    f.write(s)

read函数:读取csv函数
for二重循环:解析csv,分词并写入数据
最后一个with语句:写入json

编写主程序

新建main.py

import json
import jieba

with open("trains/train.json") as f:
    s = f.read()
s = json.loads(s)

name = input("垃圾名称:\n")
name_jieba = list(jieba.cut(name, cut_all=True))
# 计算样本比例
w=0
w1=0
wd = [0,0,0,0]
for i in s:
    for j in name_jieba:
        w+=1
        if j in i[0]:
            w1+=1
            wd[i[1]-1] += 1

wb = w1/w
try:
    print("收录情况:%.4f%%" % (wb * 100))
    print("可回收垃圾概率:%.4f%%" % ((wd[0] / w1) * 100))
    print("干垃圾垃圾概率:%.4f%%" % ((wd[1] / w1) * 100))
    print("湿垃圾垃圾概率:%.4f%%" % ((wd[2] / w1) * 100))
    print("有害垃圾垃圾概率:%.4f%%" % ((wd[3] / w1) * 100))
except ZeroDivisionError:
    print("暂时没有收录哦!")

4-7行:读取训练集格式化后的json文件
14-21行:计算概率
22-30:输出结果

其实也没有用复杂算法,比较简单。

输出解释

收录情况

指该垃圾分词后的关键词占训练集总关键词的百分比。

类别的概率

指该垃圾分词后的关键词在训练集中指定的垃圾在某类型的百分比

示例输入输出

垃圾名称:
塑料
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\mayn\AppData\Local\Temp\jieba.cache
Loading model cost 0.622 seconds.
Prefix dict has been built successfully.
收录情况:12.5000%
可回收垃圾概率:100.0000%
干垃圾垃圾概率:0.0000%
湿垃圾垃圾概率:0.0000%
有害垃圾垃圾概率:0.0000%
程序结束

Github

Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢哲源

您的鼓励是我们前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值