【问题标题】:What is the regular expression?什么是正则表达式?
【发布时间】:2015-06-09 08:19:38
【问题描述】:

我正在使用 Nltk 的 punkt 分词器将段落分词成句子,但在某些情况下,例如下面的示例,分词器无法识别句子,因为句点后跟数字。我想使用正则表达式识别这些场景并将'.1,7,9' 替换为'. 1,7,9',即在引用和句点之间添加空格。

Ex1.  `This is a random sentence.1,7,9 This is a sentence followed by it.`
Ex2. I love football.1,7,24`I also like cricket.

Ex3. ESD for undifferentiated  cancers.[1][7]`Cancers can be treatable.

预期输出:

EX1. This is a random sentence.
     1,7,9 This is a sentence followed by it.
Ex2. I love football.
     ESD for undifferentiated  cancers.1,7
Ex3. ESD for undifferentiated  cancers.1,7
     [1][7]`Cancers can be treatable.

谢谢。

【问题讨论】:

  • 第三种情况的预期输出是什么?
  • 您的第三个示例和预期的输出不同。
  • 对不起我的错。我已经更新了。

标签: python regex nltk


【解决方案1】:

下面的正则表达式将用. + \n替换所有非空格字符后面的点

>>> import re
>>> s = "Ex1.  This is a random sentence.1,7,9 This is a sentence followed by it."
>>> print(re.sub(r'\.(\S)', r'.\n\1', s))
Ex1.  This is a random sentence.
1,7,9 This is a sentence followed by it.

DEMO

【讨论】:

  • 给我一分钟,我会测试它并回复你。谢谢。
  • 感谢 (+1) 提供漂亮的演示链接。
  • @AvinashRaj 您的正则表达式在上述示例中运行良好。但是,如果有一个电子邮件 ID 'ask@to.in' 它将它分为 'ask@to' 和 'in' ,如果有像 '1.3704' 这样的十进制数字,它将它分为 1 和 3704。我是什么试图实现的是stackoverflow.com/questions/29362160/…
  • 那么我该如何区分呢?
  • 我已接受您的回答。我在问你解决我的问题的任何线索。基本上我所要做的就是在一段时间后删除上标。
【解决方案2】:

在附加的整数列表是引用的情况下,将字符返回放在整数列表之后可能会很有用:

>>> import re
>>> s = "Ex1.  This is a random sentence.1,7,9 This is a sentence followed by it."
>>> print(re.sub(r'(\.\S+\s)', r'\1\n', s))
Ex1.  This is a random sentence.1,7,9 
This is a sentence followed by it.

【讨论】:

  • 但是如果句号后没有空格,我使用的分词器无法区分新句子。我们如何在您的正则表达式中添加空间?
  • 你的意思是print(re.sub(r'\.(\S)', r'. \1', s))
  • @AvinashRaj 我们应该怎么做才能得到这样的输出:“这是一个随机句子。1,7,9 这是一个紧随其后的句子。” #句号后的空格。如果是这种情况,那么分词器就能够区分两个不同的句子。
  • @ask13704804 最好将其作为一个新问题提出。
  • 我不能再在 3 天内提出新问题,因为我之前的问题获得了 2 次反对票,而且我最近加入了。我的声望只有8。请问可以在这里做点什么吗?
猜你喜欢
  • 2011-06-15
  • 2011-08-07
  • 2013-04-07
相关资源
最近更新 更多