限制字符串中的句子数量

4 投票
5 回答
829 浏览
提问于 2025-04-16 01:48

一个初学者的Python问题:

我有一串文字,里面有x个句子。我该怎么提取前两个句子呢?这些句子可能以句号(.)、问号(?)或者感叹号(!)结尾。

5 个回答

0

这是你可以这样做的方法:

str = "Sentence one? Sentence two. Sentence three? Sentence four. Sentence five."
sentences = str.split(".")
allSentences = []
for sentence in sentences
    allSentences.extend(sentence.split("?"))

print allSentences[0:3]

可能还有更好的方法,我期待看到它们。

1

我这样解决的:分隔句子,不过那篇文章下面的评论也提到了NLTK,但我不知道怎么在他们的网站上找到句子分割器...

10

忽略一些考虑,比如一个 . 什么时候算作句子的结束:

import re
' '.join(re.split(r'(?<=[.?!])\s+', phrase, 2)[:-1])

编辑:我刚想到的另一种方法是:

re.match(r'(.*?[.?!](?:\s+.*?[.?!]){0,1})', phrase).group(1)

注意事项:

  1. 第一个解决方案允许你把2替换成其他数字,以选择不同数量的句子;而在第二个解决方案中,你需要把 {0,1} 中的1改成你想提取的句子数量减一。
  2. 第二个解决方案在处理一些特殊情况时,比如空字符串或没有标点的字符串,表现得没有那么好。虽然可以改进,但正则表达式会变得更加复杂,我更倾向于选择第一个稍微效率低一点的解决方案,而不是让人看不懂的复杂代码。

撰写回答