Python在Xth senten后面剪了一条线

2024-09-28 01:30:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须剪切一个unicode字符串,它实际上是一篇文章(包含句子),我想在python的第Xth个句子之后剪切这篇文章的字符串。在

判断句子结尾的一个很好的指标是它以句号(“.”)结尾,单词以大写名称开头。例如

myarticle == "Hi, this is my first sentence. And this is my second. Yet this is my third."

如何做到这一点?在

谢谢


Tags: 字符串名称ismy结尾文章unicodethis
3条回答

考虑下载自然语言工具包(^{})。然后,你可以创建一些句子,不会因为“U.S.A.”或无法拆分以“?!”结尾的句子。在

>>> import nltk
>>> paragraph = u"Hi, this is my first sentence. And this is my second. Yet this is my third."
>>> sentences = nltk.sent_tokenize(paragraph)
[u"Hi, this is my first sentence.", u"And this is my second.", u"Yet this is my third."]

您的代码变得更加可读。要进入第二句话,你要用你习惯的符号。在

^{pr2}$

这里有一个更可靠的解决方案:

myarticle = """This is a sentence.
   And another one.
   And a 3rd one."""

N = 3  # 3 sentences

print ''.join(sentence+'.' for sentence in re.split('\.(?=\s*(?:[A-Z]|$))', myarticle, maxsplit=N)[:-1])

与前面提到的其他一些可能性相比,此解决方案有一些优势:

  1. 即使在你的文本中确实有N个句子,它也能工作。其他一些答案在结尾处产生一个双.。考虑到最后一个句子后面不是大写字母,而是文本的结尾($),可以避免这种情况。

  2. 即使在文本中少于N个句子,这种方法仍然有效。

  3. 拆分的数量由maxsplit参数限制为re.split(),这限制了拆分的数量,因此非常有效。

希望这有帮助!在

如果可以有其他标点符号而不是通常的“.”,您可能应该尝试以下操作:

re.split('\W(?=[A-Z])',ss)

这将返回句子列表。当然,它没有正确地处理保罗提到的案例。在

相关问题 更多 >

    热门问题