标准菜品名称清洗#

需求背景#

清洗产品名称,统一为标准菜品名称。

需求频率#

不定时

目录结构#

标准菜品名称
├─ main.py  # 主程序
├─ README.md  # 项目说明。
├─ 所有产品名称.csv  # 输入产品名称。
├─ 标准单品名称.xlsx # 输入标准菜品名称。
├─ 标准菜品名称映射.json # 输出匹配结果。
└─ 标准菜品名称映射.xlsx  # 输出匹配结果。

数据获取#

获取所有待清洗产品名称#

文件名保存:所有产品名称.csv

SELECT DISTINCT
	item_name AS 商品名称 
FROM
	ads_dbs_trade_food_di 
WHERE
	business_date LIKE '202605%' 
	AND dp_item_count > 0 
ORDER BY
	item_name

获取标准菜品名称#

OA标准单品名称.xlsx

数据清洗#

def build_prompt(batch_products):
    """为一批商品名称构建匹配 prompt"""
    product_list = "\n".join([f"{i+1}. {name}" for i, name in enumerate(batch_products)])
    return f"""你是一个餐饮行业商品名称匹配专家。请将以下【待匹配商品名称】逐一匹配到最合适的【标准单品名称】。

规则:
1. 语义相似即可匹配,不需要完全一样。例如"一桶水果茶1000ml"可以匹配"一桶水果茶"。
2. 忽略容量、温度、赠品描述等修饰词。例如"蜂蜜冰茉莉(500ml)"匹配"蜂蜜冰茉莉"。
3. 如果一个待匹配名称包含多个独立商品(如一桶水果茶+一桶全家福),请分别评估每个子商品与标准库的匹配置信度,仅输出你最有把握、匹配度最高的那一个单品。
4. 如果找不到合适的匹配,标记为"无匹配"。
5. 只返回 JSON 数组,不要任何其他文字。

【标准单品名称列表】(共{len(standard_names)}个):
{standard_list_text}

【待匹配商品名称】(共{len(batch_products)}个):
{product_list}

请返回 JSON 对象,格式如下:
{{"matches": [{{"商品名称": "xxx", "匹配标准名称": "yyy"}}, ...]}}"""

项目地址#

https://fuwenyue.coding.net/p/tianlala/d/standard_food_name/git