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

如何将含特殊Token的模型输出字符串转换为列表/字典?

解决方案

核心思路

利用正则表达式匹配以<new_gen>开头的实体块,每个块包含一个实体和其对应的若干<gen>标记的关系,自动适配不同长度的序列,同时移除所有特殊Token。

正则匹配规则

使用以下正则模式匹配每个实体-关系组:

<new_gen>\s+(\S+)(?:\s+<gen>\s+(\S+))*
  • <new_gen>\s+(\S+):匹配实体开头标记,捕获实体内容
  • (?:\s+<gen>\s+(\S+))*:非捕获组,匹配任意数量的关系标记及关系内容,*适配0或多个关系的场景

Python 代码实现

import re

# 模型输出的原始字符串
input_str = "<bos> <new_gen> ent1 <gen> rel1_ent1 <gen> rel2_ent1 <new_gen> ent2 <gen> rel1_ent2 <eos>"

# 移除首尾的<bos>和<eos>特殊标记
cleaned_input = input_str.replace("<bos>", "").replace("<eos>", "").strip()

# 匹配所有实体-关系组
pattern = re.compile(r'<new_gen>\s+(\S+)(?:\s+<gen>\s+(\S+))*')
matches = pattern.finditer(cleaned_input)

# 生成列表格式结果
result_list = []
# 生成字典格式结果
result_dict = {}

for match in matches:
    groups = match.groups()
    entity = groups[0]
    # 过滤掉无关系时产生的None值
    relations = [rel for rel in groups[1:] if rel is not None]
    result_list.append([entity] + relations)
    result_dict[entity] = relations

print("列表格式结果:")
print(result_list)
# 输出:[['ent1', 'rel1_ent1', 'rel2_ent1'], ['ent2', 'rel1_ent2']]

print("\n字典格式结果:")
print(result_dict)
# 输出:{'ent1': ['rel1_ent1', 'rel2_ent1'], 'ent2': ['rel1_ent2']}

适配说明

  • 不管每个实体对应0个、1个还是多个关系,正则都能准确捕获
  • 自动忽略所有特殊Token(<bos>、<eos>、<new_gen>、<gen>),仅保留实体和关系内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:27:13