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

文本挖掘中嵌套字典应用:匹配最长词尾获取ruleID

嘿,这个需求我之前做类似的词形分析时碰到过,核心就是要优先匹配最长的词尾对吧?给你分享个亲测可行的方案,用Python实现的话步骤超清晰:

核心思路

我们的目标是优先匹配最长的词尾,这样才能拿到最具限制性的ruleID。所以关键步骤就三个:

  1. 把所有词尾和对应的ruleID整理成一组配对
  2. 按词尾长度从长到短排序(长度相同的话顺序不影响,当然你也可以加额外规则)
  3. 对每个输入单词,挨个检查排序后的词尾,找到第一个能匹配的(也就是最长的那个),直接返回对应的ruleID
具体实现(Python示例)

先假设你的嵌套规则字典是类似这样的(如果实际结构不一样,只需要调整提取词尾和ruleID的部分就行):

# 示例规则字典:key是ruleID,value里包含对应的目标词尾
rules = {
    "v0": {"suffix": "acer"},
    "v1": {"suffix": "er"},
    "v2": {"suffix": "ir"},
    "v3": {"suffix": "oir"}
}

第一步:整理并排序规则

先把所有词尾和ruleID提取出来,然后按词尾长度降序排序,这样最长的词尾会被优先检查:

# 生成(词尾长度, 词尾, ruleID)的列表,再按长度从大到小排序
sorted_suffix_rules = sorted(
    [(len(rule["suffix"]), rule["suffix"], rule_id) for rule_id, rule in rules.items()],
    key=lambda x: -x[0]
)
# 排序后结果大概是:[(4, 'acer', 'v0'), (3, 'oir', 'v3'), (2, 'er', 'v1'), (2, 'ir', 'v2')]

第二步:单个单词的匹配函数

写一个简单的函数,遍历排序后的规则,找到第一个匹配的词尾就返回对应的ruleID:

def get_most_restrictive_rule(word):
    for _, suffix, rule_id in sorted_suffix_rules:
        if word.endswith(suffix):
            return rule_id
    # 如果没有匹配到任何词尾,可以返回None或者你需要的默认值
    return None

第三步:批量处理单词列表

直接用字典推导式就能批量处理输入的单词列表:

word_list = ["déplacer", "finir", "voir", "parler"]
result = {word: get_most_restrictive_rule(word) for word in word_list}
print(result)
# 输出结果:{'déplacer': 'v0', 'finir': 'v2', 'voir': 'v3', 'parler': 'v1'}
关键细节说明
  • 排序逻辑是核心:通过降序排序,确保最长的词尾被最先检查,一旦匹配就立刻返回,完美解决你说的「最具限制性」需求,比如déplacer会先匹配acer拿到v0,而不会走到后面的er
  • 适配不同规则结构:如果你的规则字典是反过来的(比如词尾是key,ruleID是value),只需要调整生成sorted_suffix_rules的代码,核心逻辑完全不变
  • 边界情况处理:如果某个单词没有匹配到任何词尾,函数返回None,你可以根据自己的需求改成返回默认规则、抛出提示或者其他处理方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:23:35