基于正则表达式的句子分裂

时间:2017-06-22 11:33:27

标签: python regex

我试图将一篇文章分成句子。并使用以下代码(由离开组织的人编写)。帮我理解代码

re.split(r' *[.,:-\@/_&?!;][\s ]+', x) 

1 个答案:

答案 0 :(得分:1)

它查找标点符号,例如停靠点,逗号和冒号,可选地以空格开头,后跟至少一个空白字符。最常见的情况是". "。然后它通过删除匹配的标点并将剩余的任何内容作为列表返回,将字符串x拆分成碎片。

>>> x = "First sentence. Second sentence? Third sentence."
>>> re.split(r' *[.,:-\@/_&?!;][\s ]+', x) 
['First sentence', 'Second sentence', 'Third sentence.']

正则表达式不必要地复杂,并且做得不好。

这一位::-\@有一个冗余的引号反斜杠,表示ascii 58和64之间的字符,换句话说就是: ; < = > ? @,但最好明确列出7个字符,因为大多数人们不会知道那个角色属于哪个角色。那包括我:我不得不查一查。它显然也包括代码的作者,因为他最后再次冗余地指定了;

这个位[\s ]+表示一个或多个空格或空格字符,但空格 是一个空白字符,因此可以更简单地表示为{{1 }}。

请注意返回列表的第3个元素中保留的句点。这是因为当完整的句号出现在行尾时,它后面没有空格,正则表达式坚持它必须是。保留句号是可以的,但前提是所有句子都是一致的,而不仅仅是那些以换行符结束的句子。

扔掉那些代码并从头开始。或者使用\s+,其中包含用于将文本拆分为句子的电动工具,并且可能会做得更加值得尊敬。

nltk