Python基于关键词分拣快递(适用于电商与货运代理等)

基于"关键词规则"分拣快递。根据物品描述匹配关键词,输出物流类别、推荐运输工具、温控要求和备注。规则可自行增删。

```python

import json

from dataclasses import dataclass

from typing import List, Dict

@dataclass

class Rule:

category: str # 物流类别

transport: Liststr # 推荐运输工具

keywords: Liststr # 匹配关键词

temperature: str = "常温" # 温控要求

priority: int = 0 # 优先级,越大越优先

note: str = "" # 备注

=====================

分拣规则表:可自行扩展

=====================

RULES: ListRule = [

Rule(

category="危险品运输",

transport="危险品专用车", "危险品航空(需资质)",

keywords="电池", "锂电池", "酒精", "汽油", "油漆", "烟花", "打火机", "易燃", "腐蚀", "毒性",

temperature="按MSDS要求",

priority=100,

note="需危险品资质,禁止普通快递"

),

Rule(

category="活体运输",

transport="恒温活体运输车", "航空活体舱", "冷藏车",

keywords="活鸡", "活鸭", "活鱼", "活虾", "活体", "宠物", "种苗", "活禽",

temperature="按动物要求,如活禽15-25°C",

priority=90,

note="需检疫证明、通风供氧"

),

Rule(

category="冷链运输",

transport="冷藏车", "冷链航空", "冷藏集装箱",

keywords=[

"鸡", "鸭", "鹅", "猪", "牛", "羊", "肉", "鱼", "虾", "蟹",

"海鲜", "冻品", "冷冻", "生鲜", "冰鲜", "雪糕", "冰淇淋",

"疫苗", "胰岛素", "血液", "药品"

],

temperature="冷冻-18°C;冷藏0-4°C",

priority=80,

note="全程温控记录"

),

Rule(

category="贵重品/文件运输",

transport="专人押运", "航空件", "保价快递",

keywords="珠宝", "黄金", "现金", "名表", "艺术品", "文物", "重要文件", "证件",

temperature="常温",

priority=70,

note="保价、签收验证"

),

Rule(

category="易碎品运输",

transport="陆运厢式货车", "航空(加固包装)",

keywords="玻璃", "陶瓷", "显示器", "屏幕", "灯具", "花瓶", "镜子", "易碎",

temperature="常温",

priority=60,

note="防震、防压"

),

Rule(

category="电子产品运输",

transport="陆运", "航空",

keywords="手机", "电脑", "芯片", "电路板", "相机", "无人机", "家电",

temperature="常温防潮",

priority=50,

note="防静电、防潮、防震"

),

Rule(

category="普通快递",

transport="快递货车", "航空件", "铁路",

keywords="衣服", "鞋", "书", "日用品", "玩具", "食品", "零食", "化妆品",

temperature="常温",

priority=10,

note="常规包装"

),

]

def classify_express(text: str) -> Dict:

"""

根据物品描述关键词分拣快递。

"""

text = text.strip()

matched = \[\]

1. 找出所有命中的规则

for rule in RULES:

hits = kw for kw in rule.keywords if kw in text

if hits:

matched.append((rule, hits))

2. 未命中任何规则

if not matched:

return {

"input": text,

"matched_keywords": \[\],

"category": "待人工分拣",

"transport": "人工确认",

"temperature": "未知",

"priority": 0,

"note": "未命中规则"

}

3. 按优先级排序,优先级最高的作为主规则

matched.sort(key=lambda item: item0.priority, reverse=True)

main_rule, main_hits = matched0

categories, transports, keywords = \[\], \[\], \[\]

4. 汇总所有命中的类别、运输工具、关键词

for rule, hits in matched:

if rule.category not in categories:

categories.append(rule.category)

for t in rule.transport:

if t not in transports:

transports.append(t)

keywords.extend(hits)

去重并保持顺序

keywords = list(dict.fromkeys(keywords))

return {

"input": text,

"matched_keywords": keywords,

"category": " + ".join(categories),

"main_category": main_rule.category,

"transport": transports,

"temperature": main_rule.temperature,

"priority": main_rule.priority,

"note": main_rule.note

}

if name == "main":

测试示例

test_items = [

"鸡",

"活鸡",

"冷冻鸡腿",

"手机",

"锂电池",

"玻璃杯",

"重要文件",

"衣服"

]

for item in test_items:

result = classify_express(item)

print(json.dumps(result, ensure_ascii=False, indent=2))

print("-" * 50)

```

示例输出中的关键部分:

```json

{

"input": "鸡",

"matched_keywords": "鸡",

"category": "冷链运输",

"main_category": "冷链运输",

"transport": "冷藏车", "冷链航空", "冷藏集装箱",

"temperature": "冷冻-18°C;冷藏0-4°C",

"priority": 80,

"note": "全程温控记录"

}

```

如果输入的是"活鸡",则会同时命中"活体运输"和"冷链运输",但"活体运输"优先级更高,因此主类别会是活体运输。

实际物流中,活体、冷链、危险品、药品等通常有严格的资质和法规要求,这段代码适合做规则原型,生产环境建议接入承运商规则库、温控设备数据和人工审核流程。

文章仅供参考用。

相关推荐
晨曦中的暮雨41 分钟前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪1 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风2 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
在世修行3 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885723 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI3 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
信誓旦旦的程序猿4 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
严谨的麻辣烫4 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战
python·http·requests·1024程序员节·网络排障
下一站春风里4 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法