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

将JSON/字典转为带标识令牌的扁平化字符串的工具问询

问题解答

1. CPython原生方案

CPython标准库中没有直接实现你需求的JSON转扁平化字符串的函数,但可以结合原生语法实现非硬编码的解决方案,核心思路是基于指定字段顺序遍历、过滤空值、替换换行符,示例代码如下:

def flatten_product(product_dict, field_order, sep_token="[SEP]", kv_delimiter=": "):
    flattened_parts = []
    # 严格按照指定顺序遍历字段
    for field_name in field_order:
        field_value = product_dict.get(field_name)
        # 忽略值为None的字段
        if field_value is None:
            continue
        # 替换字符串中的换行符为指定令牌
        if isinstance(field_value, str):
            field_value = field_value.replace("\n", sep_token)
        # 拼接键值对
        flattened_parts.append(f"{field_name}{kv_delimiter}{field_value}")
    # 用令牌拼接所有有效字段
    return sep_token.join(flattened_parts)

# 示例调用
sample_product = {
    "product_name": "Wireless Headphones",
    "description": "Noise cancellation\n20-hour battery life",
    "price": 199.99,
    "discount": None
}
specified_fields = ["product_name", "description", "price", "discount"]
print(flatten_product(sample_product, specified_fields))
# 输出: product_name: Wireless Headphones[SEP]description: Noise cancellation[SEP]20-hour battery life[SEP]price: 199.99

这种方式通过将字段顺序、令牌等作为参数传入,避免了硬编码问题,完全依赖CPython原生的字典操作、字符串处理实现。

2. tokenizers库相关方案

Hugging Face的tokenizers库核心功能是文本分词(将文本转换为子词/令牌序列),本身没有直接处理JSON/字典转扁平化字符串的功能,但可以结合以下流程实现需求:

步骤1:先将字典转为符合要求的扁平化字符串

用上面的原生方法(或自定义逻辑)生成满足规则的扁平化文本。

步骤2:用tokenizers进行令牌化

将扁平化后的文本传入tokenizers,转换为令牌序列。示例代码:

from tokenizers import Tokenizer
from tokenizers.models import WordPiece
from tokenizers.pre_tokenizers import Whitespace

# 初始化并配置分词器
tokenizer = Tokenizer(WordPiece(unk_token="[UNK]"))
tokenizer.pre_tokenizer = Whitespace()

# 可选:自定义训练分词器(若使用预训练分词器可跳过此步)
from tokenizers.trainers import WordPieceTrainer
trainer = WordPieceTrainer(
    vocab_size=1500,
    special_tokens=["[UNK]", "[SEP]"]
)
# 用样本扁平化文本训练
tokenizer.train_from_iterator([flatten_product(sample_product, specified_fields)], trainer)

# 令牌化扁平化文本
encoded_output = tokenizer.encode(flatten_product(sample_product, specified_fields))
print(encoded_output.tokens)
# 输出示例: ['product', '_name', ':', 'Wireless', 'Headphones', '[SEP]', 'description', ':', 'Noise', 'cancellation', '[SEP]', '20', '-', 'hour', 'battery', 'life', '[SEP]', 'price', ':', '199', '.', '99']

如果需要将扁平化逻辑集成到tokenizers的流水线中,可以自定义PreTokenizer来处理换行符替换,但过滤None值、按指定顺序拼接的逻辑仍需在传入tokenizers前完成,因为tokenizers不具备结构化数据处理的能力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:02:57