云计算百科
云计算领域专业知识百科平台

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

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

 

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

}

```

 

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

 

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

 

 

文章仅供参考用。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Python基于关键词分拣快递(适用于电商与货运代理等)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!