用单个句号替换多个句号
Posted
技术标签:
【中文标题】用单个句号替换多个句号【英文标题】:Replace multiple fullstops with single fullstop 【发布时间】:2016-03-10 07:44:18 【问题描述】:如何,以便 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']
我该怎么做?
【问题讨论】:
您是否检查过省略号几乎总是在您的语料库中结束一个句子?因为情况并非总是如此:“这……很有趣”。 【参考方案1】:您可以通过使用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。
【讨论】:
【参考方案2】:您也可以为此目的使用re.split
。它也会返回一个列表
a="the food was good...what about the bread huh..Awesome"
sr = re.split("\.+", a)
print sr
你得到
['the food was good', 'what about the bread huh', 'Awesome']
干杯!
【讨论】:
坏主意:句子标记器之所以存在是因为句号总是结束一个句子。但是您可以使用split()
将其拆分为三个句点,然后将每个片段句子标记为更多句子。以上是关于用单个句号替换多个句号的主要内容,如果未能解决你的问题,请参考以下文章
如何从亚马逊红移中的字符串中删除非数字字符(句号“。”除外)