【问题标题】:efficient way to split on punctuation without inserting a void token if sentence ends with a punctuation mark如果句子以标点符号结尾,则无需插入无效标记即可拆分标点符号的有效方法
【发布时间】:2017-05-14 08:46:11
【问题描述】:

我需要在python中的标点符号上拆分句子。

这个命令几乎可以正常工作:

re.split('\W+', line.lower().strip(), flags=re.UNICODE)

问题是,如果句子的最后一个字符是标点符号,那么最后一个记号就是一个空记号。

我怎样才能避免这种情况?

我想要一个允许我不插入无效令牌的解决方案。事后我不能取消它:在我的情况下,效率是一个问题,因为我需要在非常大的文本语料库上运行这个命令。

【问题讨论】:

    标签: python regex split


    【解决方案1】:

    您可以将re.findall\w+ 一起使用,而不是尝试按非单词 (\W+) 字符进行拆分:

    >>> line = 'Hello world!'
    >>> re.findall(r'\w+', line.lower(), flags=re.UNICODE)
    ['hello', 'world']
    # `.strip()` was remove because `\w+` does not match whitespaces.
    

    旁注:您最好使用r'raw string literals' 以避免将反斜杠用作转义序列。


    替代方案:将不带尾随非单词字符的字符串传递给re.split

    >>> re.split(r'\W+', re.sub(r'\W+$', '', line.lower().strip()), flags=re.UNICODE)
    ['hello', 'world']
    

    注意:您也可以去除前导非单词字符。要处理双方,请使用^\W+|\W+$ 模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 2013-04-14
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多