基于“关键词规则”分拣快递。根据物品描述匹配关键词,输出物流类别、推荐运输工具、温控要求和备注。规则可自行增删。
```python
import json
from dataclasses import dataclass
from typing import List, Dict
@dataclass
class Rule:
category: str # 物流类别
transport: List[str] # 推荐运输工具
keywords: List[str] # 匹配关键词
temperature: str = "常温" # 温控要求
priority: int = 0 # 优先级,越大越优先
note: str = "" # 备注
# =====================
# 分拣规则表:可自行扩展
# =====================
RULES: List[Rule] = [
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: item[0].priority, reverse=True)
main_rule, main_hits = matched[0]
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": "全程温控记录"
}
```
如果输入的是“活鸡”,则会同时命中“活体运输”和“冷链运输”,但“活体运输”优先级更高,因此主类别会是活体运输。
实际物流中,活体、冷链、危险品、药品等通常有严格的资质和法规要求,这段代码适合做规则原型,生产环境建议接入承运商规则库、温控设备数据和人工审核流程。
文章仅供参考用。
网硕互联帮助中心






评论前必须登录!
注册