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

如何高效截断字符串至指定长度且仅在角色标识处分割?

如何实现仅在指定对话标识处截断文本

要实现只在person alpha:或person beta:开头的位置截断文本,保证最终结果以这些标识起始且长度不超过指定值,可以按以下步骤来做:

核心思路

  • 先截取原文本的最后max_length个字符,缩小处理范围;
  • 在这个截取的片段里,收集所有合法对话起始标识(person alpha:、person beta:)的位置;
  • 找到片段里最靠前的标识位置,从该位置截取到片段末尾,这样既保证结果以合法标识开头,长度也不会超过指定值;
  • 若片段里未找到任何标识(极端情况),直接返回该片段即可。

Python 代码实现

def truncate_conversation(text, max_length):
    if len(text) <= max_length:
        return text
    
    # 先取最后max_length个字符缩小处理范围
    truncated = text[-max_length:]
    
    # 定义合法的对话起始标识
    markers = ['person alpha:', 'person beta:']
    
    # 收集所有标识在截断片段中的起始索引
    valid_positions = []
    for marker in markers:
        current_pos = 0
        while True:
            idx = truncated.find(marker, current_pos)
            if idx == -1:
                break
            valid_positions.append(idx)
            current_pos = idx + len(marker)
    
    if not valid_positions:
        # 极端情况:未找到标识,直接返回截取的片段
        return truncated
    
    # 取最靠前的标识位置,保证截取内容最长且不超max_length
    first_valid_start = min(valid_positions)
    
    return truncated[first_valid_start:]

验证示例

用你提供的对话文本测试:

  • 当max_length=100时,截取的100字符片段里仅包含最后一段对话的标识,返回结果就是person alpha: I'm watching a new TV series.;
  • 当max_length=470时,截取的片段里包含从person beta: I am fine, thank you. What are you doing?开始的所有后续对话,返回结果与预期一致。

效率说明

这种方法先将处理范围缩小到指定长度,再在小范围内查找标识,避免了遍历整个长文本;同时利用字符串内置的find方法批量查找,比手动逐字符遍历效率更高,适合处理长度可变的输入文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:48:29