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

Python实现含表情符号的句子拆分:末尾表情需单独成句

问题:拆分句子时将句末连续表情单独作为独立句子

现有Python代码在拆分包含表情的句子时,会将句末的表情附加到前一个句子末尾,不符合需求。当前输出为['Hi!😁', 'My name is xyz.😁😁'],期望输出为['Hi!😁', 'My name is xyz.', '😁😁']。

修改后的代码

import emoji

def split_sentences(text):
    sentences = []
    current_sentence = ''
    i = 0
    text_len = len(text)
    
    while i < text_len:
        current_char = text[i]
        current_sentence += current_char
        
        # 遇到句末标点时处理
        if current_char in ".!?":
            # 先把当前句子(不含后续表情)加入列表
            sentences.append(current_sentence.strip())
            current_sentence = ''
            i += 1
            
            # 收集后续连续的表情(跳过空格)
            emoji_group = ''
            while i < text_len:
                if text[i] == ' ':
                    i += 1
                    continue
                if emoji.is_emoji(text[i]):
                    emoji_group += text[i]
                    i += 1
                else:
                    break
            # 如果有收集到表情,单独作为一个句子
            if emoji_group:
                sentences.append(emoji_group)
        else:
            i += 1
    
    # 处理剩余未拆分的文本
    if current_sentence.strip():
        stripped = current_sentence.strip()
        # 拆分剩余文本中的表情块
        text_part = ''
        emoji_part = ''
        for char in stripped:
            if emoji.is_emoji(char):
                emoji_part += char
            else:
                if emoji_part:
                    sentences.append(text_part)
                    sentences.append(emoji_part)
                    text_part = char
                    emoji_part = ''
                else:
                    text_part += char
        # 处理最后剩余的部分
        if text_part:
            sentences.append(text_part)
        if emoji_part:
            sentences.append(emoji_part)
    
    return sentences


text = 'Hi! 😁 My name is xyz. 😁😁'
sentences = split_sentences(text)
print(f"sentences: {sentences}")

关键修改说明

  • 句末标点后单独处理表情:遇到.!?这类句末标点时,先将标点所在的句子加入列表,然后专门收集后续的连续表情(跳过空格),如果有表情就单独作为一个句子。
  • 剩余文本的表情拆分:处理循环结束后剩余的文本时,遍历每个字符,分离普通文本和连续表情块,分别加入句子列表,确保连续表情单独成句。
  • 修复原逻辑漏洞:原代码会把标点后的表情直接追加到当前句子,且仅处理单个结尾表情,修改后能识别连续表情并独立拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:02:49