如何用一个句号替换多个句号,以便 NLTK 句子标记器可以将它们区分为 2 个不同的句子

例如

a = "the food was good...what about the bread huh..Awesome"

如果我使用
nltk.sent_tokenize(a)
它给了我
['the food was good...what about the bread huh..Awesome']

但我想要的是
['the food was good.', 'what about the bread huh.', 'Awesome']

我该怎么做呢?

最佳答案

您可以通过使用 regex and substitute 来做到这一点,多个点的出现仅由一个点组成,如下所示:

#!/usr/bin/env python3
# coding: utf-8

import re

a = "the food was good...what about the bread huh..Awesome"
a_replaced = re.sub(r'\.+', ".", a)

给你:
'the food was good.what about the bread huh.Awesome'

另外,我会给你一个关于它是如何工作的小解释。 re.sub() 接受一个应该被替换的 regex 模式。在我们的例子中,这是 r'\.+'

因此,让我们更深入地了解这种模式。由于您正在寻找点 .,我们需要捕获它们。然而,通常在正则表达式中使用点号 . 来匹配任何不是我们想要实现的字符。为了匹配点 . 而不是任何字符,我们需要通过在给出 \. 的点前面添加反斜杠来转义这个字符。

由于我们想要找到任何出现的点,并且我们不知道会有多少个点,我们只是在寻找“一个或更多”,我们通过将 + 附加到我们的匹配组 /. 来实现。

现在,我们有了一个有效的正则表达式:/.+,我们将其作为 r'\.+' 传递,以向 Python 表明这是一个正则表达式而不是普通字符串。接下来,如 re.sub() docs 中所述,我们需要指定一个我们想要放置的字符串,而不是我们的正则表达式模式。这只是一个单点 ".",因为您想用一个点替换多个点。我们传递的第三个参数是您的字符串 a,我们需要在其中进行所需的替换。

我不想做广告,但为了快速了解 Python 中的正则表达式,我可以建议 this cheat sheet

关于python - 用单个句号替换多个句号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34104206/

10-16 23:03