我试图将一篇文章分成句子。并使用以下代码(由离开组织的人编写)。帮我理解代码
re.split(r' *[.,:-\@/_&?!;][\s ]+', x)
答案 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