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
相关产品推荐
相关产品推荐

