如何用一个句号替换多个句号,以便 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/