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

无需大语言模型:如何分离无格式标记的Python字符串中的文本与代码

无需大语言模型:如何分离无格式标记的Python字符串中的文本与代码

嘿,这个问题确实挺常见的——没有格式标记的混合文本和代码拆分,不用LLMS的话,咱们可以靠代码的语法特征和上下文逻辑来搞定,我给你分享几个实用的思路和示例:

核心思路:基于代码的语法特征识别

不管是Python还是其他语言,代码都有自己独特的语法规律,咱们可以抓住这些规律来区分文本和代码:

  • 起始关键词:比如Python的def/class/import,Java的public/static,JavaScript的function/const,这些都是代码块常见的起始标识
  • 缩进/块结构:像Python依赖缩进区分代码块,Java/C++用{},这些结构和普通文本的换行逻辑差异很大
  • 符号密度:代码里会频繁出现括号、冒号、运算符、引号这些符号,普通文本里这类符号的密度要低得多

具体实现示例(以Python为例)

下面是一个简单的Python函数,靠上下文和语法规则来拆分混合文本:

def split_text_and_code(raw_text):
    # 先把文本按行拆分
    lines = [line.rstrip('\n') for line in raw_text.splitlines()]
    text_lines = []
    code_lines = []
    in_code_block = False
    code_indent_level = 0

    for line in lines:
        stripped_line = line.strip()
        # 不在代码块时,判断是否进入代码块
        if not in_code_block:
            # 匹配Python代码块的起始特征:关键词开头,或行尾带冒号(非空行)
            if (stripped_line.startswith(('def ', 'class ', 'import ', 'from ', 'if ', 'while ', 'for ', 'try ', 'with ')) 
                or (stripped_line.endswith(':') and len(stripped_line) > 1)):
                in_code_block = True
                code_lines.append(line)
                # 记录代码块的起始缩进级别
                code_indent_level = len(line) - len(stripped_line)
            else:
                text_lines.append(line)
        # 已经在代码块时,判断是否退出代码块
        else:
            current_indent = len(line) - len(line.lstrip())
            # 缩进级别大于等于起始缩进,或者是空行(代码里的空行),都算代码部分
            if current_indent >= code_indent_level or stripped_line == '':
                code_lines.append(line)
            else:
                # 缩进回到文本级别,退出代码块
                in_code_block = False
                text_lines.append(line)
    
    # 合并结果并去除首尾空白
    separated_text = '\n'.join(text_lines).strip()
    separated_code = '\n'.join(code_lines).strip()
    return separated_text, separated_code

# 测试你的示例文本
sample_text = """
Can you change sum operation to multiplication?

def process(a: int, b: int):
    print(a + b)
"""
text_part, code_part = split_text_and_code(sample_text)
print("文本部分:")
print(text_part)
print("\n代码部分:")
print(code_part)

扩展到多语言的方法

如果要支持其他语言,你可以做一个语言规则字典,比如:

language_rules = {
    "python": ["def ", "class ", "import ", "from ", ":$"],
    "java": ["public ", "private ", "static ", "{"],
    "javascript": ["function ", "const ", "let ", "=>"]
}

先遍历规则,判断当前文本里的代码属于哪种语言,再应用对应的识别逻辑,就能覆盖更多场景。

注意事项

这种方法不是100%完美的,如果文本里出现了类似代码的内容(比如用户写了“def 我的自定义函数”),可能会误判。你可以根据自己的实际场景调整规则,比如增加对参数定义、类型提示、函数调用的判断,来提升准确率。

备注:内容来源于stack exchange,提问作者Callme-Milad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:33:07