如何仅用内置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




