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

Python中实现含例外规则的句子分割:跳过Mt.后的句点

正确分割包含缩写的英文句子的Python方案

嗨,这个问题我太熟了!直接用split(".")确实会踩坑——它会把所有句号都当作句子分割点,就连Mt.这种缩写里的句号也被拆分,导致得到错误的结果。给你两个靠谱的解决方案:

方案一:纯正则表达式(无需第三方库)

我们可以用正则的负向回顾断言来区分“缩写里的句号”和“句子结尾的句号”:只分割那些前面不是短单词(比如1-2个字母的缩写,像Mt、Mr、Ms这类)的句号,并且确保句号后面是空格加大写字母(句子开头的特征),或者句号在字符串末尾。

代码示例:

import re

data = "Mt. Everest is the highest peak in the world. It's height is 8848 m."
# 正则规则:匹配符合句子结尾特征的句号,排除缩写里的句号
sentences = re.split(r'(?<!\b[A-Za-z]{1,2})\. (?=[A-Z])|\.$', data)
# 过滤掉分割后产生的空字符串,同时去除多余空格
sentences = [sent.strip() for sent in sentences if sent.strip()]

print(sentences)
# 输出:["Mt. Everest is the highest peak in the world", "It's height is 8848 m"]

方案二:用NLTK专业分词工具(更健壮)

如果需要处理更多复杂场景(比如更多类型的缩写、特殊句式),可以用NLTK库的sent_tokenize——它是专门训练过的句子分割工具,能自动识别缩写,不会误拆分。

首先需要安装NLTK并下载必要的模型:

# 安装NLTK(如果没装过)
# pip install nltk

import nltk
nltk.download('punkt')  # 下载分词模型

然后使用工具分割句子:

from nltk.tokenize import sent_tokenize

data = "Mt. Everest is the highest peak in the world. It's height is 8848 m."
sentences = sent_tokenize(data)

print(sentences)
# 输出:["Mt. Everest is the highest peak in the world.", "It's height is 8848 m."]

这两种方法都能完美解决你的问题,纯正则适合不想引入第三方库的场景,NLTK则更适合处理复杂文本~

内容的提问来源于stack exchange,提问作者Subigya Upadhyay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:48