You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何仅用内置split()函数实现无正则/外部依赖的句子分词函数

实现无正则的句子分词函数(仅用split())

嘿,我来帮你修复并优化这个句子分词函数!先看看原代码的问题:你只是嵌套循环处理了分隔符,但没有把每次分割后的结果正确收集起来,最后返回的还是最初按.分割的l1,这肯定没法得到想要的结果。

优化思路

我们需要逐步迭代处理每个分隔符,每次把当前所有的文本片段用新的分隔符分割,然后收集所有分割后的结果。最后还要处理可能的空字符串(比如连续标点、开头/结尾的标点带来的空内容),同时清理句子前后的空白。

优化后的代码

def get_sentences(text):
    # 初始结果列表,先放入原始文本
    sentences = [text]
    
    # 依次处理三个句子结束符
    for separator in ['?', '!', '.']:
        temp_list = []
        for segment in sentences:
            # 把当前片段用分隔符分割,将结果扩展到临时列表
            temp_list.extend(segment.split(separator))
        # 更新结果列表为最新分割后的内容
        sentences = temp_list
    
    # 过滤空字符串,同时去除每个句子前后的多余空格
    return [sentence.strip() for sentence in sentences if sentence.strip()]

测试示例

t = "Are you out of your mind? I can't believe it! I'm so disappointed."
print(get_sentences(t))
# 输出: ['Are you out of your mind', "I can't believe it", "I'm so disappointed"]

代码说明

  • 先从原始文本开始,每次用一个分隔符分割所有现有片段,确保所有类型的句子结束符都被处理到
  • extend()方法可以把分割后的列表元素直接添加到临时列表,避免嵌套列表的问题
  • 最后一步的列表推导式会过滤掉分割后产生的空字符串(比如"Hello..World"分割后会有一个空串),同时用strip()清理句子前后的空格,让结果更干净

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

火山引擎 最新活动