
Pixel Couplet Gen基础教程Regex Parser精准提取上联/下联/横批详解1. 教程概述Pixel Couplet Gen是一款融合了8-bit像素风格与AI生成技术的春联创作工具。本教程将重点讲解如何通过正则表达式(Regex)从大模型输出中精准提取春联的各个组成部分。通过本教程你将掌握理解春联生成器的输出格式特点编写正则表达式提取上联、下联和横批处理可能出现的格式异常情况将提取结果应用到像素风格的UI展示中2. 理解春联生成器的输出格式2.1 典型输出结构ModelScope大模型生成的春联通常遵循以下格式上联XXXXXX 下联XXXXXX 横批XXXXXX但实际输出可能存在以下变体字段顺序可能变化可能缺少某个字段可能包含额外的说明文字标点符号可能不一致2.2 示例输出分析1. 标准格式 上联春风得意马蹄疾 下联旭日扬辉龙首昂 横批马到成功 2. 变体格式 横批吉祥如意 上联金蛇狂舞迎新春 下联玉马奔腾贺佳节 3. 不完整格式 上联蛇舞千山瑞气盈 横批福满人间 (缺少下联) 4. 含说明文字 为您创作一副新春联 上联蛇盘玉柱迎春到 下联马跃金阶报喜来 横批春满乾坤 希望您喜欢3. 正则表达式解析方案3.1 基础正则表达式import re def extract_couplets(text): # 匹配上联 upper_match re.search(r上联[:]\s*(.?)\s*(?\n|$|下联|横批), text) # 匹配下联 lower_match re.search(r下联[:]\s*(.?)\s*(?\n|$|上联|横批), text) # 匹配横批 horizontal_match re.search(r横批[:]\s*(.?)\s*(?\n|$|上联|下联), text) return { upper: upper_match.group(1) if upper_match else None, lower: lower_match.group(1) if lower_match else None, horizontal: horizontal_match.group(1) if horizontal_match else None }3.2 增强版正则表达式处理更复杂的情况def enhanced_extract(text): # 清理输入文本 cleaned re.sub(r\s, , text.strip()) # 匹配所有可能的字段 patterns { upper: r(?:上联|上句|上对)[:]\s*([^。\n]), lower: r(?:下联|下句|下对)[:]\s*([^。\n]), horizontal: r(?:横批|横幅|横额)[:]\s*([^。\n]) } result {} for key, pattern in patterns.items(): match re.search(pattern, cleaned) result[key] match.group(1) if match else None return result3.3 测试案例test_cases [ 上联春风得意马蹄疾\n下联旭日扬辉龙首昂\n横批马到成功, 横批吉祥如意\n上联金蛇狂舞迎新春\n下联玉马奔腾贺佳节, 上联蛇舞千山瑞气盈\n横批福满人间, 为您创作上联蛇盘玉柱迎春到 下联马跃金阶报喜来 横批春满乾坤 ] for case in test_cases: print(enhanced_extract(case))4. 异常处理与默认值4.1 处理缺失字段当某个字段缺失时我们可以使用默认值填充尝试自动生成对应内容提示用户手动输入DEFAULT_COUPLETS { upper: 春风得意马蹄疾, lower: 旭日扬辉龙首昂, horizontal: 马到成功 } def safe_extract(text): extracted enhanced_extract(text) # 填充缺失字段 for key in DEFAULT_COUPLETS: if not extracted[key]: extracted[key] DEFAULT_COUPLETS[key] return extracted4.2 验证对联格式确保上联和下联字数相同def validate_couplets(couplets): if couplets[upper] and couplets[lower]: upper_len len(couplets[upper]) lower_len len(couplets[lower]) if upper_len ! lower_len: # 自动调整较长的对联 if upper_len lower_len: couplets[lower] couplets[lower] *(upper_len-lower_len) else: couplets[upper] couplets[upper] *(lower_len-upper_len) return couplets5. 集成到Pixel UI5.1 与Streamlit集成import streamlit as st def display_pixel_couplets(couplets): st.markdown( style .couplet-container { display: flex; justify-content: space-around; margin: 20px 0; } .couplet { font-family: ZCOOL QingKe HuangYou, cursive; color: #FF0000; text-shadow: 2px 2px 0 #FFD700; } /style , unsafe_allow_htmlTrue) st.markdown(f div classcouplet-container div classcouplet stylewriting-mode: vertical-rl; {couplets[upper]} /div div h3{couplets[horizontal]}/h3 /div div classcouplet stylewriting-mode: vertical-rl; {couplets[lower]} /div /div , unsafe_allow_htmlTrue)5.2 完整工作流程def generate_and_display(): # 从ModelScope获取原始输出 raw_output model_scope_generate() # 提取对联内容 couplets enhanced_extract(raw_output) couplets validate_couplets(couplets) # 显示像素风格对联 display_pixel_couplets(couplets)6. 总结通过本教程我们实现了使用正则表达式精准提取春联的各个组成部分处理了各种可能的输出格式和异常情况将提取结果集成到像素风格的UI展示中关键要点正则表达式是处理非结构化文本的强大工具需要考虑各种边界情况和异常处理提取后的验证和修正同样重要获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。