程序员做菜指南小程序数据解析原理:从Markdown到结构化菜谱

程序员做菜指南小程序数据解析原理:从Markdown到结构化菜谱

【免费下载链接】HowToCookOnMiniprogram程序员做菜指南 for Miniprogram,将程序员精神贯彻到底项目地址: https://gitcode.com/gh_mirrors/ho/HowToCookOnMiniprogram

程序员做菜指南小程序将程序员精神贯彻到底,通过系统化的数据处理流程,将原始Markdown格式的菜谱转化为结构化数据,为用户提供高效、精准的烹饪指导。本文将深入解析这一数据解析过程,揭示如何通过技术手段实现菜谱信息的标准化与智能化。

数据处理的核心流程

小程序的数据处理流程主要通过script/enrich-recipes.js脚本实现,该脚本负责将原始菜谱数据转化为结构化格式。整个过程包括数据读取、原料分类、结构化处理和结果输出四个关键步骤,形成完整的数据处理流水线。

原始数据的读取与解析

系统首先从data.json文件读取原始菜谱数据,这些数据通常以Markdown格式存储,包含菜谱的名称、原料、步骤等基本信息。代码通过文件系统模块读取数据,并将其解析为JSON对象,为后续处理奠定基础。

const dataPath = path.join(__dirname, '..', 'data.json'); const lines = fs.readFileSync(dataPath, 'utf8').trim().split('\n'); const recipes = lines.map(line => JSON.parse(line));

原料分类系统的构建

为实现原料的自动分类,系统使用classified-ingredients.json文件中的分类数据,构建原料到分类的快速查找表。这一机制使得系统能够自动识别并分类各种食材,为后续的结构化处理提供支持。

图:菜谱原料分类系统展示,帮助用户快速识别不同类型的食材

结构化数据的生成过程

在获取原始数据和分类系统后,系统对每道菜谱的"原料和工具"部分进行结构化处理。通过正则表达式清洗原料名称,利用查找表进行分类,并按照固定顺序组织分类结果,确保数据格式的一致性和可用性。

block.items.forEach(item => { if (typeof item === 'string') { const clean = item.replace(/[((][^))]*[))]/g, '').trim(); const cat = lookup[clean] || '其他'; if (!categorized[cat]) categorized[cat] = []; categorized[cat].push(item); } });

数据输出与应用

处理完成的结构化数据以两种格式输出:JSONL格式用于云函数和AI匹配,JS模块格式供小程序直接使用。这种双格式输出策略确保了数据在不同场景下的高效应用。

多格式输出的实现

系统通过以下代码实现数据的多格式输出:

// 输出 JSONL 格式用于云函数/AI匹配 const jsonlPath = path.join(__dirname, '..', 'miniprogram', 'recipes-enriched.json'); fs.writeFileSync(jsonlPath, recipes.map(r => JSON.stringify(r)).join('\n'), 'utf8'); // 同时输出 JS 模块给小程序用 const jsLines = ['export default ' + JSON.stringify(recipes, null, 2)]; const jsPath = path.join(__dirname, '..', 'miniprogram', 'recipes-enriched.js'); fs.writeFileSync(jsPath, jsLines.join('\n'), 'utf8');

小程序中的数据应用

在小程序中,结构化数据被广泛应用于各个功能模块。例如,在miniprogram/pages/detail/index.js中,分类后的原料数据用于构建直观的食材展示界面,帮助用户快速了解菜品所需材料。

图:小程序菜谱详情页展示,结构化数据使界面更加清晰易用

数据处理的技术亮点

高效的分类算法

系统采用预构建查找表的方式,实现了原料分类的O(1)时间复杂度,大大提高了处理效率。这种方法特别适合菜谱数量庞大的情况,确保即使在数据量增长时仍能保持良好的性能。

灵活的分类体系

分类系统支持多种类别,包括"荤"、"素"、"调料"、"配菜"、"工具"等,能够满足不同类型菜谱的需求。同时,系统还设置了"其他"类别,确保所有原料都能被正确归类。

标准化的数据结构

通过统一的数据结构,系统确保了不同来源、不同格式的菜谱数据能够被一致处理和展示。这种标准化不仅提高了用户体验,也为后续的功能扩展奠定了基础。

实际应用案例

以红烧肉菜谱为例,原始Markdown格式的原料列表经过处理后,被转化为结构化数据:

{ "name": "红烧肉", "detail": [ { "text": "原料和工具", "content": [ { "type": "list", "items": [ "五花肉 500g", "生姜 3片", "葱 2根", "料酒 2汤匙", "生抽 1汤匙", "老抽 1茶匙", "冰糖 15g" ], "categorized": [ { "name": "荤", "items": ["五花肉 500g"] }, { "name": "素", "items": ["生姜 3片", "葱 2根"] }, { "name": "调料", "items": ["料酒 2汤匙", "生抽 1汤匙", "老抽 1茶匙", "冰糖 15g"] } ] } ] } ] }

这种结构化数据在小程序中呈现为清晰的分类列表,用户可以快速浏览和理解菜谱所需的各种原料。

图:红烧肉菜谱在小程序中的展示效果,结构化数据使内容更加直观

总结

程序员做菜指南小程序通过系统化的数据处理流程,成功将非结构化的Markdown菜谱转化为结构化数据。这一过程不仅提高了数据的可用性和展示效果,也为后续的功能扩展和智能化应用奠定了基础。通过技术手段解决烹饪中的实际问题,正是程序员精神在日常生活中的生动体现。

如果您对这一数据处理过程感兴趣,可以通过以下命令获取项目源码进行深入研究:

git clone https://gitcode.com/gh_mirrors/ho/HowToCookOnMiniprogram

通过探索script/enrich-recipes.js和相关文件,您可以进一步了解数据解析的实现细节,甚至根据自己的需求进行定制和扩展。

【免费下载链接】HowToCookOnMiniprogram程序员做菜指南 for Miniprogram,将程序员精神贯彻到底项目地址: https://gitcode.com/gh_mirrors/ho/HowToCookOnMiniprogram

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考