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": "全程温控记录"

}

```

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

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

文章仅供参考用。

相关推荐
栈溢出了1 小时前
LangGraph State、节点与动态路由学习笔记
python
一条破秋裤1 小时前
01_字符设备基本概念_从分类到LED控制链路
开发语言·php
用户019027581611 小时前
A 股代码后缀 .SH/.SZ/.BJ 怎么区分?Python 怎么统一处理沪深京港美股代码?
python
朝朝辞暮i1 小时前
C++ 第 40 章:ROS2 Publisher + Timer + Subscriber + Callback + Executor 完整闭环
开发语言·c++·算法·ros2
专注仿真1 小时前
决策树的算法
开发语言·高性能算法
Evand J1 小时前
【电机滤波例程2】负载转矩增广扩展卡尔曼滤波(EKF)原理与MATLAB例程:五维PMSM状态与负载阶跃估计。订阅专栏后可查看完整代码
开发语言·matlab·电机·ekf·卡尔曼滤波
迅猛龙办公室1 小时前
python实现简单进度条
java·前端·python
郝学胜_神的一滴1 小时前
AI 编程智能体 06:用Anaconda搞定Python多环境,彻底告别版本兼容灾难
人工智能·python
清水白石0081 小时前
Python 对象模型深度解析:从“一切皆对象”到 id、type、isinstance 底层机制与小整数缓存原理
开发语言·python·缓存