You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析大学课程表中的复杂场地与规则字符串?

解析复杂场地规则字符串的实现思路

一、优先用正则规则匹配(适配已知格式)

既然已经整理了所有现有格式,针对性写正则是最快的解决方式,针对你提到的三个失败案例,拆解模式后编写分层规则:

1. 逐个匹配失败案例的模式

  • 针对313 (WEEK 1-3) / ONLINE:匹配带周范围的主备场地
    ^(\w+) \(WEEK (\d+-\d+)\) \/ (\w+)$
    
    捕获组1是主场地,组2是生效周范围,组3是备用场地。
  • 针对ONLINE ON 13/09, 108 ON 01/11 (STARTS AT 9:00):匹配多日期指定场地+时间调整
    ^((?:\w+ ON \d{2}\/\d{2},? )+)(\w+ ON \d{2}\/\d{2})(?: \((STARTS AT \d{2}:\d{2})\))?$
    
    先拆分每个场地 ON 日期单元,再提取可选的时间规则。
  • 针对314 (312 ON 12/09,19/09,26/09) 301 ON 03/10:匹配嵌套日期替换的多场地
    ^(\w+) \((\w+ ON (?:\d{2}\/\d{2},?)+)\) (\w+ ON \d{2}\/\d{2})$
    
    捕获主场地、括号内的临时替换场地+日期列表、外部的另一个临时场地+日期。

2. 构建解析流程

  • 先通过正则预匹配判断字符串属于哪种模式
  • 提取对应字段后,统一转换成结构化数据,比如:
    # 示例结构化输出
    {
        "primary_location": "313",
        "valid_weeks": "1-3",
        "alternate_locations": [{"location": "ONLINE", "valid_dates": None}]
    }
    

二、用语法分析工具维护(应对格式扩展)

如果后续格式可能新增,用pyparsing这类语法定义工具比正则更易维护:

from pyparsing import Word, nums, alphas, Suppress, Group, delimitedList, Optional

# 定义基础元素
location = Word(alphas + nums)
date = Word(nums + "/")
week_range = Suppress("WEEK") + Word(nums + "-")
time_rule = Suppress("(") + Suppress("STARTS AT") + Word(nums + ":") + Suppress(")")

# 定义三种失败案例的语法规则
week_based_rule = location + Suppress("(") + week_range + Suppress(")") + Suppress("/") + location
multi_date_rule = delimitedList(Group(location + Suppress("ON") + date)) + Optional(time_rule)
nested_date_rule = location + Suppress("(") + Group(location + Suppress("ON") + delimitedList(date)) + Suppress(")") + Group(location + Suppress("ON") + date)

# 解析示例
result = nested_date_rule.parseString("314 (312 ON 12/09,19/09,26/09) 301 ON 03/10")
print(result.asList())
# 输出: ['314', ['312', '12/09', '19/09', '26/09'], ['301', '03/10']]

新增格式时,只需扩展对应的语法规则即可,无需修改大量正则。

三、机器学习方案(处理未知格式)

如果遇到未覆盖的新格式,可以用少量标注数据做实体提取或格式分类:

1. 自定义NER实体提取

用spaCy训练自定义命名实体识别模型,标注LOCATION(场地)、DATE(日期)、WEEK_RANGE(周范围)、TIME_ADJUST(时间调整)等实体,训练后直接从字符串中提取各类实体,再组合成结构化数据。

2. 格式分类+规则解析

用文本分类模型(比如基于BERT的轻量模型)把新字符串归类到已有的模式类别,再调用对应规则解析。只需标注少量样本即可训练,适合格式迭代快的场景。

四、测试迭代建议

把所有整理的格式(包括这三个失败案例)写成单元测试用例,每次调整解析逻辑后跑测试,确保覆盖所有场景;遇到新格式时,先补充规则/语法,再更新测试用例。

内容的提问来源于stack exchange,提问作者DanteTemplar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:29:49