如何使用单个完整停止替换多个句点,以便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']
我该怎么做呢?
您可以使用正则表达式执行此操作,并将多个点的出现次数替换为单个点,如下所示:
#!/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()
接受应该替换的正则表达式模式.在我们的例子中,这是r'\.+'
.
让我们更深入地了解这种模式.因为你正在寻找点,.
我们需要抓住它们.但是,通常在.
正则表达式中使用点符号来匹配任何不是我们想要实现的字符.为了匹配点.
而不是任何字符,我们需要通过在点给出前添加反斜杠来转义此字符\.
.
因为我们想要找到任何点的出现,我们不知道有多少点,我们只是在寻找"一个或多个",我们通过将它们附加+
到我们的匹配组来实现/.
.
我们有一个正在运行的正则表达式:/.+
我们通过它r'\.+'
来向Python展示这是一个正则表达式而不是普通的字符串.接下来,如re.sub()
文档中所述,我们需要指定一个我们想要放置的字符串而不是我们的正则表达式模式.这只是一个单点"."
,因为您想用一个点替换多个点.我们传递的第三个参数是您的字符串a
,我们需要在其中执行所需的替换.
我不想做任何广告,但是为了快速了解Python中的正则表达式我可以建议这个备忘单.