请求提供wikiexpand可调用模板示例实现(维基文本转文本)
wikiexpand 自定义可调用模板实现示例
wikiexpand 无法识别通过 {{#invoke:}} 调用的 Lua 模块,需通过 TemplateStore.callable_templates 注册自定义渲染函数来处理维基模板。以下是针对 {{ISBN}} 和 {{Date de naissance}} 两个模板的实现示例:
实现逻辑
为目标模板分别定义接收参数列表的渲染函数,根据模板功能返回对应格式的普通文本,再将函数以模板名为键,注册到 callable_templates 字典中。
完整代码示例
from wikiexpand.expand import expand_wikitext from wikiexpand.expand.templates import TemplateStore # 处理{{ISBN}}模板的函数 def render_isbn(params): # 提取ISBN号码并格式化输出 if params: return f"ISBN: {params[0]}" return "" # 处理{{Date de naissance}}(法语"出生日期")模板的函数 def render_date_de_naissance(params): # 解析日、月、年参数,转换为中文日期格式 if len(params) >= 3: day, month_fr, year = params[0], params[1], params[2] # 法语月份与中文月份的映射 month_map = { "janvier": "1月", "février": "2月", "mars": "3月", "avril": "4月", "mai": "5月", "juin": "6月", "juillet": "7月", "août": "8月", "septembre": "9月", "octobre": "10月", "novembre": "11月", "décembre": "12月" } month_cn = month_map.get(month_fr, month_fr) return f"{year}年{month_cn}{day}日" return "" # 注册可调用模板 template_store = TemplateStore() template_store.callable_templates = { "ISBN": render_isbn, "Date de naissance": render_date_de_naissance } # 测试维基文本扩展 test_wikitext = """ {{ISBN|978-2-84066-599-1}} {{Date de naissance|11|novembre|1866}} """ result = expand_wikitext(test_wikitext, template_store=template_store) print(result.strip())
输出结果
ISBN: 978-2-84066-599-1 1866年11月11日
内容的提问来源于stack exchange,提问作者LeMoussel
相关产品推荐
相关产品推荐

